Jump to content

Recommended Posts

Posted

 

 

Source: www.l2guru.com

 

New skills:

 

Buffs:

New buffs replace 2 existing buffs on target. Dont need SP to learn them

 

Prophet

Empower Combat (70lvl) -Replace Might and Shield or same effect buffs and give a Might 3 и Shield 3. Effect 1.

Empower Condition (70lvl) - Replace Bless the Body and Bless the Soul or same effect buffs and give a BtB 6 + BtS 6. Effect 1

 

Shillien Elder

Empower Magic (70lvl) - same as previous Empower 3 + M. Barrier 3.

Empower Critical (70lvl) - same as previous Focus 3 + D. Whisper 3.

 

Elder

Empower Shield Defence (70lvl) - same as previous . Shield 6 + A. Block 3.

Empower Movement (70lvl) - same as previous WW 2 + Agility 3.

 

Warcryer

Empower Combat (70lvl) - same as previous Might 3 и Shield 3.

Empower Critical (72lvl) - same as previous Focus 3 + D. Whisper 3.

Хз чё такое (74lvl) - same as previous Haste 2 + V. Rage 4. (by another info effect VR4 + Reflect dmg lvl 3)

 

Dances/Songs:

Dont need SP to learn

 

Bladedancer

Dance of the blade Storm (70lvl) - greater resist bow and less mp consumption for bow (by another info greater increase bow patk)

 

Sword Singer

Song of the Wind Storm (70lvl) - resist bow

 

Summons/Cubics:

 

Arcana Lord/Elemental Master/Spectral Master/Eva's Templar/Shillien Templar

Summon Smart Cubic (80lvl) - Cubic removing debuffs and buff master

 

Kamael skills:

 

Soul Breaker/Soul Hound

Curse of Life Flow (60lvl) - gives a curse to enemy and make them lose vital force. at certain chance, recovers HP from attacking enemy. consumes 2 souls

Soul Cleanse (66lvl) - Removes all debuffs from caster. 2 souls

Soul Strike (76lvl) - Soul attack. 1 soul

Soul Vortex (77lvl) - temporally reduced enemy's speed/atk.spd/cast.spd

Soul Vortex Extinction (79lvl) - Damage removing effect soul vortex

Lightning Barrier (80lvl) - gives electrical current near enemies. makes them paralyze instantly.

 

Berserker/Doombringer

Soul Barrier (58lvl) - deactivate bad magic

Soul Cleanse (66lvl) - Removes all debuffs from caster. 2 souls

Rush Impact (78lvl) - Rush with shock and damage effect

Mass Disarm (79lvl) - mass disarm

 

Arbalester/Trickster

Soul Barrier (58lvl) - deactivate bad magic

Soul Cleanse (66lvl) - Removes all debuffs from caster. 2 souls

Wild Shot (??lvl) - fires bolts. critical possible. only with bowgun. overhit possible. consumes 2 souls. Power 5750

Betrayal Mark (78lvl) - party buff Reflect Dmg.

 

Judicator

Lightning Barrier (80lvl) - gives electrical current near enemies. makes them paralyze instantly.

 

 

New skills 81 lvl:

 

Wizards, Healers, Enchanters, Summoners:

Protection of Rune - magic resist

Protection of Elemental - elemental resist

Protection of Alignment - divine resist

 

Warriors, Rogues, Knights:

Fighter's Will - for melee weapon increase patk/atkspeed/accuracy

Archer's Will - for bow weapon increase patk/atkspeed/accuracy and range

Knights:

Anti Magic Armor - greater magic resist

 

Hell Knight:

Seed of Revenge - increase dmg depend on critical

Insane Creative - 3 stady increase seeds

Hell Scream - increase pdef by taking evasion

 

Phoenix Knight:

Spirit of Phoenix - Imbue phoenix soul, effect increase by taking dmg. Gives fire attack attribute and fire resist. Additional effects on improved spirit.

Flame Icon - great combat ability improvement

Eva's Templar:

