Jump to content

Recommended Posts

Posted

well first of all i used search and found nothing so i post if it allrdy posted delete it plz if its wrong section so put in the right plx ty  :P .

 

//admin

Brings up the admin menu.

 

//gm

Toggle GM status.

 

//gmchat

Sends a global message that only GMs can see.

Usage: //gmchat Type message here.

 

//snoop

 

//gmliston

Register into gm list

 

//gmlistoff

Remove from gm list

 

//silence

(To enable/disable private message mode)

 

//saveolymp

Save olympiad

 

//manualhero

Manual select heroes

 

//atmosphere <signsky> <dawn|dusk>

Sets current sky to either Dawn or Dusk, as seen by members of the winning cabal.

 

//atmosphere <sky> <day|night>

Sets current sky to either day or night.

 

//diet

Current status of diet mode "Weight Restriction" for player.

 

//diet on

Enables diet mode, removing your "weight" restriction.

 

//diet off

Disables diet mode. restoring your "weight" restriction.

 

//play_sound

Brings up sounds page.

 

//edit_character

Opens menu to edit targetted player.

 

//current_player

Opens character list.

 

//character_list

Opens list of online players.

 

//show_characters

Opens list of online players.

 

//find_character

Opens the find player menu.

 

//save_modifications

Saves the edits done to the targetted player.

 

//nokarma

removes karma from target player

 

//setkarma <value>

sets karma of target player to value

 

//rec

Recommnend targeted player

 

//settitle

Set title of targeted player

 

//setname

Set name of targeted player

 

//setcolor

Set name color of targeted player

 

//fullfood

Full feed targeted pet

 

//invis

to hide your character

 

//invisible

to hide your character

 

//vis

to unhide your character

 

//visible

to unhide your character

 

//known on

to unhide your character from known list

 

//known off

to hide your character from known list

 

//earthquake <Intensity> <Duration>

Creates an earthquake

 

//para_all

Paralyzes all players}}

 

//unpara_all

Unparalyze all players

 

//para

Paralyze Target

 

//unpara

Unparalyze Target

 

//bighead

Gives target a big head

 

//shrinkhead

Returns targets head to normal size

 

//polymorph

character npc id

 

//polymorph

item id to poly target into id

 

//polyself <npc id>

Used to polymorph yourself into a mob

 

//unpolyself

Returns you to the normal state

 

//polymorph <itemid>

Polymorphs an item

 

//gmspeed <value>

Usage //gmspeed value = [0...4]

 

//changename <new_name>

Change name of targetted player

 

//add_exp_sp_to_character

Opens the xp sp menu of the targetted player.

 

//add_exp_sp

Adds xp sp to targetted player.

Usage: //add_exp_sp xp_number sp_number

 

//remove_exp_sp

Remove xp sp from targetted player.

Usage: //remove_exp_sp xp_number sp_number

 

//tradeoff

Current status of trading for player.

 

//tradeoff on

Enables trading with other players.

 

//tradeoff off

Disables trading with other players.

 

//reload skill

Reloads skill data.

 

//reload multisell

Reloads multisell data.

 

//reload teleport

Reloads teleport locations.

 

//reload npc

Reloads all npc.

 

//reload htm

Reloads htm files.

 

//reload item

Reloads item templates.

 

//reload instancemanager

Reloads instancemanager.

 

//announce_menu

Opens the announce menu.

 

//list_announcements

Lists the current announcements.

 

//reload_announcements

Reloads the announcement list.

 

//announce_announcements

Posts all announcements in list.

 

//add_announcement

Adds an announcement.

Usage: //add_announcement Your announcement here

 

//del_announcement

Deletes an announcement.

Usage: //del_announcement Your announcement here

 

//announce

Posts an announcement.

Usage: //announce Your announcement here

 

//ban

Used to kick and ban a named players account.

Usage: //ban kadar

 

//unban

Used to unban a named players account.

Usage: //unban kadar

 

//kick

Used to disconnect named player.

Usage: //kick kadar

 

//kick_non_gm

Used to disconnect all regular players

 

//kill

Kill targeted player/NPC

 

//jail

Used to jail named player for a number of minutes.

Usage: //jail kadar 10

 

//unjail

Used to unjail named player.

Usage: //unjail kadar

 

//banchat

Mutes a player.

Usage: //banchat kadar

 

//unbanchat

Unmutes a player.

Usage: //unbanchat kadar

 

//bbs

Brings up comunity board

 

//add_level

Add levels to target char.

Usage: //add_level 5

 

//set_level

Set level of targeted char.

Usage: //set_level 50

 

//heal

Heal target player or players in radius.

Usage: //heal 2000

 

//help

Opens help page

 

//invul

Turns invulnerability on/off

 

//target

Used to target a Mob or player.

Usage: //target kadar

 

//cache_htm_rebuild

Rebuilds and reloads the HTML cache.

 

//cache_htm_reload

Reloads the HTML cache.

 

//cache_reload_file

