Jump to content

Recommended Posts

Posted

so i will ask a simply question...i have seen ur server many years ago,and i never tried cuz i was saying that is old and is gonna be unbalance,but nowdays i really think to give a try...So here is the question:What are the benefits for newcomers?Old ppl are maxed out even passive skills+30 i guess...With every augment they need and all they do is pvp!?

So if i want to pvp i must get to that point...or close enough...This will take me too much time and i will be bored cuz i cant do anything else except farming!

What are the benefits for newcomers?
 

Posted

so i will ask a simply question...i have seen ur server many years ago,and i never tried cuz i was saying that is old and is gonna be unbalance,but nowdays i really think to give a try...So here is the question:What are the benefits for newcomers?Old ppl are maxed out even passive skills+30 i guess...With every augment they need and all they do is pvp!?

So if i want to pvp i must get to that point...or close enough...This will take me too much time and i will be bored cuz i cant do anything else except farming!

What are the benefits for newcomers?

 

 

Hello, and thank you for posting :)

 

 

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.

 

TLDR: Free gear, extra enchant rates for new players, tons of extra rewards, extra prizes from everyday activities, Events Designed for new players, Excellent GM Support/advice on building your character. PvP/PK Protection/Safe Zones. Also the ongoing improvements to the new player bonuses.

 

Hope this helps!

Posted (edited)

I like the potential of this server but I like it even more since it has never been wiped into my eyes it's gz mate just for that reason. It tells me a lot  :) serious players should give it a try !

Edited by Godrics
Posted

I like the potential of this server but I like it even more since it has never been wiped into my eyes it's gz mate just for that reason. It tells me a lot  :) serious players should give it a try !

 

Thank you very much for your post and the kind words :)

 

Also, yes, we strongly encourage people to try it and see first hand what we have done, and see the difference in quality in our server has to offer vs others. It is apparent right away!

  • 1 month later...
Posted

Server is really nice but suddenly it lucks activity. It runs with like ~50 people activity. I would say that a wipe could save it. People do not bother start at all when they see that its running for years. I've believed the same, i've logged for a while tho and checked it out.

Posted

Server is really nice but suddenly it lucks activity. It runs with like ~50 people activity. I would say that a wipe could save it. People do not bother start at all when they see that its running for years. I've believed the same, i've logged for a while tho and checked it out.

 

 

Hello, and thanks for posting :)

 

We certainly don't have such a low population of ~50 people. You would only see such a thing right after a server restart, or in the dead of night (and probably not even then).

 

So, i encourage you to log in again and check it out some more.

 

Also, as previously stated, wipes are for server admins that take advantage of their users and are wanting to money. Also the general player base has been brainwashed into thinking wipes are good. Wipes are good for servers who are not properly designed for the long term and lack sophistication.

 

Our server has been running for over 7 years now, with no wipes, and each sequential year we have become more and more successful. Thus proving, we don't need a wipe :)

 

I encourage you to stop supporting servers that wipe.

Posted (edited)

Hello, and thanks for posting :)

 

We certainly don't have such a low population of ~50 people. You would only see such a thing right after a server restart, or in the dead of night (and probably not even then).

 

So, i encourage you to log in again and check it out some more.

 

Also, as previously stated, wipes are for server admins that take advantage of their users and are wanting to money. Also the general player base has been brainwashed into thinking wipes are good. Wipes are good for servers who are not properly designed for the long term and lack sophistication.

 

Our server has been running for over 7 years now, with no wipes, and each sequential year we have become more and more successful. Thus proving, we don't need a wipe :)

 

I encourage you to stop supporting servers that wipe.

