Jump to content

Recommended Posts

Posted

Seems good server :D

It's a great server you should test it, it's the only one server thata newbies got better benefits than old players (on the most of things) and the GM Team is very helpful and active

Posted

It's a great server you should test it, it's the only one server thata newbies got better benefits than old players (on the most of things) and the GM Team is very helpful and active

I'm driving haha when I will in home I will test it for sure :D
Posted

Thanks for the positive posts :) Feel free to provide feedback about the server. Also if you need anyone 1 on 1 help you can email me at balls006@Hotmail.com, or on Facebook (L2 Equanimity or Jerome Tyrome)

 

We strive to provide great support and great bonuses for new players.

 

For those who don't know about our new player bonuses here is the an outline:

 

Here is what you should know about making a character on our server.

1.) As you level up you will be given rewards/items to help you. Such as Adena to be able to afford each and every armor set. Also you will get pop up windows giving tips about the server/information and also direct ports to where you should be leveling at.

2.) At some point, as long as you are online long enough, a GM will personally welcome you, and greet you and ask if you have any questions and give additional information about our new player benefits.

3.) You can use your newbie scrolls (you start with 1000) to get a free S84 armor set at the GM Shop's newbie section. These sets there will say for example Oath Elegia. I want to make sure you know Oath items are actually very good. They have the same stats as normal items, and they also have special benefits. They are easier to enchant, and easier to add elementals to. You can also mix them with a normal armor set and still get the set bonus. The only down side is that they are not tradable, but its highly recommended to use them. Their enchant rates are 73% (normal is 70%) and for blesseds 78% (normal blesseds are 75%). You can get Oath Blesseds with your newbie scrolls at the newbie section of the GM Shop

4.) You can get more newbie scrolls from events, instances, and voting. All give great prizes to everyone already, but new players get additional prizes stacked on top of the normal rewards in the form of newbie scrolls to help you catch up. The more newbie scrolls you get the more you can enhance your character and your Oath items.

5.) Events are one of the best ways to get items/adena. You get prizes from events even if you lose that event. So its in your best interest to do them. They are also very fun of course, you just need level 84 first.

4.) We have special events designed for new players called "Limited" mode events. Limited mode events make it where if anyone has an item over +10, it has the same stats of +10 instead. It also blocks the use of any hero/clan skills. This makes it much more fair for new players to play. When an event is announced it will say mode "Limited" or mode "Default" events are in limited mode 50% of the time. So watch for them.

6.) We hope you get a chance to test our many features such as: Achievements,  PvP Streaks, PvP Rewards, PvP Assists (Support classes get prizes and recognition in PvP too), Rebirthing, Custom Instances, Choosable Weapon Glows. .dressme, lots of configurable settings in .options. Our custom event engine, and so much more!

7.) I advise that new players sell their Giant's Codex Mastery (GCM) on the Giran market/to other players, because they are worth 2.5b+ Adena. It can help you build your character much faster by taking advantage of the high market values. Getting your skills +++ is really an end game thing, besides you will obtain plenty GC, Oath GC, and Oath GCM to sufficiently enchant your skills anyways.

8.) we offer PvP/PvP protection against newer players, we have safe zones to farm, but we also have a special buff that prevents anyone from attacking you if they are more then 1 level apart, so with this you can bring a safe zone with you everywhere if you meet the requirements. Additionally if there are circumstances where you can be PKed and its an old player vs a new player that person gets double the karma and double the PKs. You can't work off your karma here in just a few mobs, we don't work like that.

9.) Feel free to contact me at any time, type /gm in game to submit a petition, or email me at balls006@hotmail.com, or on Facebook.

Additionally new clans get free clan levels/reputation depending on how many players they bring

Also we list all the clans on the server that recruit new players and who to contact to get into those clans, and what languages those clans speak. All this information above and more is available as reference in game when you type .newbie additional questions/information can be found in .faq


We also offer a gm shop service that helps players build their character, and of course GMs (and myself personally) will take time out for you and give you advice about your class, or anything you could be missing that could make you stronger.
 

Posted

I really wonder how I didn't stumble upon this server so long. Seems just what I want to play right now. Really nice features, good job.
Downloading the client, I'll see you in game soon. ;D ;D