Eva's Will - Put Eva blessing. Eva's Will grow by taking dmg.High Eva's Will add new effects. Add mdef, run speed and critical (base on water attribute, no idea what that could mean).

Touch of Eva - greater increase HP regeneration and maximum HP boost

 

Shillien Templar:

Pain of Shillien - Share Shillen pain. Pain of Shillien grow when u deal dmg. High Eva's Will add new effect.Increase crit dmg, run speed, and add vampiric effect (base on wind attribute)

Touch of Shillien - Increase CP around target. Staffed disabling effects

 

Daggers:

Expose Weak Point - when u take dmg target lose evasion. Increase critical

Sixth Sense - HP<30%increase evasion

Exciting Adventure (Adventurer)/Wind Riding (Wind Rider)/Ghost Walking (Ghost Hunter) - runs in battle field like wind . Greater increase speed, evasion, mortal strikes chance and ability to evade phis skills

 

Sagittarius:

Flame Hawk - Overhit power 5750

 

Moonlight Sentinel:

Arrow Rain -Overhit power 4312

 

Ghost Sentinel:

Ghost Piercing - Overhit power 6037.

 

 

Dreadnought

Dread Pull - Decrease run speed around

 

Duelist:

Sonic Cyclone - Some kind of AОЕ

Weapon Blockade - Block weapon usage ability at target.

 

Grand Khavatari:

Force of Destruction - lvl 2 focus required. Only for fist weapon. Crit possible . Power 2516

 

Titan:

Insanity Crusher - When u in rage (or frenzy) hit enemies around. Power 9014.

Demolition Impact - Tide of destruction. Crit possible.Overhit. Power 5750

 

Maestro:

Golem Armor - Transform in Battle Golem with new skills

Unknown (golem skill) -Remove bad buffs on Golem

Unknown (golem skill) -Make special golem fuel, that fuel can make him more powerfull

 

Bounty Hunter:

Unknown - Strong hit with shock effect . Power 4133

 

Archmage:

Flame Armor - Fire armor, Add fire resist and dmg nearby enemies

Mystic Muse:

Frost Armor - Water armor, Add water resist and decrease run speed nearby enemies

 

Storm Screamer:

Hurricaine Armor - Wind armor, Add wind resist and decrease atk speed nearby enemies

 

Soultaker:

Vampiric Mist - Mist taking away life of nearby enemies. Power 117.

 

Summoners:

Servitor Barrier - Celestial for summon, use 5 spirit ore.

Excessive Loyalty - Summon go in rage when master take hit

Mutual Response - When u attack summon restore hp/mp

 

Cardinal:

Sublime Self Sacrifice - sacrifice urself to make party invicible

 

Eva's Saint:

Blessing of Eva - Restore full hp/mp and can remove debuffs

 

Shillien Saint:

Thorn Root - Mass Dryad Root and dmg nearby enemies.

Lord of Vampire - Great vampiric effect

 

Dominator:

Seal of Limit - temporary decrease effectivness hp/mp/cp restoring magic for nearby enemies

 

 

 

1. Change over the body skill. Now need 80% cp in order to use him and CP will be consumed by time

2. Faster cast but increase cooldown for Power break and hex.

3. All rush skills (berserker) increase range with every lvl.

4-6. Magic seed of (element) change so now increase dmg from (element).

7. All parameters in Final Form dramatic increased

8. Skills hate, aura hate add chance 3 second debuff locking target.

9. СNext skills dont need special conditions anymore. So changes power and reuse time : Aura sumphony, inferno, blizzard, demonic wind, elemental assault/strike/storm.

20. Next passives : magic resistance, anti-magic now increase every lvl chance to resist magic

11.Overweight pets going to destroy them

12.Changes SP cost for some kamael skills

13. Change Nobless harmony skills so it can be used only in pvp zone

14. Next skills gonna be toggel now: 'sony counter' (???), 'counter Rapid shots' (boost attack speed?), dash counters (quick step?), counter mind (focus mind? clear mind?)

15. To next skills add new effects:

- blunt mastery: empower attacking skils, chance put debuff increase МР consumption.

16. Important changes to next skills:

