Jump to content

Recommended Posts

  • 2 weeks later...
  • 2 weeks later...
Posted

ppl online??

Hello, thanks for posting

 

We have over 500 players online each day during peak times. Also weekends have more. however, please note there is usually around 100 to 150 shops in giran, give or take.

 

However, you should take note we have been around for over 7.5 years now, now wipes. Any time/work/fun you invest in our server will stay here. Your stuff won't be deleted, and we have many unique features!

 

Feel free to check out some of our features, many of which other servers don't have: http://www.l2equanimity.com/index.php?id=features

 

Also we have many new player bonuses, that helps ensure new players such as yourself can build their character strong and catch up with older players easier you can read about it here: http://www.l2equanimity.com/pages/newbie_bonuses.php

 

  • 2 weeks later...
Posted

I'm going to stand to my word, a server worth playing for! Honestly! Don't waste your time anywhere else! 

 

 

Thanks you for the kind words once again :)

 

We really do appreciate it, we put so much time and effort into the server, and we want people to enjoy it!

  • 1 month later...
Posted (edited)

Hello, and thanks for posting

 

Is it the message that also says "wrong protocol version"?

no, let me take a picture to see what i mean 

here >>

 55f6e6e260e44c5f972aa51232aef08f.png

 

I used updater, did a full check and this appeared,

I tried downloading full patch, extracted files with manual way, this appeared.

I even tried deleting system, nothing new.. same error over and over.

Edited by HookeyPooke
Posted

Thanks again for posting.

 

I tried a fresh install of our server, and didn't have any issues.

 

Its important to note, we don't even use a custom LineageEffectsTextures.utx, its retail (for high five). Not sure how you would be getting this error unless you had your own version of this file, but i know you just said you did a fresh install.

 

Have you tried doing a fresh install (not custom patches) and launching with l2.exe (renaming l2.bin to exe) to see what ti does? cause again thats the same LineageEffectsTExtures.utx as retail, its not modified on our server.

  • 3 months later...
Posted

I found this server through the forums here, and i feel like i owe it to this site to say my piece.

I joined L2EQ this summer searching for good place to stay and here's what i've found:

Pros: The biggest thing for me is the stability this server provides, as it's already been mentioned, the server has been online for years now and hasn't been wiped, neither they intend to. So if you're looking for a new server to join, rush and forget after a couple of months, this isn't for you. But if you're looking for something that will be around for a while, and all your hard work not going to waste, then this is definitely for you.

Second, is the newbie support system. They have added a system that lasts a whole month to help newbies, and believe when i tell you it makes you not want the month to end. It really helps a great deal and you won't feel left behind. From xp, to gear, to enchants, or whatever you may need. Certainly the best newbie system i've ever seen.

Third, customized stuff. They have added so many customs features and things, that it's literally overwhelming (in a good way) when you first join L2EQ. The gear is retail hi5, which is also a great deal, because if they had added custom gear after all these years you wouldn't be able to compete with the older players. Also, they have detailed guides placed at most towns for information, or you can use custom commands that has info and FAQ in general for almost any question you may have about the server.

Another thing is the community.  I joined as a newbie expecting to farm my way to a clan, but on my first week there one of the top clans invited me as a member. There's even a list btw you can check with the .newbie command, where you can check which clans are recruiting newbies, and with people that volunteer to help in general. I didn't expect that at all, tbh. Not to mention, that if you like pve like me, there's rb farm every single day, even if you don't have a clan or you're still new. The drops are very good and they will help you get on your feet really fast. Plus it has the usual voting system in place with rewards.

The GM support is almost daily, and even if you don't see a GM online, you can always email Ballz (the old school way) and he will reply at the same day, which i've tested and i'm grateful for.  Their attitude is professional and polite, so you won't have to worry about corrupted or rude GMs that ignore you there. 

I'm not much for PVP, but if you are there several places for it. One is a pvp farm area that has daily pvps there, another is a regular farm area that also has constant pvps. There are the usual arenas and so on, and events that are happening on the hour, with a variety of choices, which you can vote on btw. First time i've seen voting for events, but hey, at least it's here. Plus you get good rewards even if you lose.

