- 0
-
Posts
-
package custom.events.RandomZoneEvent; import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.concurrent.ScheduledFuture; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.l2jmobius.commons.threads.ThreadPool; import org.l2jmobius.commons.time.SchedulingPattern; import org.l2jmobius.commons.time.TimeUtil; import org.l2jmobius.commons.util.IXmlReader; import org.l2jmobius.gameserver.managers.ZoneManager; import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.quest.Event; import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.model.zone.ZoneType; import org.l2jmobius.gameserver.model.zone.type.RandomZone; import org.l2jmobius.gameserver.util.Broadcast; /** * Random Zone Event - Activates one random PvP zone temporarily. No modifica la clase de la zona: usa flags PvP en runtime. * @author Juan */ public class RandomZoneEvent extends Event { private static final String CONFIG_FILE = "data/scripts/custom/events/RandomZoneEvent/config.xml"; private static int EVENT_DURATION_MINUTES = 15; private static boolean _isActive = false; private ScheduledFuture<?> _eventTask = null; private final List<ZoneType> _availableZones = new ArrayList<>(); private ZoneType _activeZone = null; public RandomZoneEvent() { loadConfig(); loadZones(); registerZoneListeners(); } /** * Registra listeners a TODAS LAS ZONAS random */ private void registerZoneListeners() { for (ZoneType zone : _availableZones) { addEnterZoneId(zone.getId()); addExitZoneId(zone.getId()); LOGGER.info("[RandomZoneEvent] Registered listener for zone: " + zone.getName()); } } private void loadConfig() { new IXmlReader() { @Override public void load() { parseDatapackFile(CONFIG_FILE); } @Override public void parseDocument(Document doc, File file) { forEach(doc, "event", eventNode -> { final StatSet att = new StatSet(parseAttributes(eventNode)); final String name = att.getString("name"); for (Node node = eventNode.getFirstChild(); node != null; node = node.getNextSibling()) { if ("schedule".equals(node.getNodeName())) { final StatSet attributes = new StatSet(parseAttributes(node)); final String pattern = attributes.getString("pattern"); final SchedulingPattern schedulingPattern = new SchedulingPattern(pattern); final StatSet params = new StatSet(); params.set("Name", name); params.set("SchedulingPattern", pattern); final long delay = schedulingPattern.getDelayToNextFromNow(); getTimers().addTimer("Schedule_" + name, params, delay + 5000, null, null); LOGGER.info("[RandomZoneEvent] Event " + name + " scheduled at " + TimeUtil.getDateTimeString(System.currentTimeMillis() + delay)); } } }); } }.load(); } private void loadZones() { for (ZoneType zone : ZoneManager.getInstance().getAllZones(RandomZone.class)) { if ((zone.getName() != null) && zone.getName().toLowerCase().startsWith("random_zone")) { _availableZones.add(zone); LOGGER.info("[RandomZoneEvent] Loaded zone: " + zone.getName() + " (id=" + zone.getId() + ")"); } } LOGGER.info("[RandomZoneEvent] Total random zones loaded: " + _availableZones.size()); } @Override public void onTimerEvent(String event, StatSet params, Npc npc, Player player) { if (event.startsWith("Schedule_")) { eventStart(null); final SchedulingPattern schedulingPattern = new SchedulingPattern(params.getString("SchedulingPattern")); final long delay = schedulingPattern.getDelayToNextFromNow(); getTimers().addTimer(event, params, delay + 5000, null, null); LOGGER.info("[RandomZoneEvent] Rescheduled for " + TimeUtil.getDateTimeString(System.currentTimeMillis() + delay)); } } @Override public boolean eventStart(Player eventMaker) { if (_isActive) { if (eventMaker != null) { eventMaker.sendMessage("RandomZoneEvent already active."); } return false; } if (_availableZones.isEmpty()) { Broadcast.toAllOnlinePlayers("[RandomZoneEvent] No zones configured."); return false; } _isActive = true; Broadcast.toAllOnlinePlayers("⚔️ Random Zone Event has started!"); _eventTask = ThreadPool.schedule(this::activateRandomZone, 5_000); return true; } private void activateRandomZone() { _activeZone = _availableZones.get(new Random().nextInt(_availableZones.size())); _activeZone.setEnabled(true); Broadcast.toAllOnlinePlayers("🔥 Random Zone Event: " + _activeZone.getName() + " is now PvP for " + EVENT_DURATION_MINUTES + " minutes!"); _eventTask = ThreadPool.schedule(this::eventStop, EVENT_DURATION_MINUTES * 60 * 1000L); } @Override public boolean eventStop() { if (!_isActive) { return false; } _isActive = false; if (_eventTask != null) { _eventTask.cancel(true); _eventTask = null; } if (_activeZone != null) { _activeZone.setEnabled(false); Broadcast.toAllOnlinePlayers("🏁 Random Zone Event ended. " + _activeZone.getName() + " is back to normal."); _activeZone = null; } else { Broadcast.toAllOnlinePlayers("🏁 Random Zone Event ended."); } return true; } @Override public void onEnterZone(Creature creature, ZoneType zone) { if (!_isActive || (_activeZone == null)) { return; } if ((zone == _activeZone) && creature.isPlayable()) { creature.setInsideZone(ZoneId.PVP, true); if (creature.isPlayer()) { creature.sendMessage("Esta zona está en modo PvP temporalmente."); } } } @Override public void onExitZone(Creature creature, ZoneType zone) { if (!_isActive || (_activeZone == null)) { return; } if ((zone == _activeZone) && creature.isPlayable()) { creature.setInsideZone(ZoneId.PVP, false); if (creature.isPlayer()) { creature.sendMessage("Abandonaste la zona PvP temporal."); } } } @Override public boolean eventBypass(Player player, String bypass) { return true; } @Override public String onEvent(String event, Npc npc, Player player) { return super.onEvent(event, npc, player); } @Override public String onFirstTalk(Npc npc, Player player) { return null; } public static void main(String[] args) { new RandomZoneEvent(); } } i have this but its not working
-
ZonePvPSpawnBossRadio=0 ZonePvPSpawnBossBarakiel=0 at the Customs.ini in L2Server folder. Im prety sure this is it because i had the same problem with you in cruma 1 floor for example and i couldn't fix it but i fixed it finally by changing these 2 lines
-
Topics