I do not support servers that wipe but as you said your server running for over 7 years. A fresh start prolly would make it better, at the moment everything is kinda overpriced because old players got tons of bills so a new player need like two months or more to get full gear +20 and even by that they need luck to get party on Hard Zone to farm fast enough else it's kinda pointless. I've played on your server for few days, surely it's one of the best servers i've played for long but as i said new comers cant do shit at the moment. The issues i've met was that i've found some archers w/ +20 gear botting on farm areas so i couldnt catch a single monster w/o being ksed from them and i had to chance to get drops just because i've needed like 20+ nukes to kill a monster with +14 S80 weapon and archers 3 shotted them.You surely help new comers with gears and so on and if they are lucky enough with votes (getting rewards like BEWS that it's worth 1b helping lot) but still... As i said already your server is really good and i cant say something bad about it but it lucks fresh blood on it. You see everywhere top geared people so it lucks farm and even so it lucks pvps aswell.

Edited by xVindicate
Posted

I do not support servers that wipe but as you said your server running for over 7 years. A fresh start prolly would make it better, at the moment everything is kinda overpriced because old players got tons of bills so a new player need like two months or more to get full gear +20 and even by that they need luck to get party on Hard Zone to farm fast enough else it's kinda pointless. I've played on your server for few days, surely it's one of the best servers i've played for long but as i said new comers cant do shit at the moment. The issues i've met was that i've found some archers w/ +20 gear botting on farm areas so i couldnt catch a single monster w/o being ksed from them and i had to chance to get drops just because i've needed like 20+ nukes to kill a monster with +14 S80 weapon and archers 3 shotted them.You surely help new comers with gears and so on and if they are lucky enough with votes (getting rewards like BEWS that it's worth 1b helping lot) but still... As i said already your server is really good and i cant say something bad about it but it lucks fresh blood on it. You see everywhere top geared people so it lucks farm and even so it lucks pvps aswell.

 

 

Thanks again for posting :)

 

Actually our server has plenty of fresh new blood, We have a very sophisticated new player tracking system, we track every new player that joins our server by IP/HWID to help verify its not a old players new character. We track these numbers and also welcome these new players if possible. We have a healthy stream of new players each and every day.

 

Also, as you may already know, we have tons of new player bonuses it helps new players catch up, and get good gear faster. Stuff that old players are not entitled too. Also we have thing. Its explained here:

 

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

 

 

 

About bots, yes bots pop up time to time, but we actively fight them, in fact, you get 5 GCM per bot report that we can confirm is a bot thats over 15b in rewards for a minute of your time. Also our GMs are payed for catching bots, so everyone has huge incentives for catching them. So just report them, and they will go away forever. Bots are permanently banned. However, we perform daily bot sweeps, so its unlikely its as bad as you are claiming.

 

Again, we thank you for your opinion/concern, but there will be no new fresh start. We continue to become more and more successful, we have proven we don't need a fresh start. A fresh start will betray our players and upset them, and make them lose our trust. We will not do that. With our server, you have the luxury of being able to quit for 6+ months if not more and come back and your stuff still be there. Not many other servers you can do that with.

  • 2 weeks later...
Posted

Yesterday i joined ur server....played a lil bit found a lvl 11 clan at lvl 50 (a really good guy leader :D) and xp until 79...today morning xp until 82+.So i guess i have played like 3hours or something.

Till now ur servers seems really well made,and this is make sense cuz i guess u improve it for many many years...

helping newbies systes is really good!my olny prob is that when for example was hitting 80 or 82 lvl (cant remember) i tried read the newbie guide which pop and suddenly popped a new message for events...and lost most of the lvling message...i know u can disable some messages but for the begging i want to read them all of them...even for champions mobs...U might can make them pop in  a different dialog box!
I am also a lil bit confused with items...elegia is the best armor?cuz i see some stones for armors (dark eternal if i remember correct) also how u get tattoos?

Posted

Yesterday i joined ur server....played a lil bit found a lvl 11 clan at lvl 50 (a really good guy leader :D) and xp until 79...today morning xp until 82+.So i guess i have played like 3hours or something.

Till now ur servers seems really well made,and this is make sense cuz i guess u improve it for many many years...