It's worth mentioning also, that it's an english speaking server, and the rules are clear about flaming, so you don't see the kind of debauchery i'm used to on (semi-)pvp servers. There's trash talk to be sure, but not the type of flaming (naming mothers and so on) like i've seen around. It's pretty much a friendly global chat.

Lastly, there are donates available to get stuff and help the server, but it's the most passive donation system i've come across. I swear i didn't even notice it on the site till someone pointed it out to me, and in game you won't even find an npc or announcement or anything suggesting that you should donate. (except on the FAQ at the bottom i think). There is not even a question of pay2win about L2EQ, and even if you donate everything you wont be far ahead from others, since i'm already farmed as good as an old player, counting the gear only of course, and not enchants. 

Cons: First, would be the activity. This a tricky thing btw, since there are older players joining again after some time, so it's not like most servers. In general, the activity isn't like you'd see on a new server, that's the truth. But it has plenty of people around to have enough action to keep you entertained and sustain the economy. Personally, i would say that this server doesn't need more people online, it specifically needs "new" people to join. 

Second, and that's just a personal note, is the wars. If you decide to join a clan you most likely will end up being at war with another clan, and as a new member that's frustrating. It is understandable of course to have feuds for such an old server, but still it is annoying on a daily basis when you're still farming for your gear. Not that you can't farm in general, but you know how wars are.

That's all for now, and i can answer any question you may have btw, so pm if you want, or quote me here.

 

This server is really a gem, and i'm glad i've joined. Even if i change my mind tomorrow and leave, i can always come back a few months, or a year later and find my char ready to compete and enjoy the game again, and that to me is very reassuring, because i don't think i could have done that even on official L2. People are helpful and there's enough action everyday for hours and hours, that's the honest truth as i've witnessed it. 

I'm not gonna persuade anyone, you can just read my rant and either believe me or not. This is the first time i've written a review for a L2 server and  i get no reward from it, i only do it because i'm grateful. My advice would be to try it and see for yourselves what L2Equanimity has to offer , i doubt that  you will be disappointed.

Cheers!

  • 1 month later...
Posted

Thanks

On 9/11/2017 at 3:11 PM, Punisher2 said:

I found this server through the forums here, and i feel like i owe it to this site to say my piece.

I joined L2EQ this summer searching for good place to stay and here's what i've found:

Pros: The biggest thing for me is the stability this server provides, as it's already been mentioned, the server has been online for years now and hasn't been wiped, neither they intend to. So if you're looking for a new server to join, rush and forget after a couple of months, this isn't for you. But if you're looking for something that will be around for a while, and all your hard work not going to waste, then this is definitely for you.

Second, is the newbie support system. They have added a system that lasts a whole month to help newbies, and believe when i tell you it makes you not want the month to end. It really helps a great deal and you won't feel left behind. From xp, to gear, to enchants, or whatever you may need. Certainly the best newbie system i've ever seen.

Third, customized stuff. They have added so many customs features and things, that it's literally overwhelming (in a good way) when you first join L2EQ. The gear is retail hi5, which is also a great deal, because if they had added custom gear after all these years you wouldn't be able to compete with the older players. Also, they have detailed guides placed at most towns for information, or you can use custom commands that has info and FAQ in general for almost any question you may have about the server.

Another thing is the community.  I joined as a newbie expecting to farm my way to a clan, but on my first week there one of the top clans invited me as a member. There's even a list btw you can check with the .newbie command, where you can check which clans are recruiting newbies, and with people that volunteer to help in general. I didn't expect that at all, tbh. Not to mention, that if you like pve like me, there's rb farm every single day, even if you don't have a clan or you're still new. The drops are very good and they will help you get on your feet really fast. Plus it has the usual voting system in place with rewards.

The GM support is almost daily, and even if you don't see a GM online, you can always email Ballz (the old school way) and he will reply at the same day, which i've tested and i'm grateful for.  Their attitude is professional and polite, so you won't have to worry about corrupted or rude GMs that ignore you there. 