Question
mythounakos
L2j Inn Balance class
Ta configs gia to balance thelw gt o server einai unbalance mborite na me voithisete ????
#===========================================================#
# BALANCE CLASS #
#===========================================================#
# Damages to Fighters
#
Duelist__ToFighter = 1.0
DreadNought__ToFighter = 1.0
Phoenix_Knight__ToFighter = 0.9
Hell_Knight__ToFighter = 1.0
Sagittarius__ToFighter = 1.1
Adventurer__ToFighter = 0.8
Archmage__ToFighter = 1.3
Soultaker__ToFighter = 1.3
Arcana_Lord__ToFighter = 0.5
Cardinal__ToFighter = 0.5
Hierophant__ToFighter = 0.5
Eva_Templar__ToFighter = 1.0
Sword_Muse__ToFighter = 1.0
Wind_Rider__ToFighter = 0.8
Moonlight_Sentinel__ToFighter = 1.0
Mystic_Muse__ToFighter = 1.3
Elemental_Master__ToFighter = 0.5
Eva_s_Saint__ToFighter = 0.5
Shillien_Templar__ToFighter = 1.0
Spectral_Dancer__ToFighter = 1.0
Ghost_Hunter__ToFighter = 0.8
Ghost_Sentinel__ToFighter = 1.1
Storm_Screamer__ToFighter = 1.3
Spectral_Master__ToFighter = 0.5
Shillien_Saint__ToFighter = 0.5
Titan__ToFighter = 1.0
Grand_Khauatari__ToFighter = 0.9
Dominator__ToFighter = 0.7
Doomcryer__ToFighter = 0.5
Fortune_Seeker__ToFighter = 1.0
Maestro__ToFighter = 1.0
# Damages to Mages
#
Duelist__ToMage = 0.9
DreadNought__ToMage = 1.0
Phoenix_Knight__ToMage = 0.9
Hell_Knight__ToMage = 1.0
Sagittarius__ToMage = 1.0
Adventurer__ToMage = 0.8
Archmage__ToMage = 1.1
Soultaker__ToMage = 1.1
Arcana_Lord__ToMage = 0.5
Cardinal__ToMage = 0.5
Hierophant__ToMage = 0.5
Eva_Templar__ToMage = 1.0
Sword_Muse__ToMage = 1.0
Wind_Rider__ToMage = 0.7
Moonlight_Sentinel__ToMage = 1.1
Mystic_Muse__ToMage = 1.1
Elemental_Master__ToMage = 0.5
Eva_s_Saint__ToMage = 0.5
Shillien_Templar__ToMage = 1.0
Spectral_Dancer__ToMage = 1.0
Ghost_Hunter__ToMage = 0.7
Ghost_Sentinel__ToMage = 1.1
Storm_Screamer__ToMage = 1.1
Spectral_Master__ToMage = 0.5
Shillien_Saint__ToMage = 0.5
Titan__ToMage = 0.9
Grand_Khauatari__ToMage = 0.8
Dominator__ToMage = 0.6
Doomcryer__ToMage = 0.6
Fortune_Seeker__ToMage = 1.0
Maestro__ToMage = 1.0
# Damages By Fighters
#
Duelist__ByFighter = 1.1
DreadNought__ByFighter = 1.0
Phoenix_Knight__ByFighter = 1.1
Hell_Knight__ByFighter = 1.0
Sagittarius__ByFighter = 1.0
Adventurer__ByFighter = 1.1
Archmage__ByFighter = 1.0
Soultaker__ByFighter = 1.0
Arcana_Lord__ByFighter = 1.3
Cardinal__ByFighter = 1.1
Hierophant__ByFighter = 1.3
Eva_Templar__ByFighter = 1.0
Sword_Muse__ByFighter = 1.1
Wind_Rider__ByFighter = 1.1
Moonlight_Sentinel__ByFighter = 1.0
Mystic_Muse__ByFighter = 1.0
Elemental_Master__ByFighter = 1.3
Eva_s_Saint__ByFighter = 1.0
Shillien_Templar__ByFighter = 1.0
Spectral_Dancer__ByFighter = 1.0
Ghost_Hunter__ByFighter = 1.0
Ghost_Sentinel__ByFighter = 1.0
Storm_Screamer__ByFighter = 1.0
Spectral_Master__ByFighter = 1.0
Shillien_Saint__ByFighter = 1.0
Titan__ByFighter = 1.0
Grand_Khauatari__ByFighter = 1.0
Dominator__ByFighter = 1.2
Doomcryer__ByFighter = 1.1
Fortune_Seeker__ByFighter = 1.0
Maestro__ByFighter = 1.0
# Damages By Mages
#
Duelist__ByMage = 1.3
DreadNought__ByMage = 1.3
Phoenix_Knight__ByMage = 1.3
Hell_Knight__ByMage = 1.3
Sagittarius__ByMage = 1.3
Adventurer__ByMage = 1.3
Archmage__ByMage = 1.3
Soultaker__ByMage = 1.3
Arcana_Lord__ByMage = 1.3
Cardinal__ByMage = 1.3
Hierophant__ByMage = 1.3
Eva_Templar__ByMage = 1.3
Sword_Muse__ByMage = 1.3
Wind_Rider__ByMage = 1.3
Moonlight_Sentinel__ByMage = 1.3
Mystic_Muse__ByMage = 1.3
Elemental_Master__ByMage = 1.3
Eva_s_Saint__ByMage = 1.3
Shillien_Templar__ByMage = 1.3
Spectral_Dancer__ByMage = 1.3
Ghost_Hunter__ByMage = 1.3
Ghost_Sentinel__ByMage = 1.3
Storm_Screamer__ByMage = 1.3
Spectral_Master__ByMage = 1.3
Shillien_Saint__ByMage = 1.3
Titan__ByMage = 1.3
Grand_Khauatari__ByMage = 1.3
Dominator__ByMage = 1.3
Doomcryer__ByMage = 1.3
Fortune_Seeker__ByMage = 1.3
Maestro__ByMage = 1.3
3 answers to this question
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now