- hate, aura hate: lower enemy dmg

- shield stun: elemental attributes changes so increase resist

17. WHen u wear crossbow even with atk speed buffs effect adjusted.

18. Changed sp cost for several skills.

19. Error with Dance of light corrected

21. Changed augment ressurection to be correct with low WIT

 

1. New lvl cap (85 lvl for first job) - already here.

2. New skills - already here.

3. New skills enchant cap - already here.

4. Stats and probably names of new weaps you can learn here. If you can't read Russian, don't worry, you really don't need that comments.

 

5. Information on new sikill granted by subclasses.

All skills granted by subclasses available only for your first (main) job. So if you have no will to play your first job since you added a subclass, you won't get anything.

a. depending of LVL of your sub there're certain skills:

- lvl 65 sub grants passive skill of increased patk/matk/pdef/mdef

- lvl 70 sub grants greater versions of one skill from the above or passive skill of increased critical/c.spd stat.

- lvl 75 sub grants even more greater versions of one skill from the above or one special skill depending on your sub prof.

 

the summoner sub (Warlock, Elemental Summoner, Phantom Summoner) grants one of the following passive skill:

a. Boost HP/MP : Max. HP and Max. MP increased

b. Resist Element Attribute : Elemental attack resistance increased

c. Counter Spirit : adds a chance to get a soul when you get hit (?maybe it means uber buff for a summoned beast?) (another source says that cast.spd. and magic dmg. go up.)

 

the healer sub (Shillien Elder, Elder, Bishop) grants one of the following passive skill:

a. Resist divine Attribute: Dark[=unholy] and Sacred[=divine=holy] attributed attacks resistance increased

b. Prayer : heal effectiveness increased

c. Counter Heal : adds a chance to heal your HP when you get hit

 

the Warrior sub (Gladiator, Warlord, Bounty Hunter, Tyrant, Destroyer, Soulbreaker, Berserker) grants one of the following passive skill:

a. Boost CP : max CP increased

b. Resist Mental : Resistance to sleep, hold, paralyze, cancel attacks increased

c. Counter Haste : adds a chance to increase your atk. speed when you get hit

 

the Enchanter sub (Prophet, Warcryer, Inspector) grants one of the following passive skill:

a. Boost Mana : max. MP increased

b. Mana Recovery : MP restoration speed increased

c. Counter Barrier : adds a chance of few moments of invulnerability for you when you get hit

 

the Rogue sub (Hawkeye, Silver Ranger, Phantom Ranger, Treasure Hunter, Plains Walker, Abyss Walker, Arbalester) grants one of the following passive skill:

a. Evasion : evasion increased

b. Long Shot : normal shot range increased

c. Counter Focus : adds a chance of to increase your critical stat when you get hit

 

the Wizard sub (Sorcerer, Spellsinger, Spellhowler, Necromancer) grants one of the following passive skill:

a. Empower : M.Atk increased

b. Mana Gain : amount of MP restored by recharge skills increased.

c. Counter Mana Steal : adds a chance of to steal some MP's when you get hit

 

the Knight sub (Paladin, Dark Avenger, Temple Knight, Shillien Knight, Sword Singer, Bladedancer - read the comment after this section) grants one of the following passive skill:

a. Boost HP : Max. HP increased

b. Crit.dmg Reduction : Resistance to critical hits you get increased

c. Counter Defense : adds a chance of to increase your pdef and mdef when you get hit

 

COMMENT for knight jobs. There's some opinions the Sword Singer and Bladedancer subs belong to enchanter group.

 

- lvl 80 sub grants new transformation skill for you. There's no information on sub/transformation pairs and no information on what thing you'll become with them, but we have a list (which is pretty useless):

Transform Divine Warrior

Transform Divine Knight

Transform Divine Wizard

Transform Divine Enchanter

Transform Divine Healer

Transform Divine Summoner

Transform Divine Rogue

 

Clans and alliances

 

1.

Alliances

- Importance of majority of alliance functions, beside the ally chat and something called "alliance sentence", decreased essentially.