I'm not much for PVP, but if you are there several places for it. One is a pvp farm area that has daily pvps there, another is a regular farm area that also has constant pvps. There are the usual arenas and so on, and events that are happening on the hour, with a variety of choices, which you can vote on btw. First time i've seen voting for events, but hey, at least it's here. Plus you get good rewards even if you lose.

It's worth mentioning also, that it's an english speaking server, and the rules are clear about flaming, so you don't see the kind of debauchery i'm used to on (semi-)pvp servers. There's trash talk to be sure, but not the type of flaming (naming mothers and so on) like i've seen around. It's pretty much a friendly global chat.

Lastly, there are donates available to get stuff and help the server, but it's the most passive donation system i've come across. I swear i didn't even notice it on the site till someone pointed it out to me, and in game you won't even find an npc or announcement or anything suggesting that you should donate. (except on the FAQ at the bottom i think). There is not even a question of pay2win about L2EQ, and even if you donate everything you wont be far ahead from others, since i'm already farmed as good as an old player, counting the gear only of course, and not enchants. 

Cons: First, would be the activity. This a tricky thing btw, since there are older players joining again after some time, so it's not like most servers. In general, the activity isn't like you'd see on a new server, that's the truth. But it has plenty of people around to have enough action to keep you entertained and sustain the economy. Personally, i would say that this server doesn't need more people online, it specifically needs "new" people to join. 

Second, and that's just a personal note, is the wars. If you decide to join a clan you most likely will end up being at war with another clan, and as a new member that's frustrating. It is understandable of course to have feuds for such an old server, but still it is annoying on a daily basis when you're still farming for your gear. Not that you can't farm in general, but you know how wars are.

That's all for now, and i can answer any question you may have btw, so pm if you want, or quote me here.

 

This server is really a gem, and i'm glad i've joined. Even if i change my mind tomorrow and leave, i can always come back a few months, or a year later and find my char ready to compete and enjoy the game again, and that to me is very reassuring, because i don't think i could have done that even on official L2. People are helpful and there's enough action everyday for hours and hours, that's the honest truth as i've witnessed it. 

I'm not gonna persuade anyone, you can just read my rant and either believe me or not. This is the first time i've written a review for a L2 server and  i get no reward from it, i only do it because i'm grateful. My advice would be to try it and see for yourselves what L2Equanimity has to offer , i doubt that  you will be disappointed.

Cheers!

Thanks so much for posting Punisher :) 

  • 2 months later...
Posted (edited)

Time for everybody to learn the ugly truth about l2 equanimity and his admin Balls. Sorry for the long post.

 

I joined this server about 3 years ago not only for the features but because i was convinced that admin (Balls) care so much and respected his users. I saw him reply in forum posts with dignity and respect, being active and he seemed to help players.

 

It didn't take long to realize server was under populated and facing some serious issues (class balancing, economy, luck of updates and fixes). I couldn't understand why and kept playing but things became worse almost in a monthly bases. After a while, the reasons became apparent. There were no updates nor fixes for the server. Some classes where heavily nerfed  and unplayable but every time someone dared to question this, his was flamed. Me and other people provided specific stats from tests (critical damage nerfs, robe healer users being undead) making the problems obvious but once again these voices were ignored or flamed. Specific updates being promised 1 year before i join are still not live (4 years later). The reasons for this are known and admin has shared these. Communicty and everyone that was still there, we were all just waited for Balls to come back.

 

Things became even worse. Even more people left the server, less than 100 active players stayed, economy has completely collapsed and you cannot find items any more in the market (weapons, armor, jewels,  other) but once again, everybody that asks for updates/fixes or questions what is going on gets burned.

 

The latest example here is my account (victor1gr) where after 3 years of playing there, after real donations i made to support the server, after beeing offered to promote the server for free and try bring more people in, I was permantly banned from the forum and game just for stating the obvious after my posts on this thread -> http://www.l2equanimity.com/forums/viewtopic.php?f=9&t=4213 .

