- 0
-
Posts
-
By l2gold2025 · Posted
🔥 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
-
By cardinalinoscripta · Posted
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
-
By Tinker123aa · Posted
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
Question
dr3am3r
Καλησπέρα παιδιά, έχω ένα θεματάκι, κατέβασα δοκιμαστικά το source του l2mythras και έκανα κανονικά το compile χωρίς προβλήματα και κάνω σύνδεση κανονικά αλλά από άλλον υπολογιστή στο ίδιο δίκτυο δεν μπορώ να συνδεθώ.
Μήπως έχω κάνει κάποιο λάθος στις ρυθμίσεις;
Αυτά είναι τα config που έχω
LoginserverConfigs
# =================================================
# Settings authorization server
# =================================================
# Host and port for client connections
LoginserverHostname = *
LoginserverPort = 2106
# Host and port for game servers
LoginHost = 127.0.0.1
LoginPort = 9014
# Accept new game server in a free slot
AcceptNewGameServer = True
# Database Settings
Driver = com.mysql.jdbc.Driver
URL = jdbc:mysql://localhost/l2mythras
Login = root
Password = root
MaximumDbConnections = 100
# How many seconds after the last activity will update database connection, default is 600 (10 minutes)
MaxIdleConnectionTimeout = 600
# Check interval of inactive connections, default is 60 (1 minute)
IdleConnectionTestPeriod = 60
# Automatically create accounts
AutoCreateAccounts = true
# Template for a login and password
AccountTemplate = [A-Za-z0-9]{4,14}
PasswordTemplate = [A-Za-z0-9]{4,16}
# Hash for passwords
# News hashing recommended whirlpool2
PasswordHash = whirlpool2
# Secondary check with an alternative encryption
# Use it if you already have accounts created with another encryption
LegacyPasswordHash = sha1
# Caching Keys
BlowFishKeys = 20
RSAKeyPairs = 10
# Highway IP
# The number of failed logins, to ban the IP
LoginTryBeforeBan = 250
# Allowable minimum time between authorization from one IP (in seconds)
LoginTryTimeout = 50
# Banlength IP, if exceeded the number of failed logins (seconds)
IpBanTime = 600
# Adequately logged a successful login to the database
LoginLog = false
# Ping Game Server
# The time between pings, in seconds, 0 - off
GameServerPingDelay = 30
# Maximum number of failed ping, above which, the connection to the game server is interrupted
GameServerPingRetry = 4
# Protection against Brutus. Unless the correct password, entering the server will appear as off.
FakeLogin = False
# Hide online number of players against hacking tools.
HideOnline = True
Gameserver Configs
# ===============================
# Network Configuration Server #
# ===============================
# IP which Bind Game server, * - all possible
GameserverHostname = *
GameserverPort = 7777
# This is transmitted to the clients connecting from an external network, so it has to be a public IP or resolvable hostname
ExternalHostname = 127.0.0.1
# This is transmitted to the client from the same network, so it has to be a local IP or resolvable host name
InternalHostname = 127.0.0.1
# AdvIpSystem Make more GameServerIDs. Every Ip should be Protected by a DDoS Guard.
# Your Server will have Success with this system Online.
AdvIPSystem = False
# Address \ port LS
LoginPort = 9014
LoginHost = 127.0.0.1
LoginUseCrypt = true
# How to request ID of LS
RequestServerID = 4
# Permission to take a different id, if requested busy
AcceptAlternateID = False
# ====================
# NEW VOTE SYSTEM #
VoteTopzoneApiKey = b5e197c45ef378d2291a94764060389d
VoteTopzoneServerId = 12754
# ====================
# ====================
# Database Settings #
# ====================
# Database connection GameServer
Driver = com.mysql.jdbc.Driver
GameURL = jdbc:mysql://localhost/l2mythras?UseUnicode=true&characterEncoding=UTF-8
GameUser = root
GamePassword = root
# Database connection LoginServer
LoginURL = jdbc:mysql://localhost/l2mythras?UseUnicode=true&characterEncoding=UTF-8
LoginUser = root
LoginPassword = root
# Maximum number of connections to the database
MaximumDbConnections = 7000
# How many seconds after the last activity will update database connection, default is 600 (10 minutes)
# This parameter is important to coordinate with the settings in the MySql server option interactive_timeout (default 28800 (8:00))
MaxIdleConnectionTimeout = 600
# Check interval of inactive connections, default is 60 (1 minute)
# Assuming a stable connection to the database and correct SETUP MaxIdleConnectionTimeout, you can put 1 (not verified)
IdleConnectionTestPeriod = 60
# Auto-save state characters
Autosave = true
# =========================
# Settings name patterns #
# =========================
CnameTemplate = ([0-9A-Za-z]{2,16})|([0-9\u0410-\u044f-\u4e00-\u9fa5]{2,16})
# Clan name
ClanNameTemplate = ([0-9A-Za-z]{3,16})|([0-9\u0410]{3,16})
# Clan title
ClanTitleTemplate = ([0-9A-Za-z \\p{Punct}]{1,16})|([0-9\u0410 \\p{Punct}]{1,16})
# Alliance name
AllyNameTemplate = ([0-9A-Za-z]{3,16})|([0-9\u0410]{3,16})
# ========================
# Vote Reward System
# ========================
EnableVoteReward = True
# Vote Address
# Example: http://website.com/StringTake.php?IP=
VoteAddress = http://l2sample/stringtake.php?IP=
# ========================
# Display Options Serer #
# ========================
# NORMAL; RELAX; TEST; NO_LABEL; RESTRICTED; EVENT; FREE
ServerType = NORMAL
# Limit on age
ServerAgeLimit = 0
# Server only for game masters
ServerGMOnly = false
# [] Appears before the name server
ServerBrackets = false
# Its pvp server?
PvPServer = false
# =========================
# Configuration Protocol #
# =========================
# Minimum and maximum client protocols to access the server
# High Five: Part 4 = 267
MinProtocolRevision = 1
MaxProtocolRevision = 999
# ===================================
# Service to link your IP and Hwid #
# ===================================
# Allow players to bind to IP Account
# Bind use the command .lock
AllowLockIP = false
# Allow players to bind to account HWid
# Works only in the case when there is a LameGuard/fGuard
# Bind use the command .lock
AllowLockHwid = true
# Bit mask to link your HWid
# 2 - HDD
# 4 - BIOS
# 8 - CPU
# Example: HWIDBan = 10 (reference to HWID will be deemed only HDD and CPU)
# Example: HWIDBan = 14 (reference to HWID will be deemed to HDD, CPU and BIOS)
HwidLockMask = 10
# ======================
# Settings pool sizes #
# ======================
# Size of the thread pool to execute scheduled tasks, recommended setting: CPU x 4
ScheduledThreadPoolSize = 16
# Size of the thread pool, for the immediate implementation of the tasks recommended value: CPU x 2
ExecutorThreadPoolSize = 8
# Statistics collection launches, create and run-time problems. Reset the file to the server zavresheniyu or on command telnet.
EnableRunnableStats = false
# =======================
# Settings Interchange #
# =======================
# Downtime mainstream treatment of compounds, the read / write
SelectorSleepTime = 3
# Delay before installation of the Desirable
InterestDelay = 30
# The maximum number of packets to be sent in a single pass
MaxSendPerPass = 32
# Buffer size for reading
ReadBufferSize = 65536
# Size of the buffer to write
WriteBufferSize = 131072
# Pool size for the temporary buffer read / write
BufferPoolSize = 64
# The number of managers to work with the effects of
EffectTaskManagers = 1
# ====================
# Language Settings #
# ====================
# The following values can be changed by users of the game team. Lang, the default value
# Language dialogue default options ru, en
DefaultLang = en
# Timer to remove chars, 0 removed immediately
DeleteCharAfterDays = 3
# Directory data pack
DatapackRoot =.
# ============================
# Setup the server restarts #
# ============================
# Daily Auto-Restart on schedule. The restart format chronology.
# * * * * * command to be executed
# ? ? ? ? ?
# ? ? ? ? ?
# ? ? ? ? ?
# ? ? ? ? ?????? day of week (0 - 6) (0 or 6 are Sunday to Saturday, or use names)
# ? ? ? ??????????? month (1 - 12)
# ? ? ???????????????? day of month (1 - 31)
# ? ????????????????????? hour (0 - 23)
# ?????????????????????????? min (0 - 59)
# If the field is empty, the daily Auto-Restart is disabled by default, 5:00
# Every day at hour 05:00 = AutoRestartAt = 0 5 * * *
# Every day at hour 23:00 = AutoRestartAt = 0 23 * * *
# Every Monday at hour 05:00 = AutoRestartAt = 0 5 * * 1
AutoRestartAt =
# ========================
# Settings game-masters #
# ========================
# Hide the status of game masters in /gmlist and Community Board
HideGMStatus = False
# Announce entrance of game masters in the game if he is not in invis
ShowGMLogin = False
# Save game-effects wizards silence, gmspeed, invul etc.
SaveGMEffects = True
# ===================================
# Region setting of the game world #
# ===================================
# The whole world is divided into regions, the size of the region is the size of the client card, namely 32768x32768, Z range from -32768 to 32767, identification card in the client is given XX_YY.
# To make working with objects on the server, the world is divided into regions, both horizontally and vertically. The size of the region and its closest neighbors is equal to the scope of the player.
# When you set up to remember: the smaller the size of the region, the less strain on the CPU, the less scope player, the less outgoing traffic, but the more memory consumption
# This parameter determines the size of the region, horizontal: 1 << n, with a value of n = 15 - complies with the customer's card size, a value of 12 size is 4096, 11 - 2048
HShift = 11
# This parameter defines the height of the region to the vertical, with a value of 10 - height is 1024
VShift = 11
# Limit the height coordinates for the world, because The world does not use the full range of -32768 to 32767, it can be reduced to -16 384 .. 16383, thus saving memory
MapMinZ = -32768
MapMaxZ = 32767
# Size of the sector areas. Default - 32.
LinearTerritoryCellSize = 32
# ==================
# Settings geodata #
# ==================
# Takes damage from falling
DamageFromFalling = false
# Host to connect to the L2J-GeoEditor
GeoEditorHost = 127.0.0.1
# =========================
# Settings cursed weapon #
# =========================
# Are they (the default true)
AllowCursedWeapons = True
# Drops to the ground at gun disconnects \ kicked from the server
DropCursedWeaponsOnKick = True
# Maximum number of reflective
MaxReflectionsCount = 300
# Check GameServer ping, response time in seconds
PingServer = True
WaitPingTime = 5
# Call frequency task bypass, in seconds
PurgeTaskFrequency = 60
# Delay replay movement and attack
MovePacketDelay = 100
AttackPacketDelay = 500
# The packets below are heavy and sent way too often to the client.
# Character info for example is sent from each player to the client at every X milliseconds (you set them here).
# If you are on a siege with 100 players around you and you've set the BroadcastCharInfoInterval = 100
# This means that you get 100 heavy packets in 100 milliseconds, which is a lot for a client, like a mini-ddos.
# If players experience graphical lags during sieges or other places where many players roam around, its suggested
# to rise up the intervals so players don't get so flooded with packets that slow-down the client.
# Suggested values: 100ms - 1000ms. Above 1000ms should start to show noticeable rather negative effects on game play.
# Interval packet is sent UserInfo
UserInfoInterval = 100
# Enable sending stats
BroadcastStatsInterval = true
# Interval sending CharInfo
BroadcastCharInfoInterval = 100
# Maximum number of players on the server
MaximumOnlineUsers = 3500
# Auto-delete things lying on the ground, time in seconds, 0 - do not delete; 600 (10 minutes)
AutoDestroyDroppedItemAfter = 6000
# Separate setting for the ejected player or fallen from a PC, the default is 1200 (20 minutes)
AutoDestroyPlayerDroppedItemAfter = 1200
# Include warehouse
AllowWarehouse = True
# Include mail
AllowMail = True
# Time of things to try on the map
WearDelay = 10
# Can players throw things on the ground
AllowDiscardItem = True
# Don't allow players to drop items in town (pace zone)
AllowDiscardItemInTown = False
# Is the water (if the GEODATA necessarily include)
AllowWater = True
# If true, all players have administrator rights (convenient for the test server)
# Template with the privileges are in a file GMAccess.xml, for PlayerID set = "0"
EverybodyHasAdminRights = True
# Permission for all special teams players ( example ///fly)
AllowSpecialCommands = False
# Should we allow entering instances?
AllowEnterInstance = True
# Should we allow Stores?
AllowStores = True
# Allow talk with NPCS
AllowTalkToNpcs = True
# Allow only MoveBackwardToLocation packet?
AllowJustMoving = False
# Allow Tutorial on EnterWorld?
AllowTutorial = True
# Allow HWID Engine
AllowHWIDEngine = True
# Allow logging Skills Statistics
AllowSkillStatsLogger = False
# Allow Items Logging
AllowItemsLogging = False
# Allow Spawn Protection
AllowSpawnProtection = True
# -------------------------------------------------------------
# 2 - all conversations are cached at server
# 1 - The dialogues are cached as treatment
# 0 - cache disabled (for testing)
HtmCacheMode = 0
# The path to generate a static external web server (with / at the end)
# The way to generate a static external web server (with / at the end)
WebServerRoot =./webserver/
# Generation period, 0 - disable
# The period of generation, 0 - off
WebServerDelay = 0
# Setting Angel NevitSystem
AltVitalityNevitUpPoint = 100
AltVitalityNevitPoint = 100
AllowAddonsConfig = True
# ===========================
# LOG Services #
# ===========================
Services = True
# ==================================================================
# Settings to set a password on your character SA (Secondary Auth) #
# Pre-include this option in the client (UseSecondaryAuth = true) #
# ==================================================================
# Include whether the system SA
SAEnabled = False
# Ban account after a user has exceeded the number of password attempts?
SABanAccEnabled = true
# Enhanced password system, combined with the odd even sure!
SAStrongPass = false
# Maximum number of password attempts
SAMaxAttemps = 5
# Ban length Character for failure password (in minutes)
SABanTime = 480
# Link to the password recovery page
SARecoveryLink = http://website.com/charPassRec.php
# ===========================
# Email #
# ===========================
# https://accounts.google.com/displayunlockcaptcha
MailUser = l2sample@gmail.com
MailPass = samplepass
Subject = Donation to L2Mythras Report
# DONT FORGET TO ADD %PIN% where you want your TransactionID PIN to be displayed in the message!
Message = Thank you for your donation! You can receive your donation reward automatically in game. All you have to do is to login and then type .donate and your paypal email adress.Ex: .donate jhonsmith@xyz.com. Thank you for your support! Best regards,L2Mythras Team!
Ευχαριστώ.
10 answers to this question
Recommended Posts
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.