Reloads the HTML cache for a single file.

 

//cache_reload_path

Reloads the HTML cache for a specified directory.

 

//cache_crest_rebuild

Rebuilds the cache of pledge crests.

 

//cache_crest_reload

Reloads the cache of pledge crests.

 

//cache_crest_fix

Fixes problems with incorrect displaying of pledge crests.

 

//changelvl

Changes a targetted players access level.

Usage: //changelvl Access_level_number

 

//itemcreate

Opens the item creation menu.

 

//create_item

Creates an item.

Usage: //create_item item_id

 

//cw_infos

Get infos on cursed weapons

 

//cw_remove

Remove specified cursed weapon.

Usage: //cw_remove 8190

 

//cw_reload

Reloads cursed weapons

 

//delete

Used to remove a targetted NPC. NPC will not respawn.

 

//character_disconnect

Used to disconnect a targetted player.

 

//open

opens targetted door

 

//close

closes targetted door

 

//openall

opens all doors

 

//closeall

closes all doors

 

//edit_npc

Used to edit a NPCs stats.

Usage: //edit_npc npc_id

 

//save_npc

Saves the editted NPC info.

 

//recall_npc

Teleports targetted NPC to you.

 

//show_droplist

Shows the named NPCs drop list.

Usage: //show_droplist npc_id

 

//edit_drop

Edits the named NPCs droplist.

Usage: //edit_drop npc_id item_id [min max sweep chance]

 

//add_drop

Adds a drop to the named NPCs droplist.

Usage: //add_drop npc_id item_id [min max sweep chance]

 

//del_drop

Deletes a drop to the named NPCs droplist.

Usage: //del_drop npc_id item_id

 

//showShop

Shows a targetted vendors shoplist.

 

//showShopList

Shows a targetted vendors shoplist.

 

//addShopItem

Adds an item to a vendors shop.

Usage: //addShopItem Shop_ID item_id Price

 

//delShopItem

Deletes an item from a vendors shoplist.

Usage: //delShopItem Shop_ID item_id

 

//editShopItem

Edits an item in a vendors shoplist.

Usage: //editShopItem Shop_ID item_id Price

 

//box_access

with box targetted, shows access list

 

//box_access char1 char2

to add players to box

Usage: //box_access kadar !LadyPain

 

//box_access no char1

removes player from box access

Usage: //box_access !LadyPain no kadar

 

//clear_teams

 

//setteam_close <team_name>

Join players in radius 400 to specified team

 

//setteam <team_name>

Join targetted player to specified team

 

//enchant

Opens enchant menu

 

//seteh <enchant_level>

Set enchant level for head slot

 

//setec <enchant_level>

Set enchant level for chest slot

 

//seteg <enchant_level>

Set enchant level for gloves slot

 

//seteb <enchant_level>

Set enchant level for feet slot

 

//setel <enchant_level>

Set enchant level for legs slot

 

//setew <enchant_level>

Set enchant level for r_hand slot

 

//setes <enchant_level>

Set enchant level for l_hand slot

 

//setle <enchant_level>

Set enchant level for l_ear slot

 

//setre <enchant_level>

Set enchant level for r_ear slot

 

//setlf <enchant_level>

Set enchant level for l_finger slot

 

//setrf <enchant_level>

Set enchant level for r_finger slot

 

//seten <enchant_level>

Set enchant level for neck slot

 

//setun <enchant_level>

Set enchant level for under slot

 

//setba <enchant_level>

Set enchant level for back slot

 

//event

Opens event page

 

//event_new

Opens new event page

 

//event_choose

 

//event_store

 

//event_set

 

//event_change_teams_number

 

//event_announce

 

//event_panel

 

//event_control_begin

 

//event_control_teleport

 

//add

Add event

 

//event_see

List events

 

//event_del <event_name>

 

//delete_buffer

 

//event_control_sit

 

//event_name

 

//event_control_kill

 

//event_control_res

 

//event_control_poly

 

//event_control_unpoly

 

//event_control_prize

 

//event_control_chatban

 

//event_control_finish

 

//fight_calculator

Show fight calculator

 

//fight_calculator_show

Show fight calculator

 

//fcs

Show fight calculator

 

//geo_z

Get Geo_Z

 

//geo_type

Get Geotype

 

//geo_nswe

Get heading

 

//geo_los

Check line of sight

 

//geo_position

Get geo position

 

//geo_bug

Add bug comment

Usage: //admin_geo_bug you coments here

 

//geo_load

Usage: //admin_geo_load <regionX> <regionY>

 

//geo_unload

Usage: //admin_geo_unload <regionX> <regionY>

 

//geoeditor_connect

Usage: //geoeditor_connect <number>

 

//geoeditor_join

Join active char

 

//geoeditor_leave

 

//server_gm_only

Only GM can access server

 

//server_all

Public access server

 

//server_max_player <number>

Set max players value

 

//server_list_clock

Toggle clock displayed next to the server name

 

//server_login

Opens login server edit window

 