there is one more post of mine on this thread that was deleted. I suspect this was the reason of the ban. luckily i have a backup (just as i'm keeping a backup of the whole thread in case Balls decide to delete this as well). See for youself, decide for yourself if this justifies a permanent ban. This is not to cry for the ban but mostly to warn people about Balls before someone decides to invest his time there. I consider my account lost for ever but i may save some time for someone else.

 

Quote

 

Well, you read the forums regularly so this shouldn't be news for you :) People have repeatedly reported all the problems of the economy but noone listens. And although things get ugglier every month, again noone listens. Have you even bother set up a script to monitor average market prices on certain items? If you have, this should be obvious. If you haven't, you can trust what the players report or check manually once a month. Economy and the fact that you cannot even find many of the items you need in the market is only a part of the problem. The other part is that not only there are no real updates but there is no roadmap as well. No plan at all. Not even an abstract one. This is the worse part. People don't mind waiting but giving them nothing to hope for is like forcing them politely to quit.  

I understand you see things differently but if you're so sure that you're right, why not put up a poll for the players to vote on what they think about the server and the way this server is managed during the last 2 years? And let's see how many players are left here to even vote on such poll.

And please scroll up. I made some suggestions on how players can help you save some time in managing/updating the server. I didn't see you commenting on these but instead, you choosed to pick up 1 random phraze that was only part of my thoughts. I see alot of constructive feedback in this thread. I hope you have something constructive to add as well.

thanks for listening.

 

 

After this post been deleted and me getting banned,  I sent at least 4 emails to Admin (Balls) asking him to let me know if banning me was intentional and the reason behind this. In contrast to times where i was making real money donations for the server (in which case i was getting an answer on the same day) this time i didn't even get an answer on none of my emails. My emails were super polite (i paste them all below and i will provide screenshots in case Balls dares to question those) so again, there is no reason to not even get  an answer. Nobody deserves this kind of behaviour.

My account may be lost but i want to make sure that people understand what kind of person this guy really is. Litteraly, he has zero respect for his players. You are warned.

below all the emails i sent him after the ban:


 

Quote

 

email 1 - 16/2/2018:

hello. i just got a message that i’m banned from the forum? did this happen by accident or on purpose? if it is the second can you please let me know of the reason behind it when you find some time?

thanks for your time

 

email 2 - 16/2/2018:
I just noticed that my game accounts are banned too. Can you let me know what is going on when you see this?
thanks in advance.


email 3 - 19/2/2018:
hello?


email 4 - 24/2/2018:
are you reading this?

 

 

Edited by alcwgr
Posted

For the record, there was only a lack of updates as of 1 year ago after my son was born (pretty good excuse btw), anyone can look at our update history to dismiss your false claims

 

Your ban was because you were spreading false information about the server, and saying i don't care about it, which i actually do. I spend time on the server every day to take care of customer service. So basically you are a cancer and see things in an alternate reality of what it really is and your arrogant non thought out posts are increadibly negative and are driving off new players by creating a false visage about the reality of things.

 

People like you who are distorting reality = time wasters for me, as you know, i don't have a lot of time. So it saves time to get rid of you, rather to try to negotiate with you any longer then i already have.

Posted (edited)
21 hours ago, L2Equanimity said:

For the record, there was only a lack of updates as of 1 year ago after my son was born (pretty good excuse btw), anyone can look at our update history to dismiss your false claims

 

Your ban was because you were spreading false information about the server, and saying i don't care about it, which i actually do. I spend time on the server every day to take care of customer service. So basically you are a cancer and see things in an alternate reality of what it really is and your arrogant non thought out posts are increadibly negative and are driving off new players by creating a false visage about the reality of things.

 

People like you who are distorting reality = time wasters for me, as you know, i don't have a lot of time. So it saves time to get rid of you, rather to try to negotiate with you any longer then i already have.

 

I'm quoting this just in case you edit your post later. People can read and judge for themselves who is arrogant here and what each one of us presents. No other comments from my side. Good luck with your server and your life in general. Believe it or not, I mean it.

Edited by victor1gr

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...