Posted

Awesome, and thanks for posting :)

 

If you have any questions or concerns. Just let me know, and feel free to contact me in private if you need for one on one help/advice/tips/info about the server at balls006@hotmail.com

  • 2 weeks later...
Posted

A Wipe would be so beneficial for your server, it has been years since it has been wiped. It would make new players more interested to join. I know you have bonuses and that, I started to play here again, but you know, wipe has more benefits especially in how long you had the server on for!

Posted

A Wipe would be so beneficial for your server, it has been years since it has been wiped. It would make new players more interested to join. I know you have bonuses and that, I started to play here again, but you know, wipe has more benefits especially in how long you had the server on for!

 

Thanks for posting :)

 

Note, we have NEVER wiped.

 

I have already posted why, but ill copy/paste it:

 

First and foremost wipes are generally used to exploit users and draw in players. Wipes are great for servers that are unbalanced and not properly designed, thus needed th restart for everyone to be even again. Due to low quality servers using this tactic over and over again, most people are brainwashed into thinking wipes are good. However, wipes for the most part are bad, and you are getting screwed over.

 

Hmm, we are definitely not empty, nor do we need a new start/fresh start, we are more successful in our 6th year online, then any other year, and we continue to do better each and every time, thus proving we don't need it. Also you should consider the following:

 

During peak hours we generally have 450+ online, on weekends more like 550+, take note there is like 100 to 150 shops though.

 

However, generally speaking our online counts should not be compared to other servers directly. 99% of servers have fake online counts/use immoral tactics to boost their online count such as the following:

 

1: Fake online counts in general, just the owners putting fake values into their online counts

 

2: Allowing botting/or not caring enough about it, also boosts online counts, making it where the server looks like it has more players

 

3: Actually coding fake players for the server, they look like normal players, but generally stay in town and move around time to time.

 

4: Other servers often reward their players for advertising on other servers forums and social media pages. Which is highly immoral. They call it an advertising contest.

 

5: Other servers hire/create bots to go into other servers and spam advertisements (via in game mail) so they don't get caught as quick, as normal shouts etc.

 

6: A lot of servers set up their website to force you to automatically like their Facebook page with out your knowledge, thus exploiting their traffic for thousands of dollars worth of free advertising.

 

7: Wiping/Closing/Renaming: As most people know, a lot of servers wipe/have seasons to encourage people to come back to "re-balance" the server. If a server really needs this to make it more playable, its not a well designed server. Wipes are a way to compensate for design flaws. People are also brainwashed into think wipes are good, cause they generally play bad servers to begin with. Servers should be designed for the long term like ours, that's why we are still around after 6+ years. Wipes are another way to spur donations as well, also closing/renaming is common among the private server community, which is of course is a scam as well. So you will replay/reinvest in a server you already played that will disappoint you again.

 

8: DDoS attacking the competition: Some servers are well known for DDoS attacking other servers especially on opening days, or siege day to make them lose players. Especially servers that share the same demographic as their own.

 

We don't use any of these cheats/exploits/immoral tactics. And most servers are really not as big as they claim to be due to the use of one or more of these. So try to take this into consideration before choosing a server you a play.

 

TLDR: Wipes are for servers not properly designed for the long term, and generally used by admins to exploit their users to spur activity and donations. The general population is brainwashed into thinking they are good due to the fact that most servers are not that good, and need it to balance the server out due to poor design. Wipes create distrust between players and the staff too. Also, we have proven through out time we don't need wipes, over time we have become more and more successful. Opposed to servers who do wipe that slowly die out and then eventually wipe again.

Posted

Thanks for posting :)

 

Note, we have NEVER wiped.

 

I have already posted why, but ill copy/paste it:

 

First and foremost wipes are generally used to exploit users and draw in players. Wipes are great for servers that are unbalanced and not properly designed, thus needed th restart for everyone to be even again. Due to low quality servers using this tactic over and over again, most people are brainwashed into thinking wipes are good. However, wipes for the most part are bad, and you are getting screwed over.

 

Hmm, we are definitely not empty, nor do we need a new start/fresh start, we are more successful in our 6th year online, then any other year, and we continue to do better each and every time, thus proving we don't need it. Also you should consider the following:

 

