Jump to content

[RS.com - Share] AION English Client - Full Installer [ver. 1.5.0.3]


Recommended Posts

Posted

############

 

Aion: The Tower of Eternity

 

AionBox.jpg

 

Aion: The Tower of Eternity (Korean: 아이온: 영원의 탑) is a massively multiplayer online role-playing game (MMORPG) released in Korea and China with localized versions in development for other regions of the world. The game developer is NCsoft's Aion Team Development Dept, a major Korean game developer. Aion combines PvP and PvE in a fantasy game environment. A unique feature of the game is flight, both as a means of transportation and aerial combat. Other games in this genre typically offer flight only as a means of travel, while combat is reserved for the ground.

 

History

 

Development

 

Following the announcement of the game in May 2006 with a preview at E3 2006., NCsoft developed it over the following year at their software design studio in South Korea. Closed beta testing in Korea began in late 2007 , followed by an open beta test in November 2008. A version of the game localized for China began its closed beta testing in December 2008, and began open beta testing on April 8, 2009, ending on April 18, 2009.

 

The game is also being localized for western markets including North America, Europe, and Australia. NCSoft has held two open beta testing event weekends in June, 2009 open to players in North America and Europe. Each had a limited focus. The first, held June 5-7th, 2009, focused on the Elyos from level 1 through 20. The second initially had a focus of level 1 to 10 for the Asmodians, but at the last minute it was decided to allow it to be open to level 10 for both factions. There are plans for four more open beta events on weekends spanning through July and August, 2009.

 

Release

 

Release in South Korea

 

Aion was released in South Korea on November 28, 2008. Given the success of NCSoft's previous games, Lineage and Lineage II, Aion had been a highly anticipated game in South Korea ever since its announcement. At the end of 2008 Aion won the award "Best Korean Game of the Year" for its "epic scale, immersive story, and stunning graphics and sound design" .

 

Release in China

 

The game was released in China on April 16, 2009.

 

North American & European Release

 

NCsoft has confirmed a North American release date of September 22, 2009 and a European release date of September 25, 2009.

 

Australian release

 

NCSoft will distribute AION in Australia through QVSoftware in Spring (southern hemisphere) 2009 , and will be released on September 22, 2009.

 

Taiwan release

 

NcSoft will begin Closed Beta of AION in Taiwan on June 8 2009 with several ways of getting hold of the CB accounts via events and magazines.

 

Story

 

In the beginning there was a god named Aion who ruled over a world called Atreia. This god created a race of intelligent entities to act as his servants (in likeness to angels) whom he called the Balaur. After some time passed the Balaur disobeyed Aion's wishes and rebelled against their creator. The god Aion then created the 12 Empyrean Lords. The Empyrean Lords in turn created a barrier which prevented the Balaur from attacking the humans charged under their protection. Within this barrier all things were safe. The Balaur ravaged and destroyed many of the living things residing outside of the barrier.

 

Some humans, living within the safety of the barrier, learned how to harness some of the same energy as the Empyrean Lords, known as aether. Such humans were called Daeva and, like the Empyrean Lords, had wings. With time, enough Daevas were born to form an army. Ten of the Empyrean Lords led these Daevas into battle against the Balaur, while the remaining two were the guardians of the Tower of Eternity, the embodiment of the god Aion. The war with the Balaur lasted for hundreds of years until one of the guardians of the tower announced that they should find a way to make peace with the Balaur. Five of the Empyrean Lords vehemently disagreed. However, the second guardian of the tower was swayed to peace. The Balaur were invited into the tower for peace talks. It is unclear what happened at that point. One of the Balaur lords lay wounded on the floor and the rest proceeded to attack the tower. The two Guardians attempted to raise the shield by going to opposite ends of the tower. However, they were unsuccessful and the tower, along with the world, shattered in two. As their final act, the two guardians sacrificed their lives in order to protect a part of Atreia. With Atreia severed, the survivors banded together to face their new world. Of the original twelve, ten of the Empyrean Lords survived. Five who had opposed peace and claimed that the weakness of the rest of the lords had allowed the Balaur to attack them reigned over the dark part of the world, becoming known as the Shedim Lords. The other five reigned over the light-covered bottom part of Atreia and claim that it was the Shedim Lord's actions that caused the breaking of the tower. They are known as the Seraphim Lords.

 