helping newbies systes is really good!my olny prob is that when for example was hitting 80 or 82 lvl (cant remember) i tried read the newbie guide which pop and suddenly popped a new message for events...and lost most of the lvling message...i know u can disable some messages but for the begging i want to read them all of them...even for champions mobs...U might can make them pop in  a different dialog box!

I am also a lil bit confused with items...elegia is the best armor?cuz i see some stones for armors (dark eternal if i remember correct) also how u get tattoos?

 

 

Hello, and thanks for posting :)

 

Really glad you found a clan! Thats great, if something don't work out with them, there is a list of clans that recruit new players in the .newbie command.

 

Sorry you get doubled up on in game information pop ups. If you get a pop up that you don't like/is annoying you can click "don't show me this again". We will try to make them separate as suggested.

 

Elegia and Vorpal are the best armor sets on our server, however it depends on your set up/build/preference on which to choose. For example for a tank, if you want a more defensive set up you would go with vorpal heavy, but if you wanted a more offensive set up, you would go with Elegia. As you probably seen, you get a Vorpal or Elegia set for free, so you have instant access to the top stuff, it just depends on what you want. If you need some advice on which to get for you, feel free to tell me your class and if you are trying to be offensive, or defensive, or mixed, or what.

 

About Dark Eternal etc, these are just cosmetics (with .dressme) those poeple are still using Elegia/Vorpal and have stats of Elegia/Vorpal, they just changed their skin. As you may have noticed all new players start out with a free/temporary 30 day skin so they can test out this feature. Most skins are unlocked already, but the R grade ones you have to get the stones/tokens for, you can get them through dimensional portals. These portals happen at random through activities such as farming, pvp, events, fishing, fort seiges. Each portal has a 25% chance for a stone/token, and each different activity gives different ones, for example Eternal is from farming, Twilight is from Fishing, Guard Armor is from Fort Sieges, and Dark/Bloody Eternal one is from events, ones from PvP, there is also a way get different one from spoiling, and a skin from achievements. There is also skins/tokens for weapons as well.

 

In regards to tattoos, all new players such as yourself gets one for free (its a random one). Its not even temporary, its permanent, and these are not some lower power ones, these are the top ones already. So if you have not already opened it in your inventory, you have a "secret stash for tattoos" since you started your character, to get your first one for free, you can only equip one at a time, so that first free one might be all you want/need.

 

However, you can use the .tattoo  command to see all 27 tattoos, and their stats. If you plan on getting extra ones other then the one you got for free. You get them from leveling up soul crystals on our custom farmzones and from custom/epic raids and trade in that soul crystal to the merchant of mammon. You can type the command .soulcrystal which tells you each and every mob % for leveling the crystal and each and ever soul crystal level.

 

If you have any other questions, please let me know, i would be happy to help!

Posted

oh great infos!

yep i got a tattoo for Cp...3% max CP if i remember correct!

Too many commands :DD 

btw i sold beab for 300kk each...is this a good price or they trick me? :D 

Posted

hello again :)

 

That price for beab is not bad, but i can find a buy shop in giran right now for 400kk so you probably could have got a little more. Just make sure to check giran next time and you can use the command /findprivatestore beab   (retail command) to find shops that include that title

 

 

In regards to commands, the main one you need to know is .command it will list all our custom commands and even retail ones, that way you can always reference that list if you need help :)  but yes we have a bunch of them!

  • 1 month later...
Posted

I freaking like how much time and effort L2Equanimity puts into his replies and overall community management. This speaks a lot about the quality of the server itself. High rate is not down my alley anymore but I also like the fact that this server is always mentioned somewhere.

 

Sadly most players won't be able to wrap their heads around the fact that a private L2 server could be running for years without wipe. I wonder why would they expect wipes if that's not an industry standard for any mmo, why private servers would have to embrace wipe culture?

 

Stay the course and keep up that good work your doing!

 

Cheers

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