During peak hours we generally have 450+ online, on weekends more like 550+, take note there is like 100 to 150 shops though.

 

However, generally speaking our online counts should not be compared to other servers directly. 99% of servers have fake online counts/use immoral tactics to boost their online count such as the following:

 

1: Fake online counts in general, just the owners putting fake values into their online counts

 

2: Allowing botting/or not caring enough about it, also boosts online counts, making it where the server looks like it has more players

 

3: Actually coding fake players for the server, they look like normal players, but generally stay in town and move around time to time.

 

4: Other servers often reward their players for advertising on other servers forums and social media pages. Which is highly immoral. They call it an advertising contest.

 

5: Other servers hire/create bots to go into other servers and spam advertisements (via in game mail) so they don't get caught as quick, as normal shouts etc.

 

6: A lot of servers set up their website to force you to automatically like their Facebook page with out your knowledge, thus exploiting their traffic for thousands of dollars worth of free advertising.

 

7: Wiping/Closing/Renaming: As most people know, a lot of servers wipe/have seasons to encourage people to come back to "re-balance" the server. If a server really needs this to make it more playable, its not a well designed server. Wipes are a way to compensate for design flaws. People are also brainwashed into think wipes are good, cause they generally play bad servers to begin with. Servers should be designed for the long term like ours, that's why we are still around after 6+ years. Wipes are another way to spur donations as well, also closing/renaming is common among the private server community, which is of course is a scam as well. So you will replay/reinvest in a server you already played that will disappoint you again.

 

8: DDoS attacking the competition: Some servers are well known for DDoS attacking other servers especially on opening days, or siege day to make them lose players. Especially servers that share the same demographic as their own.

 

We don't use any of these cheats/exploits/immoral tactics. And most servers are really not as big as they claim to be due to the use of one or more of these. So try to take this into consideration before choosing a server you a play.

 

TLDR: Wipes are for servers not properly designed for the long term, and generally used by admins to exploit their users to spur activity and donations. The general population is brainwashed into thinking they are good due to the fact that most servers are not that good, and need it to balance the server out due to poor design. Wipes create distrust between players and the staff too. Also, we have proven through out time we don't need wipes, over time we have become more and more successful. Opposed to servers who do wipe that slowly die out and then eventually wipe again.

Well I see your point. But I was tell you the point again. Old players get to the point where they have everything, there is no point for them to play... so they leave, come back from time to time to pvp. I know yours is highly customized but 6 years without wipe, can have negative effects which I stated above. Although you have shown that you have the understanding of why wipes can have a negative effect as well, which i must praise you for. At the end of the day, you own it :) I will carry on playing it, purely because there is so much effort put there. I will start again fresh and see whats going on. and I will further review it!

Posted

Well I see your point. But I was tell you the point again. Old players get to the point where they have everything, there is no point for them to play... so they leave, come back from time to time to pvp. I know yours is highly customized but 6 years without wipe, can have negative effects which I stated above. Although you have shown that you have the understanding of why wipes can have a negative effect as well, which i must praise you for. At the end of the day, you own it :) I will carry on playing it, purely because there is so much effort put there. I will start again fresh and see whats going on. and I will further review it!

 

 

Thank you for your understanding. I can see where you are coming from as well. I know we can't keep everyones interest, however we have a lot more stuff to do then most servers. So even if your an old player, there is usually a good amount of things to do to keep your interest. Weather it be achievements, or Events, or trying to get all our unlockable cosmetics, or exploring classes they wouldn't normally play due to our assist PvP system and more.

 

Also, there are a lot of people in the L2 community who need/seek a non wipe server. For example, people in the military who are gone for 6 months or more at a time. or people simply undergoing a life change, moving, getting a new job etc. Or people who just simply need to take a break and get into a new game release. Most other servers, you are gone for 6 months or so.. everything gone, its wiped, or the server has died, and its not a good feeling.

 

We actually try to welcome all our new players, see if they have any questions, and give them advice if they are open to it. We also tell them about our 6+ year online and 0 wipe record. The response from this is unbelievably positive. It gives people faith int he server, that it actually has a future, and they don't have to worry about their items disappearing.

 