The new shape of the world also reshaped its inhabitants. Those that lived in the light part of the world saw little change except for an increase in their beauty. These followers of the Seraphim Lords called themselves Elyos and created the city of Sanctum. The inhabitants of the upper part of the world saw many changes. Having to walk on ground strewn with fragments of the tower, their feet became talons. Having to fight against beasts, their hands became claw-like. Furthermore, the darkness made their complexion change and their eyes grew red adapting to the absence of light. They call themselves Asmodians and live in the city of Pandemonium under the rule of the Shedim Lords.

 

Classes

 

There are four primary classes, and eight specialized classes in the game. Players start the game by choosing one of the four primary classes: Warrior, Mage, Scout, or Priest. After attaining level 10, the players are given the choice to choose from the two specialized classes associated with that base class. This allows players to get a feel for the playstyle of the class before making a major decision as to which class to play for the rest of the game.

 

Each faction will have a slight variation in class skills once they reach the first promotion at level 10. Higher-level players can tailor their character further, with each profession offering two advanced classes, bringing the total number of character types available up to eight.

 

Mage

 

Mages have weak physical combat ability but they can launch devastatingly powerful magic attacks. There are two specializations possible for mages: Spiritmasters and Sorcerers.

 

Sorcerer

 

The sorcerer follows the path of magic, mastering the elements of water, fire, wind, and earth. A sorcerer's skill set becomes very diverse as their combat ability evolves.

 

   * Special ability: Long range damage spells

   * Play style: Magical ranged damage dealer

 

Spiritmaster

 

Spiritmasters are the only summoning class in the game. They can control water, fire, earth, and air spirits.

 

   * Special ability: Summoning powerful elemental spirits

   * Play style: A pet class with ranged DPS power

 

The challenge for the Spiritmaster comes from recognizing which element to call on at a given time. Earth spirits hold strong defensive abilities, Fire spirits excel in close range attacks, Water spirits concentrate on healing powers and ranged DPS, and Wind spirits are proficient at speed as well as melee and magic attacks.

 

Priest

 

Spiritual warriors, priests can use healing and self-protection spells to excel in melee combat, and launch powerful ranged magic attacks too. This makes them not only useful support characters in a party of adventurers, but also powerful combatants in their own right. There are two priest specializations: Clerics and Chanters.

 

Chanter

 

The Chanter is primarily a buff provider, but also has access to healing and damage spells as well.

 

   * Special ability: Fortification magic using healing and mantras

   * Play style: Healing, buffing. In an emergency a chanter can fight in close range combat using a magic staff or, similar to the cleric, mace and shield combination.

 

Cleric

 

Healer class. Able to raise the dead.

 

   * Special ability: Healing and protection

   * Play style: Able to use a mace and shield and 2 handed staffs.

 

Scout

 

The scout combines great agility with swift attacks. Scouts can specialize into one of two sub-classes: Ranger or Assassin.

 

Assassin

 

Assassins are experts in deft movement and the silent termination of their target.

 

   * Special ability: Striking without detection

   * Play style: Stealth DPS

 

Ranger

 

   * Special ability: Range diversity of attack

   * Play style: Ranged DPS with traps

 

Warrior

 

Warriors excel in close-quarter combat. Strong performers in a wide range of situations, Warriors are relatively easy to master. Warriors can specialize into one of two sub-classes: gladiators, who concentrate on dealing damage (DPS), or templars, who combine fierce fighting with defensive chants and techniques (tanks).

 

Gladiator

 

Gladiators can use many types of weapons, ranging from swords to halberds.

 

   * Special ability: Close combat

   * Play style: Close combat DPS along with good AoE capability.

 

Templar

 