- Penalty of alliance deletion decreased from 10 days to 1 day.

- No personal penalties imposed on anymore (no exp penalties).

 

Siege wars

- At any war activities members of your alliance no longer supposed friends.

- Clans from the one's alliance can sing up for defence or attack side according to their will.

- (still unclear) Temporary separate alliances created for each side - one for side of attack and one for side of defence. While siege war runs major alliance has no effect (its effect overridden by temporary siege one).

- If siege succeeded the temporary alliance of winning clan didn't change.

- If siege succeeded the temporary alliance of winning side gets some points (We assume CRP lol) and ported out from the goal. (It's absolutely unclear around point. It's also unclear which side is teleported out - the winning one or the losing one.)

 

Clans relationships

- Clans can make relationships to clans that have an alliance. Also clans can make short-time alliances with clans that have an alliance already. (The time and the method are unclear.)

 

7 signs (aka AA farming)

- Clan from an ally that owns a castle can sing up for dusk side.

- If the dusk side broken the seals, clan that signed to for the dusk side cannot participate in a castle defense. The registration of such clan cancelled when siege war start.

 

 

2.

Clans

 

Siege requirements

- Level of a clan participating siege war increased 4 -> 5.

- The clan leader's skill which was previously available at lvl 4 of a clan, changed to be available at lvl 5 of a clan..

 

Clan level increase conditions

- Consumed Sp's to increase lvls 1 ->5 reduced.

- Clan members number to get lvls 8 -> 9 reduced from 140 to 120.

 

 

Forts (strongholds)

- When a clan owns a fort, its leader can ride a wyvern.

- When you're entering a fort, regarding information appears on the map.