I am grateful that you are going to give it a shot, i hope to hear what you think!

Posted

Thank you for your understanding. I can see where you are coming from as well. I know we can't keep everyones interest, however we have a lot more stuff to do then most servers. So even if your an old player, there is usually a good amount of things to do to keep your interest. Weather it be achievements, or Events, or trying to get all our unlockable cosmetics, or exploring classes they wouldn't normally play due to our assist PvP system and more.

 

Also, there are a lot of people in the L2 community who need/seek a non wipe server. For example, people in the military who are gone for 6 months or more at a time. or people simply undergoing a life change, moving, getting a new job etc. Or people who just simply need to take a break and get into a new game release. Most other servers, you are gone for 6 months or so.. everything gone, its wiped, or the server has died, and its not a good feeling.

 

We actually try to welcome all our new players, see if they have any questions, and give them advice if they are open to it. We also tell them about our 6+ year online and 0 wipe record. The response from this is unbelievably positive. It gives people faith int he server, that it actually has a future, and they don't have to worry about their items disappearing.

 

I am grateful that you are going to give it a shot, i hope to hear what you think!

 

Yes, I got welcomed by one your gm's, his responses were rather scripted, going down the list ensuring that every box is ticked, even though I commented not once but 3 times, that I am fine with the tips as I read the entire guide and played here before. I gave him a tip that he shouldn't be so scripted, but he continued which rather annoyed me, and in that way he completely blanked in what I had to say, which was insulting in a way. I understand that tips are a great way to help a new player out, but when someone's is confident that they know 90% about the server, he shouldn't carry on with the scripting, it's just insulting, it actually really annoyed me that he didn't get the point. Apart from that so far:

 

The community is average, 150-300 unique players ( aka no boxes, offline shops etc). You get the usual cunts, and some nice people. You can tell that not many greeks play there, it's not an easy server, you have to farm, attend events and be active. 

The gameplay is unique for sure, hundreds of things to do, in order to get your gear, which is good. New players do get bonuses, although those bonuses at higher levels seem... useless, and not satisfying I guess, but again you can't be too generous.

So far I realized that in PvP Tanks are incredibly powerful, by powerful I mean pretty overpowered, and it was on a limited event before you say anything about my gear not being +++. Apart from that, it is pretty decent. End game is not that special, it is just farming, pvping, going to events and doing achievements, typical l2, which I guess is good in a way.

 

Server is heavily modified, is it a good thing... Yes... and no. Yes because it feels different than your classic 1 month close servers, l2revenge, l2axel so on and so forth ( basically garbage servers ). No, because i can see that some players with lower IQ will definitely get lost in the amount of options you have, hundreds of menus and plethora of classes that you can choose from, cause they have been reworked.

 

Definitely join, if you are up for a challenge, because the server has everything you need from a mid/pvp server.

Posted

Thanks for posting :)  and giving honest feedback

 

I would like to point out something, in regards to the server being overwhelming to some people (which you are right), however you also said you were somewhat insulted when the GM kept trying to give you tips. This seems to be different sides of the same blade so to speak.

 

Because our server is quite different and can be overwhelming, we try really hard to try and make sure people understand it. I am sorry if you were insulted in anyway. Just we are trying to help in regards to the issue you have brought up. In the thousands of players i have welcomed, 95% of them who claimed they knew everything, did not, i could switch it up and give them an interesting tagling like "Did you know this?" just to check if they really knew everything, and they didn't, and then they were like, ok go ahead and give me some tips.

 

I can see you very sharp mentally, not everyone is like that as you know, and that is partially why that happened. Sorry for the problems.

 

Another thing i would like to point out, is no one can fully figure out a server in just a few days (you may get an idea), but just deciding which classes are OP or not, and everything about the end game, is a bit forward. I hope you see where i am coming from in this regard.

 

Again, thank you for your honest feedback :)

  • 5 weeks later...
Posted (edited)

i suggest to open a lowrate server too you guys are old

 

Hello, and thank you for posting, and your suggestion.

 

However, this month marks our 7 year anniversary (0 wipes too). Each and every year we have become more successful then the year before. So we don't need to make a new server :)

 

We just keep updating, and add new features to our current one.

Edited by L2Equanimity
Posted