Fighting with a sword in one hand and a shield in the other, the Templar is both guardian and fierce combatant. To remain effective, the Templar should stay on or close to the front firing line.

 

   * Special ability: Protection chants

   * Play style: Tanking

 

Features

 

Graphics

 

   * The game uses a heavily modified version of the CryEngine (originally developed by Crytek, now owned by Ubisoft).

   * Aion won GameAmp's 2006 E3 MMORPG "Best Graphics" Award.

 

Character customization

 

The character creation system allows for a great deal of character customization. Players will be able to radically adjust height / weight & scale the size of body parts. Different hair styles, skin colors, facial textures and voices can also be chosen. Further detailing can be found in the selection of eye colors and tattoos for the character's face and body.

 

The game will also allow a player to reuse the graphic of a weapon or an armor that they like and craft it with the statistics of a different item. This adds another layer of customization and strategy and allow players to control the look of their avatar without sacrificing the better stats of an item that they find visually unappealing.[10] With this system you can also alter the colors of your armor to make your avatar more visually distinctive.

 

Music

 

Most of the music was created by Ryo Kunihiko. A sample of the soundtrack is available on the official European and Chinese sites.

 

Skill chains

 

As a character progresses in the game, they will learn additional skills, some of which form part of a Skill Chain. A skill chain is a group of skills that as each skill is used, unlocks the next skill in the chain. Generally the skills at the end of the chain are much more powerful.

 

PvPvE system

 

The end game of Aion will revolve around battles within the Abyss (PvP zone). Within the Abyss are castles which can be controlled by individual Legions (Aion equivalent of a guild). Battle for control of these castles involves combat against players of the opposing faction and computer controlled NPCs at the same time, using siege weapons obtained from end game PvE raid content. Legions in control of a castle are entitled to funding from taxes and players within the faction get specials from NPCs. The game currently does not allow factions to fight against those of their own race, except for casual duels.

 

The participation in PvP is rewarded with PvP "Points" (called Abyss Points in the game). The game ranks players as battles are won against fellow players. At higher ranks the character's wings will change in appearance to show the character's elevated status. Also certain items can be purchased with these points such as high-end armor and weapons.

 

Raids

 

Raids will consist of up to 4 groups with up to 6 players per group for a maximum of 24 players in a single raid.

 

Professions

 

There are 6 Production professions and 2 Extracting (gathering) professions.

 

Collection professions gather raw materials and ingredients from resources found while exploring the world.

 

Crafting professions create useful items from raw materials. The current crafting professions are:

 

   * Weaponsmithing

   * Armorsmithing

   * Sewing

   * Handiwork

   * Alchemy

   * Cooking

 

Items from crafting skills can help in combat and some are essential for capturing castles in the Abyss.

 

Cost to Play

 

South Korean gamers pay for time cards that allow them to play the game to the extent of time they purchased. NA/EU NCSoft will be charging US$14.99 per month when the game is released.

 

######################

Source : Wikipedia

######################

 

 

 

 

################################################################

Download Links : (My Personal Source - Full Installer - English Language - NON Edited - Clean 100% - Rapidshare Links 200mb each)

################################################################

RS.png

http://rapidshare.com/files/279450639/AionFullInstaller_EkoIce.part01.rar

http://rapidshare.com/files/279456753/AionFullInstaller_EkoIce.part02.rar

http://rapidshare.com/files/279463882/AionFullInstaller_EkoIce.part03.rar

http://rapidshare.com/files/279472138/AionFullInstaller_EkoIce.part04.rar

http://rapidshare.com/files/279576817/AionFullInstaller_EkoIce.part05.rar

http://rapidshare.com/files/279718028/AionFullInstaller_EkoIce.part06.rar

http://rapidshare.com/files/279743309/AionFullInstaller_EkoIce.part07.rar

http://rapidshare.com/files/279745581/AionFullInstaller_EkoIce.part08.rar

http://rapidshare.com/files/279904624/AionFullInstaller_EkoIce.part09.rar

http://rapidshare.com/files/279338781/AionFullInstaller_EkoIce.part10.rar

http://rapidshare.com/files/279260736/AionFullInstaller_EkoIce.part11.rar