- When a clan owns a fort for 75 hours, it gets attacked by 'unstoppable force'. (It supposes you cannot stop that thing, which means your fort WILL return to NPC's when 75 hours are over after your clan wins it.)

- After a fort has attacked by 'unstoppable force', clans cannot register for a siege within 2 hours.

- The leader of a clan that owns a fortes can get information on the time left before 'unstoppable force' attacks. Condition of neighbor forts can make sense on the timer.

- Fort garrison NPC weakened.

- At the kamael+ update downtime all forts will return to NPC's. If there's some fort owners at server down moment, they will get some compensation.

 

 

Quests

- 22 new quests added.

- 30-40 changes of old quests made. Now your quest reward is penalized if your lvl is 6 above the recommended limits.

 

(The translator failed at town and NPC names so we have no translation for certain starting points. The translator notes new 3rd class quest for kamael inspector.)

 

Old quest changes (translator's remark - he got f*cked up with this part)

- Kamael 2nd class quests reward increased. (Don't sure if such rewards increased for other classes, not for kamael. If anyone played kamael, let us know if NPC's give enough teleporting diamonds and exp/Sp.)

- Some quest named "Now that the power load on the blade" (Enchant your weapon - translator's remark) now produces lvl 15 SA-crystals (translator highly impressed here). Bosses named balath, antharas, valakas changed accordingly.

- Some golem boss at Island of prayer now produces lvl 14 SA-crystals. (Probably original contains more but the translator can't read more.)

- Some quest named "Chains attached to your brothers" is now available until lvl 85.

- The reward kamaels get from some quest named "Navigation arrogant" changed to comfort such for other classes.

 

Brief compilation on new/changed items

Weapon and armor

 

- Top-S grade weapons added.

- Yes, all new items are S80 grade.

 

Weapons

Top S80 grade

All top s80 grade weapons use SA-lvl of 15 lvl, colored red/green/blue to get the following benefits (it's another brief translation of SA's).

 

Sword of Icarus (focus / health / light)

Icarus Heavy Arms (focus / health / light)

Icarus Spirit (acumen / mana up / empower)

Icarus scepter (cheap shot / guidance / focus)

Icarus (dagger) (focus / evasion / crit.dmg.)

Trident Icarus (anger / crit.stun / light)

Icarus Hammer (anger / health / rsk.focus)

Icarus Hall (mana up / empower / acumen)

Icarus Hand (rsk.evasion / focus / ???)

Icarus (a.swrd.) (focus / health / light)

Icarus (rapier) (focus / health / light)

Icarus Shooter (arbalest) (cheap shot / guidance / focus)

 

Low S80

All top s80 grade weapons use SA-lvl of 14 lvl, colored red/green/blue to get the following benefits (it's another brief translation of SA's).

 

Dynasty staff (mana up / empower / acumen)

Dynasty crusher (anger / health / rsk.focus)

 

Armors modifications (shoulders)

Dynasty [Plate Armor]:

- Shield mastery

- Weapon mastery

- Force mastery (survivability???)

- ???

 

Dynasty [light armor]

- Dagger mastery

- Bow mastery

- Force mastery (survivability???)

- Weapon mastery (they get at last damagers are not only archers and daggers)

- Enchanter aka buffer (yes, some of them has light armor mastery - surprise! surprise!)

- Summoner (no idea)

 

Dynasty [robe of silver satin]

- Healer

- Enchanter (aka buffer)

- Wizard

- Summoner

 

Monster and NPC's

Them park island settled with NPC's and conforming monsters.

 

NPC

- You can take part in games of fun on theme park island 4 times a day

- You can see different unique environment depending on time.

 

The games

The games begin in the evening with NPC/monster concerto... (no will to translate the rest)

 

 

Hunting grounds

Hell bound - the towers of steel

- The tower of steel, where the boss beleth is located, is a great place to hunt monsters (aka grinding and farming lol) and other pve related joys.

- You have to gain reputation around hellbound's natives in order to enter the towers.

- The tower of the King consist of several buildings (tower's lobby, tower of space, little tower of Toledo, tower of ages).

- If you get disconnected while you're in (tower's lobby, tower of space, little tower of Toledo), you will be automatic ported to local 'oasis' after 10 minutes.

- (some unclear here) If you get disconnected while you're in (the tower of ages, beleth residence), you will be automatic ported to local 'oasis' momentarily.

- If the server goes down for more than 30 minutes, you will be automatic ported to local 'oasis'.

 

Tower's lobby

- It consists of 2-floor labyrinth.

- You have to satisfy certain conditions to enter it. You have to gain reputation around hellbound's natives in order to enter it.

 

Tower of space

- It is the residence for two bosses: 'debil Duke' and 'ranku'.

- You have to pass through it to enter the (little tower of Toledo).

 

Little tower of Toledo

- Its 8th flood is the residence of a raid boss 'darion'.

- To enter the (tower of ages) you have to slay this boss.

 

Tower of ages

- It is the residence for new epic boss called beleth.

- You have to pass through it within 1 hour otherwise you get ported out. (to 'oasis' as i see.)

 

Old locations

- Rewards for dino island monsters increased significantly

 

Source : www.l2guru.com

 

Posted

all useless skills for summoners and mages

 

and once again, making archers and fighters in general more powerful to make more mages leave...L2 is becoming worst everyday

  • 2 weeks later...
Posted

all useless skills for summoners and mages

 

and once again, making archers and fighters in general more powerful to make more mages leave...L2 is becoming worst everyday

 

That's what I wanted to say

Posted

Well, New Skills Are Good... Especially Counter Rapid Shot.. Which T O T A L L Y Pwnz!

if u had played L2 Refused And You Had Moonlight Sentinel You Should Know That!!

 

 

Posted

Nice Share Fight!  ... It does not have a lot of changes ! But it is going from the best to the best!!

Posted

Exciting Adventure (Adventurer)/Wind Riding (Wind Rider)/Ghost Walking (Ghost Hunter) - runs in battle field like wind . Greater increase speed, evasion, mortal strikes chance and ability to evade phis skills <-------IMBA daggers <3

Arcana Lord/Elemental Master/Spectral Master/Eva's Templar/Shillien Templar

Summon Smart Cubic (80lvl) - Cubic removing debuffs and buff master

removers debuffs?(like silence?) buff u?? oO

Posted

official server is gettin' like a custom pvp server..lol this sux

 

I agree with you but i think its getting more like WoW :D

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