Here are some recent updates!

 

akamanah.jpg

 

- Website Updates, Newbie Protection improvements and more!

- We have added more ways to protect new players!
- Now instead of of getting x2 PKs and karma when killing a new player you get x3 and automatically get +2 death penalty.
- The Murderer Achievement has been updated, you now need 50 Overall PKs rather then normal PKs.
- When you PK a new player, you will NOT get overall PKs increased, so it won't help towards the Murderer Achievement anymore. If you want to see your overall PKs type the .stats command.
- You can now trade up more Adena at once for gold bars at the GM Shop (up to 40) instead of capping out at 4.
- .newbie > Which clans recruit new players has been updated (new clan added), also the forums section on clan recruiting has been updated to reflect this change.
- Fixed a problem where cursed weapon owners could not talk to the Global GK, now they can, they will get the same options as red players (limited ports).
- increased the strength of cursed weapons to encourage people to use them/have fun with them, instead of just wanting to get it removed.
- Fixed a problem that makes it incredibly hard for low level characters to get rid of karma, now its much more fair. Its a problem new players encounter often when PvPing their friends.
- Players can now vote every 12 hours instead of 24! Enjoy.
- The Quest Guide for The Other Side of the Truth (Freya part 1) was added to www.L2Equanimity.com.
- The Quest Guide for Request of an Ice Merchant (Freya part 2) was added to www.L2Equanimity.com.
- The Quest Guide for Acquisition of Divine Sword (Freya part 3) was added to www.L2Equanimity.com.
- The Quest Guide for Meeting Sirra (Freya part 4) was added towww.L2Equanimity.com.
- The Quest Guide for Reunion With Sirra (Freya part 5) was added towww.L2Equanimity.com.
- The Quest Guide for Repent Your Sins (PK Removal Quest) was added to www.L2Equanimity.com.

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
Reply to this topic...

×   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

    • 🔥 L2Gold.co x15 Interlude Server 2025 – Grand Opening! 🔥 Join us today and be part of the legendary L2Gold community! 🎉 Grand Opening: 14 March 2025 🎉 ⏰ Time: 21:00 GMT +2 🌍 Server Type: EURO PTS/L2OFF 🌟 Why Play on L2Gold.co? 🌟 ✅ No Wipes – Keep Your Progress Forever! Your characters and progress are permanent. No resets! ✅ Balanced & Fun Gameplay! Experience x15 rates for a smooth and enjoyable progression. ✅ Solo or Party Play Use MP potions and NPC buffers for a great solo experience or team up with friends. ✅ Long-Term Stability Our server is built to last with no interruptions! 📊 Server Rates & Details 📊 Category Rate EXP/SP x15 (Official rate without rune or VIP) Adena x10 (Official rate without rune or VIP) Drop x10 (Official rate without rune or VIP) Spoil x10 (Official rate without rune or VIP) Raid Boss Drop x10 (Official rate without rune or VIP) 🚀 Exciting New Features! 🚀 🎟️ 💰 Weekly Lottery System! – Win rare items, in-game currency, and exclusive rewards! 🎁 More Events & Rewards! – Special in-game activities with exclusive items! 📈 Real-Time Stats! – Track your progress, achievements, and rankings live! ⚔️ New Items Weekly! – Discover rare gear and unique items every week! 🌍 A Growing Global Community 🌍 Players from Greece 🇬🇷, Brazil 🇧🇷, Spain 🇪🇸, and beyond! 🔗 Stay Connected 🔗 Follow us on social media to stay updated! 🌎 Website: L2Gold.co 🎙️ Discord: Server 📘 Facebook: Page | Group 🎥 YouTube:   Watch Videos 🎵 TikTok: Follow Us 🔥 Prepare for Battle! 🔥 📅 The adventure begins on 14 March 2025! Join L2Gold.co and Experience an Unforgettable Adventure! 🎮✨
    • y girate unos archivitos del powerclass dale..... sin encrypt
    • Hi, im looking for cardinal pvp script for auto cleanse/rez/nobles etc etc and guide on how to setup as well as what programms do i need to run such scripts as i have never used any helper or something before,
    • [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!!! 🙂
  • Topics

×
×
  • Create New...