http://rapidshare.com/files/279260833/AionFullInstaller_EkoIce.part12.rar

http://rapidshare.com/files/279260815/AionFullInstaller_EkoIce.part13.rar

http://rapidshare.com/files/279260795/AionFullInstaller_EkoIce.part14.rar

http://rapidshare.com/files/279260873/AionFullInstaller_EkoIce.part15.rar

http://rapidshare.com/files/279341092/AionFullInstaller_EkoIce.part16.rar

http://rapidshare.com/files/279355298/AionFullInstaller_EkoIce.part17.rar

http://rapidshare.com/files/279359776/AionFullInstaller_EkoIce.part18.rar

http://rapidshare.com/files/279360402/AionFullInstaller_EkoIce.part19.rar

http://rapidshare.com/files/278921102/AionFullInstaller_EkoIce.part20.rar

http://rapidshare.com/files/278934103/AionFullInstaller_EkoIce.part21.rar

http://rapidshare.com/files/279006001/AionFullInstaller_EkoIce.part22.rar

http://rapidshare.com/files/279008426/AionFullInstaller_EkoIce.part23.rar

http://rapidshare.com/files/278895391/AionFullInstaller_EkoIce.part24.rar

http://rapidshare.com/files/278895555/AionFullInstaller_EkoIce.part25.rar

http://rapidshare.com/files/278895367/AionFullInstaller_EkoIce.part26.rar

http://rapidshare.com/files/278075708/AionFullInstaller_EkoIce.part27.rar

http://rapidshare.com/files/278081916/AionFullInstaller_EkoIce.part28.rar

http://rapidshare.com/files/278082404/AionFullInstaller_EkoIce.part29.rar

http://rapidshare.com/files/278100742/AionFullInstaller_EkoIce.part30.rar

http://rapidshare.com/files/278107759/AionFullInstaller_EkoIce.part31.rar

http://rapidshare.com/files/278211542/AionFullInstaller_EkoIce.part32.rar

http://rapidshare.com/files/278220329/AionFullInstaller_EkoIce.part33.rar

http://rapidshare.com/files/278225214/AionFullInstaller_EkoIce.part34.rar

http://rapidshare.com/files/278226070/AionFullInstaller_EkoIce.part35.rar

http://rapidshare.com/files/278260824/AionFullInstaller_EkoIce.part36.rar

http://rapidshare.com/files/278419420/AionFullInstaller_EkoIce.part37.rar

http://rapidshare.com/files/278449418/AionFullInstaller_EkoIce.part38.rar

http://rapidshare.com/files/278446220/AionFullInstaller_EkoIce.part39.rar

http://rapidshare.com/files/278454353/AionFullInstaller_EkoIce.part40.rar

http://rapidshare.com/files/278484972/AionFullInstaller_EkoIce.part41.rar

http://rapidshare.com/files/278535596/AionFullInstaller_EkoIce.part42.rar

http://rapidshare.com/files/278535795/AionFullInstaller_EkoIce.part43.rar

http://rapidshare.com/files/278535657/AionFullInstaller_EkoIce.part44.rar

http://rapidshare.com/files/278535692/AionFullInstaller_EkoIce.part45.rar

http://rapidshare.com/files/278304924/AionFullInstaller_EkoIce.part46.rar

http://rapidshare.com/files/278304932/AionFullInstaller_EkoIce.part47.rar

http://rapidshare.com/files/278305079/AionFullInstaller_EkoIce.part48.rar

http://rapidshare.com/files/278304996/AionFullInstaller_EkoIce.part49.rar

 

Password : ekoice

 

Leave a comment if you Liked my Post :)

 

For those of you with Windows 7 and Game Guard is not working, I found a way to make it work. Just follow these directions.

http://rapidshare.com/files/279916533/Win7-GG-Fix.rar

 

Took 4 days to Upload for me, will take 30 seconds to leave a feedback for you :)

How to Install Video Included.

 

Have FuN !

  • 2 weeks later...

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

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

×
×
  • Create New...