//mammon_find

Lists the current location (if any) of the Mammon NPCs

 

//mammon_respawn

Lists the current respawn times (if any) of the Mammon NPCs

 

//list_spawns <npcId> <teleIndex>

Teleports to the player based on the given spawn index (from using //list_spawns <npcId>).

 

//msg <ID>

Used for testing SystemMessage IDs

 

//char_manage

Opens characters manage page

 

//mobmenu

Opens mobgroup.htm

 

//admin_mobgroup_list

 

//mobgroup_create

 

//mobgroup_remove

 

//mobgroup_delete

 

//mobgroup_spawn

 

//mobgroup_unspawn

 

//mobgroup_kill

 

//mobgroup_idle

 

//mobgroup_attack

 

//mobgroup_rnd

 

//mobgroup_return

 

//mobgroup_follow

 

//mobgroup_casting

 

//mobgroup_nomove

 

//mobgroup_attackgrp

 

//mobgroup_invul

 

//mobinst

Opens mobgrouphelp.htm

 

//mons

Used to start the Monster Races.

 

//pn_info

Path node info

 

//show_path

 

//path_debug

 

//show_pn

 

//find_path

 

//view_petitions

View petitions list

 

//view_petition

View petition

 

//accept_petition

 

//reject_petition

 

//reset_petitions

clear the petition queue

 

//forge

 

//forge2

 

//forge3

 

//pledge <create|dismiss|setlevel><create|dismiss|setleve l>

 

//restore

Restores a broken player info.

 

//repair

Repairs a broken player info.

 

//res

Resurrect player

 

//res_monster

Resurrect monster

 

//ride_wyvern

Command used to summon and ride a wyvern.

 

//unride_wyvern

Command to dismount and unsummon a wyvern.

 

//ride_strider

Command used to summon and ride a strider.

 

//unride_strider

Command to dismount and unsummon a strider.

 

//buy

Opens the GMShop.

 

//gmshop

Opens the GMShop.

 

//server_shutdown

Starts the shutdown process.

Usage: //server_shutdown Number of seconds

 

//server_restart

Starts the restart process.

Usage: //server_restart Number of seconds

 

//server_abort

Stops the server shutdown.

 

//siege

 

//add_attacker

 

//add_defender

 

//add_guard

 

//list_siege_clans

 

//clear_siege_list

 

//move_defenders

 

//spawn_doors

 

//endsiege

 

//startsiege

 

//setcastle

 

//clanhall

 

//clanhallset

 

//clanhalldel

 

//clanhallopendoors

 

//clanhallclosedoors

 

//clanhallteleportsel

 

//show_skills

Lists targetted players skills.

 

//remove_skills

Removes the targetted players skills.

 

//skill_list

Opens skill menu.

 

//skill_index

Opens skill menu according to players stats.

 

//add_skill

Adds a skill to a targetted player.

Usage: //add_skill Skill_id level

 

//remove_skill

Removes a skill from a targetted player.

Usage: //remove_skill Skill_id

 

//get_skills

Temporarily gives you the skills of a targetted player.

 

//reset_skills

Restores your skills from before the get_skills command.

 

//admin_remove_all_skills

 

//admin_give_all_skills

 

//skill_test <skill_id>

Test a skill.

Usage: //skill_test 100

 

//st <skill_id>

Test a skill.

Usage: //st 100

 

//show_spawns

Opens spawn menu.

 

//spawn

Spawns a Mob on current target.

Usage: //spawn npc_id

 

//spawn_monster

Spawns a Mob on current target.

Usage: //spawn_monster npc_id

 

//spawn_index

Shows menu for monsters with respective level.

Usage: //spawn_index level

 

//unspawnall

 

//respawnall

 

//spawn_reload

 

//npc_index

 

//show_npcs

 

//teleport_reload

 

//spawnnight

 

//spawnday

 

//show_moves

Opens the teleport menu.

 

//show_moves_other

Opens the teleport menu named other.

 

//show_teleport

Opens the teleport menu.

 

//teleport_to_character

Teleports you to the named player.

Usage: //teleport_to_character kadar

 

//move_to

Teleports you to coordinates given.

 

//teleport_character

Teleports targetted player to coordinates given.

 

//recall

Summons a named player to you.

Usage: //recall kadar

 

//admin_walk

 

//explore

 

//admin_recall_npc

 

//gonorth

 

//gosouth

 

//goeast

 

//gowest

 

//goup

 

//godown

 

//teleshow

teleport window

 

//admin_failed

 

//test

These //test commands are for the universe mapping feature

 

//test uni flush

Save universe map

 

//test hash <number>

 

//test uni

Return universe size

 

//mp on

Start packet monitor

 

//mp off

Stop packet monitor

 

//mp dump

Save packet history

 

//known on

to unhide your character from known list

 

//known off

to hide your character from known list

 

//zone_check

 

//zone_reload

 

Resource: https://www.l2jserver.com

 

 

Guest
This topic is now closed to further replies.


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