diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/config/SiegeSchedule.xml b/L2J_Mobius_1.0_Ertheia/dist/game/config/SiegeSchedule.xml index a4c5284fff..9de3eb0772 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/config/SiegeSchedule.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/config/SiegeSchedule.xml @@ -1,5 +1,12 @@ - - + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/xsd/SiegeSchedule.xsd b/L2J_Mobius_1.0_Ertheia/dist/game/data/xsd/SiegeSchedule.xsd index da2cb0a799..3a3cb7072c 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/xsd/SiegeSchedule.xsd +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/xsd/SiegeSchedule.xsd @@ -5,6 +5,9 @@ + + + diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java index 0d5c2a8d25..9e5c54a54b 100644 --- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java +++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java @@ -17,9 +17,9 @@ package org.l2jmobius.gameserver.data.xml.impl; import java.io.File; -import java.util.ArrayList; import java.util.Calendar; -import java.util.List; +import java.util.HashMap; +import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; @@ -39,7 +39,7 @@ public class SiegeScheduleData implements IXmlReader { private static final Logger LOGGER = Logger.getLogger(SiegeScheduleData.class.getName()); - private final List _scheduleData = new ArrayList<>(); + private final Map _scheduleData = new HashMap<>(); protected SiegeScheduleData() { @@ -49,14 +49,8 @@ public class SiegeScheduleData implements IXmlReader @Override public synchronized void load() { - _scheduleData.clear(); parseDatapackFile("config/SiegeSchedule.xml"); LOGGER.info(getClass().getSimpleName() + ": Loaded " + _scheduleData.size() + " siege schedulers."); - if (_scheduleData.isEmpty()) - { - _scheduleData.add(new SiegeScheduleDate(new StatSet())); - LOGGER.info(getClass().getSimpleName() + ": Emergency loaded " + _scheduleData.size() + " default siege schedulers."); - } } @Override @@ -85,7 +79,7 @@ public class SiegeScheduleData implements IXmlReader } set.set(key, val); } - _scheduleData.add(new SiegeScheduleDate(set)); + _scheduleData.put(set.getInt("castleId"), new SiegeScheduleDate(set)); break; } } @@ -107,9 +101,9 @@ public class SiegeScheduleData implements IXmlReader } } - public List getScheduleDates() + public SiegeScheduleDate getScheduleDateForCastleId(int castleId) { - return _scheduleData; + return _scheduleData.get(castleId); } public static SiegeScheduleData getInstance() diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java index d854355fb0..fb560f02c9 100644 --- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java +++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java @@ -26,12 +26,14 @@ public class SiegeScheduleDate private final int _day; private final int _hour; private final int _maxConcurrent; + private final boolean _siegeEnabled; public SiegeScheduleDate(StatSet set) { _day = set.getInt("day", Calendar.SUNDAY); _hour = set.getInt("hour", 16); _maxConcurrent = set.getInt("maxConcurrent", 5); + _siegeEnabled = set.getBoolean("siegeEnabled", false); } public int getDay() @@ -48,4 +50,9 @@ public class SiegeScheduleDate { return _maxConcurrent; } + + public boolean siegeEnabled() + { + return _siegeEnabled; + } } diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/entity/Siege.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/entity/Siege.java index 9b219c3a52..5892ecaa91 100644 --- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/entity/Siege.java +++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/entity/Siege.java @@ -1426,35 +1426,42 @@ public class Siege implements Siegable /** Set the date for the next siege. */ private void setNextSiegeDate() { - final Calendar cal = _castle.getSiegeDate(); - if (cal.getTimeInMillis() < System.currentTimeMillis()) + final SiegeScheduleDate holder = SiegeScheduleData.getInstance().getScheduleDateForCastleId(_castle.getResidenceId()); + if (!holder.siegeEnabled()) { - cal.setTimeInMillis(System.currentTimeMillis()); + return; } - for (SiegeScheduleDate holder : SiegeScheduleData.getInstance().getScheduleDates()) + final Calendar calendar = _castle.getSiegeDate(); + if (calendar.getTimeInMillis() < System.currentTimeMillis()) { - cal.set(Calendar.DAY_OF_WEEK, holder.getDay()); - cal.set(Calendar.HOUR_OF_DAY, holder.getHour()); - cal.set(Calendar.MINUTE, 0); - cal.set(Calendar.SECOND, 0); - if (cal.before(Calendar.getInstance())) - { - cal.add(Calendar.WEEK_OF_YEAR, 2); - } + calendar.setTimeInMillis(System.currentTimeMillis()); + } + + calendar.set(Calendar.DAY_OF_WEEK, holder.getDay()); + calendar.set(Calendar.HOUR_OF_DAY, holder.getHour()); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + + if (calendar.before(Calendar.getInstance())) + { + calendar.add(Calendar.WEEK_OF_YEAR, 2); + } + + if (CastleManager.getInstance().getSiegeDates(calendar.getTimeInMillis()) < holder.getMaxConcurrent()) + { + CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), calendar.getTimeInMillis()); - if (CastleManager.getInstance().getSiegeDates(cal.getTimeInMillis()) < holder.getMaxConcurrent()) - { - CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), cal.getTimeInMillis()); - break; - } + Broadcast.toAllOnlinePlayers(new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME).addCastleId(_castle.getResidenceId())); + + // Allow registration for next siege + _isRegistrationOver = false; + } + else + { + // Deny registration for next siege + _isRegistrationOver = true; } - - final SystemMessage sm = new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME); - sm.addCastleId(_castle.getResidenceId()); - Broadcast.toAllOnlinePlayers(sm); - - _isRegistrationOver = false; // Allow registration for next siege } /** diff --git a/L2J_Mobius_2.5_Underground/dist/game/config/SiegeSchedule.xml b/L2J_Mobius_2.5_Underground/dist/game/config/SiegeSchedule.xml index a4c5284fff..9de3eb0772 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/config/SiegeSchedule.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/config/SiegeSchedule.xml @@ -1,5 +1,12 @@ - - + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/xsd/SiegeSchedule.xsd b/L2J_Mobius_2.5_Underground/dist/game/data/xsd/SiegeSchedule.xsd index da2cb0a799..3a3cb7072c 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/xsd/SiegeSchedule.xsd +++ b/L2J_Mobius_2.5_Underground/dist/game/data/xsd/SiegeSchedule.xsd @@ -5,6 +5,9 @@ + + + diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java index 0d5c2a8d25..9e5c54a54b 100644 --- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java +++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java @@ -17,9 +17,9 @@ package org.l2jmobius.gameserver.data.xml.impl; import java.io.File; -import java.util.ArrayList; import java.util.Calendar; -import java.util.List; +import java.util.HashMap; +import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; @@ -39,7 +39,7 @@ public class SiegeScheduleData implements IXmlReader { private static final Logger LOGGER = Logger.getLogger(SiegeScheduleData.class.getName()); - private final List _scheduleData = new ArrayList<>(); + private final Map _scheduleData = new HashMap<>(); protected SiegeScheduleData() { @@ -49,14 +49,8 @@ public class SiegeScheduleData implements IXmlReader @Override public synchronized void load() { - _scheduleData.clear(); parseDatapackFile("config/SiegeSchedule.xml"); LOGGER.info(getClass().getSimpleName() + ": Loaded " + _scheduleData.size() + " siege schedulers."); - if (_scheduleData.isEmpty()) - { - _scheduleData.add(new SiegeScheduleDate(new StatSet())); - LOGGER.info(getClass().getSimpleName() + ": Emergency loaded " + _scheduleData.size() + " default siege schedulers."); - } } @Override @@ -85,7 +79,7 @@ public class SiegeScheduleData implements IXmlReader } set.set(key, val); } - _scheduleData.add(new SiegeScheduleDate(set)); + _scheduleData.put(set.getInt("castleId"), new SiegeScheduleDate(set)); break; } } @@ -107,9 +101,9 @@ public class SiegeScheduleData implements IXmlReader } } - public List getScheduleDates() + public SiegeScheduleDate getScheduleDateForCastleId(int castleId) { - return _scheduleData; + return _scheduleData.get(castleId); } public static SiegeScheduleData getInstance() diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java index d854355fb0..fb560f02c9 100644 --- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java +++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java @@ -26,12 +26,14 @@ public class SiegeScheduleDate private final int _day; private final int _hour; private final int _maxConcurrent; + private final boolean _siegeEnabled; public SiegeScheduleDate(StatSet set) { _day = set.getInt("day", Calendar.SUNDAY); _hour = set.getInt("hour", 16); _maxConcurrent = set.getInt("maxConcurrent", 5); + _siegeEnabled = set.getBoolean("siegeEnabled", false); } public int getDay() @@ -48,4 +50,9 @@ public class SiegeScheduleDate { return _maxConcurrent; } + + public boolean siegeEnabled() + { + return _siegeEnabled; + } } diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/entity/Siege.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/entity/Siege.java index 6d540a2f35..c37ebe2154 100644 --- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/entity/Siege.java +++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/entity/Siege.java @@ -1426,35 +1426,42 @@ public class Siege implements Siegable /** Set the date for the next siege. */ private void setNextSiegeDate() { - final Calendar cal = _castle.getSiegeDate(); - if (cal.getTimeInMillis() < System.currentTimeMillis()) + final SiegeScheduleDate holder = SiegeScheduleData.getInstance().getScheduleDateForCastleId(_castle.getResidenceId()); + if (!holder.siegeEnabled()) { - cal.setTimeInMillis(System.currentTimeMillis()); + return; } - for (SiegeScheduleDate holder : SiegeScheduleData.getInstance().getScheduleDates()) + final Calendar calendar = _castle.getSiegeDate(); + if (calendar.getTimeInMillis() < System.currentTimeMillis()) { - cal.set(Calendar.DAY_OF_WEEK, holder.getDay()); - cal.set(Calendar.HOUR_OF_DAY, holder.getHour()); - cal.set(Calendar.MINUTE, 0); - cal.set(Calendar.SECOND, 0); - if (cal.before(Calendar.getInstance())) - { - cal.add(Calendar.WEEK_OF_YEAR, 2); - } + calendar.setTimeInMillis(System.currentTimeMillis()); + } + + calendar.set(Calendar.DAY_OF_WEEK, holder.getDay()); + calendar.set(Calendar.HOUR_OF_DAY, holder.getHour()); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + + if (calendar.before(Calendar.getInstance())) + { + calendar.add(Calendar.WEEK_OF_YEAR, 2); + } + + if (CastleManager.getInstance().getSiegeDates(calendar.getTimeInMillis()) < holder.getMaxConcurrent()) + { + CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), calendar.getTimeInMillis()); - if (CastleManager.getInstance().getSiegeDates(cal.getTimeInMillis()) < holder.getMaxConcurrent()) - { - CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), cal.getTimeInMillis()); - break; - } + Broadcast.toAllOnlinePlayers(new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME).addCastleId(_castle.getResidenceId())); + + // Allow registration for next siege + _isRegistrationOver = false; + } + else + { + // Deny registration for next siege + _isRegistrationOver = true; } - - final SystemMessage sm = new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME); - sm.addCastleId(_castle.getResidenceId()); - Broadcast.toAllOnlinePlayers(sm); - - _isRegistrationOver = false; // Allow registration for next siege } /** diff --git a/L2J_Mobius_3.0_Helios/dist/game/config/SiegeSchedule.xml b/L2J_Mobius_3.0_Helios/dist/game/config/SiegeSchedule.xml index a4c5284fff..9de3eb0772 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/config/SiegeSchedule.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/config/SiegeSchedule.xml @@ -1,5 +1,12 @@ - - + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/xsd/SiegeSchedule.xsd b/L2J_Mobius_3.0_Helios/dist/game/data/xsd/SiegeSchedule.xsd index da2cb0a799..3a3cb7072c 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/xsd/SiegeSchedule.xsd +++ b/L2J_Mobius_3.0_Helios/dist/game/data/xsd/SiegeSchedule.xsd @@ -5,6 +5,9 @@ + + + diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java index 0d5c2a8d25..9e5c54a54b 100644 --- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java +++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java @@ -17,9 +17,9 @@ package org.l2jmobius.gameserver.data.xml.impl; import java.io.File; -import java.util.ArrayList; import java.util.Calendar; -import java.util.List; +import java.util.HashMap; +import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; @@ -39,7 +39,7 @@ public class SiegeScheduleData implements IXmlReader { private static final Logger LOGGER = Logger.getLogger(SiegeScheduleData.class.getName()); - private final List _scheduleData = new ArrayList<>(); + private final Map _scheduleData = new HashMap<>(); protected SiegeScheduleData() { @@ -49,14 +49,8 @@ public class SiegeScheduleData implements IXmlReader @Override public synchronized void load() { - _scheduleData.clear(); parseDatapackFile("config/SiegeSchedule.xml"); LOGGER.info(getClass().getSimpleName() + ": Loaded " + _scheduleData.size() + " siege schedulers."); - if (_scheduleData.isEmpty()) - { - _scheduleData.add(new SiegeScheduleDate(new StatSet())); - LOGGER.info(getClass().getSimpleName() + ": Emergency loaded " + _scheduleData.size() + " default siege schedulers."); - } } @Override @@ -85,7 +79,7 @@ public class SiegeScheduleData implements IXmlReader } set.set(key, val); } - _scheduleData.add(new SiegeScheduleDate(set)); + _scheduleData.put(set.getInt("castleId"), new SiegeScheduleDate(set)); break; } } @@ -107,9 +101,9 @@ public class SiegeScheduleData implements IXmlReader } } - public List getScheduleDates() + public SiegeScheduleDate getScheduleDateForCastleId(int castleId) { - return _scheduleData; + return _scheduleData.get(castleId); } public static SiegeScheduleData getInstance() diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java index d854355fb0..fb560f02c9 100644 --- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java +++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java @@ -26,12 +26,14 @@ public class SiegeScheduleDate private final int _day; private final int _hour; private final int _maxConcurrent; + private final boolean _siegeEnabled; public SiegeScheduleDate(StatSet set) { _day = set.getInt("day", Calendar.SUNDAY); _hour = set.getInt("hour", 16); _maxConcurrent = set.getInt("maxConcurrent", 5); + _siegeEnabled = set.getBoolean("siegeEnabled", false); } public int getDay() @@ -48,4 +50,9 @@ public class SiegeScheduleDate { return _maxConcurrent; } + + public boolean siegeEnabled() + { + return _siegeEnabled; + } } diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/entity/Siege.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/entity/Siege.java index 6d540a2f35..c37ebe2154 100644 --- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/entity/Siege.java +++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/entity/Siege.java @@ -1426,35 +1426,42 @@ public class Siege implements Siegable /** Set the date for the next siege. */ private void setNextSiegeDate() { - final Calendar cal = _castle.getSiegeDate(); - if (cal.getTimeInMillis() < System.currentTimeMillis()) + final SiegeScheduleDate holder = SiegeScheduleData.getInstance().getScheduleDateForCastleId(_castle.getResidenceId()); + if (!holder.siegeEnabled()) { - cal.setTimeInMillis(System.currentTimeMillis()); + return; } - for (SiegeScheduleDate holder : SiegeScheduleData.getInstance().getScheduleDates()) + final Calendar calendar = _castle.getSiegeDate(); + if (calendar.getTimeInMillis() < System.currentTimeMillis()) { - cal.set(Calendar.DAY_OF_WEEK, holder.getDay()); - cal.set(Calendar.HOUR_OF_DAY, holder.getHour()); - cal.set(Calendar.MINUTE, 0); - cal.set(Calendar.SECOND, 0); - if (cal.before(Calendar.getInstance())) - { - cal.add(Calendar.WEEK_OF_YEAR, 2); - } + calendar.setTimeInMillis(System.currentTimeMillis()); + } + + calendar.set(Calendar.DAY_OF_WEEK, holder.getDay()); + calendar.set(Calendar.HOUR_OF_DAY, holder.getHour()); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + + if (calendar.before(Calendar.getInstance())) + { + calendar.add(Calendar.WEEK_OF_YEAR, 2); + } + + if (CastleManager.getInstance().getSiegeDates(calendar.getTimeInMillis()) < holder.getMaxConcurrent()) + { + CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), calendar.getTimeInMillis()); - if (CastleManager.getInstance().getSiegeDates(cal.getTimeInMillis()) < holder.getMaxConcurrent()) - { - CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), cal.getTimeInMillis()); - break; - } + Broadcast.toAllOnlinePlayers(new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME).addCastleId(_castle.getResidenceId())); + + // Allow registration for next siege + _isRegistrationOver = false; + } + else + { + // Deny registration for next siege + _isRegistrationOver = true; } - - final SystemMessage sm = new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME); - sm.addCastleId(_castle.getResidenceId()); - Broadcast.toAllOnlinePlayers(sm); - - _isRegistrationOver = false; // Allow registration for next siege } /** diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/config/SiegeSchedule.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/config/SiegeSchedule.xml index a4c5284fff..9de3eb0772 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/config/SiegeSchedule.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/config/SiegeSchedule.xml @@ -1,5 +1,12 @@ - - + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/xsd/SiegeSchedule.xsd b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/xsd/SiegeSchedule.xsd index da2cb0a799..3a3cb7072c 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/xsd/SiegeSchedule.xsd +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/xsd/SiegeSchedule.xsd @@ -5,6 +5,9 @@ + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java index 0d5c2a8d25..9e5c54a54b 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java @@ -17,9 +17,9 @@ package org.l2jmobius.gameserver.data.xml.impl; import java.io.File; -import java.util.ArrayList; import java.util.Calendar; -import java.util.List; +import java.util.HashMap; +import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; @@ -39,7 +39,7 @@ public class SiegeScheduleData implements IXmlReader { private static final Logger LOGGER = Logger.getLogger(SiegeScheduleData.class.getName()); - private final List _scheduleData = new ArrayList<>(); + private final Map _scheduleData = new HashMap<>(); protected SiegeScheduleData() { @@ -49,14 +49,8 @@ public class SiegeScheduleData implements IXmlReader @Override public synchronized void load() { - _scheduleData.clear(); parseDatapackFile("config/SiegeSchedule.xml"); LOGGER.info(getClass().getSimpleName() + ": Loaded " + _scheduleData.size() + " siege schedulers."); - if (_scheduleData.isEmpty()) - { - _scheduleData.add(new SiegeScheduleDate(new StatSet())); - LOGGER.info(getClass().getSimpleName() + ": Emergency loaded " + _scheduleData.size() + " default siege schedulers."); - } } @Override @@ -85,7 +79,7 @@ public class SiegeScheduleData implements IXmlReader } set.set(key, val); } - _scheduleData.add(new SiegeScheduleDate(set)); + _scheduleData.put(set.getInt("castleId"), new SiegeScheduleDate(set)); break; } } @@ -107,9 +101,9 @@ public class SiegeScheduleData implements IXmlReader } } - public List getScheduleDates() + public SiegeScheduleDate getScheduleDateForCastleId(int castleId) { - return _scheduleData; + return _scheduleData.get(castleId); } public static SiegeScheduleData getInstance() diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java index d854355fb0..fb560f02c9 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java @@ -26,12 +26,14 @@ public class SiegeScheduleDate private final int _day; private final int _hour; private final int _maxConcurrent; + private final boolean _siegeEnabled; public SiegeScheduleDate(StatSet set) { _day = set.getInt("day", Calendar.SUNDAY); _hour = set.getInt("hour", 16); _maxConcurrent = set.getInt("maxConcurrent", 5); + _siegeEnabled = set.getBoolean("siegeEnabled", false); } public int getDay() @@ -48,4 +50,9 @@ public class SiegeScheduleDate { return _maxConcurrent; } + + public boolean siegeEnabled() + { + return _siegeEnabled; + } } diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/entity/Siege.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/entity/Siege.java index 6d540a2f35..c37ebe2154 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/entity/Siege.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/entity/Siege.java @@ -1426,35 +1426,42 @@ public class Siege implements Siegable /** Set the date for the next siege. */ private void setNextSiegeDate() { - final Calendar cal = _castle.getSiegeDate(); - if (cal.getTimeInMillis() < System.currentTimeMillis()) + final SiegeScheduleDate holder = SiegeScheduleData.getInstance().getScheduleDateForCastleId(_castle.getResidenceId()); + if (!holder.siegeEnabled()) { - cal.setTimeInMillis(System.currentTimeMillis()); + return; } - for (SiegeScheduleDate holder : SiegeScheduleData.getInstance().getScheduleDates()) + final Calendar calendar = _castle.getSiegeDate(); + if (calendar.getTimeInMillis() < System.currentTimeMillis()) { - cal.set(Calendar.DAY_OF_WEEK, holder.getDay()); - cal.set(Calendar.HOUR_OF_DAY, holder.getHour()); - cal.set(Calendar.MINUTE, 0); - cal.set(Calendar.SECOND, 0); - if (cal.before(Calendar.getInstance())) - { - cal.add(Calendar.WEEK_OF_YEAR, 2); - } + calendar.setTimeInMillis(System.currentTimeMillis()); + } + + calendar.set(Calendar.DAY_OF_WEEK, holder.getDay()); + calendar.set(Calendar.HOUR_OF_DAY, holder.getHour()); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + + if (calendar.before(Calendar.getInstance())) + { + calendar.add(Calendar.WEEK_OF_YEAR, 2); + } + + if (CastleManager.getInstance().getSiegeDates(calendar.getTimeInMillis()) < holder.getMaxConcurrent()) + { + CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), calendar.getTimeInMillis()); - if (CastleManager.getInstance().getSiegeDates(cal.getTimeInMillis()) < holder.getMaxConcurrent()) - { - CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), cal.getTimeInMillis()); - break; - } + Broadcast.toAllOnlinePlayers(new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME).addCastleId(_castle.getResidenceId())); + + // Allow registration for next siege + _isRegistrationOver = false; + } + else + { + // Deny registration for next siege + _isRegistrationOver = true; } - - final SystemMessage sm = new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME); - sm.addCastleId(_castle.getResidenceId()); - Broadcast.toAllOnlinePlayers(sm); - - _isRegistrationOver = false; // Allow registration for next siege } /** diff --git a/L2J_Mobius_5.0_Salvation/dist/game/config/SiegeSchedule.xml b/L2J_Mobius_5.0_Salvation/dist/game/config/SiegeSchedule.xml index a4c5284fff..9de3eb0772 100644 --- a/L2J_Mobius_5.0_Salvation/dist/game/config/SiegeSchedule.xml +++ b/L2J_Mobius_5.0_Salvation/dist/game/config/SiegeSchedule.xml @@ -1,5 +1,12 @@ - - + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_5.0_Salvation/dist/game/data/xsd/SiegeSchedule.xsd b/L2J_Mobius_5.0_Salvation/dist/game/data/xsd/SiegeSchedule.xsd index da2cb0a799..3a3cb7072c 100644 --- a/L2J_Mobius_5.0_Salvation/dist/game/data/xsd/SiegeSchedule.xsd +++ b/L2J_Mobius_5.0_Salvation/dist/game/data/xsd/SiegeSchedule.xsd @@ -5,6 +5,9 @@ + + + diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java index 0d5c2a8d25..9e5c54a54b 100644 --- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java +++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java @@ -17,9 +17,9 @@ package org.l2jmobius.gameserver.data.xml.impl; import java.io.File; -import java.util.ArrayList; import java.util.Calendar; -import java.util.List; +import java.util.HashMap; +import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; @@ -39,7 +39,7 @@ public class SiegeScheduleData implements IXmlReader { private static final Logger LOGGER = Logger.getLogger(SiegeScheduleData.class.getName()); - private final List _scheduleData = new ArrayList<>(); + private final Map _scheduleData = new HashMap<>(); protected SiegeScheduleData() { @@ -49,14 +49,8 @@ public class SiegeScheduleData implements IXmlReader @Override public synchronized void load() { - _scheduleData.clear(); parseDatapackFile("config/SiegeSchedule.xml"); LOGGER.info(getClass().getSimpleName() + ": Loaded " + _scheduleData.size() + " siege schedulers."); - if (_scheduleData.isEmpty()) - { - _scheduleData.add(new SiegeScheduleDate(new StatSet())); - LOGGER.info(getClass().getSimpleName() + ": Emergency loaded " + _scheduleData.size() + " default siege schedulers."); - } } @Override @@ -85,7 +79,7 @@ public class SiegeScheduleData implements IXmlReader } set.set(key, val); } - _scheduleData.add(new SiegeScheduleDate(set)); + _scheduleData.put(set.getInt("castleId"), new SiegeScheduleDate(set)); break; } } @@ -107,9 +101,9 @@ public class SiegeScheduleData implements IXmlReader } } - public List getScheduleDates() + public SiegeScheduleDate getScheduleDateForCastleId(int castleId) { - return _scheduleData; + return _scheduleData.get(castleId); } public static SiegeScheduleData getInstance() diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java index d854355fb0..fb560f02c9 100644 --- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java +++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java @@ -26,12 +26,14 @@ public class SiegeScheduleDate private final int _day; private final int _hour; private final int _maxConcurrent; + private final boolean _siegeEnabled; public SiegeScheduleDate(StatSet set) { _day = set.getInt("day", Calendar.SUNDAY); _hour = set.getInt("hour", 16); _maxConcurrent = set.getInt("maxConcurrent", 5); + _siegeEnabled = set.getBoolean("siegeEnabled", false); } public int getDay() @@ -48,4 +50,9 @@ public class SiegeScheduleDate { return _maxConcurrent; } + + public boolean siegeEnabled() + { + return _siegeEnabled; + } } diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/entity/Siege.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/entity/Siege.java index e30fae9052..866d3b4305 100644 --- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/entity/Siege.java +++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/entity/Siege.java @@ -1426,35 +1426,42 @@ public class Siege implements Siegable /** Set the date for the next siege. */ private void setNextSiegeDate() { - final Calendar cal = _castle.getSiegeDate(); - if (cal.getTimeInMillis() < System.currentTimeMillis()) + final SiegeScheduleDate holder = SiegeScheduleData.getInstance().getScheduleDateForCastleId(_castle.getResidenceId()); + if (!holder.siegeEnabled()) { - cal.setTimeInMillis(System.currentTimeMillis()); + return; } - for (SiegeScheduleDate holder : SiegeScheduleData.getInstance().getScheduleDates()) + final Calendar calendar = _castle.getSiegeDate(); + if (calendar.getTimeInMillis() < System.currentTimeMillis()) { - cal.set(Calendar.DAY_OF_WEEK, holder.getDay()); - cal.set(Calendar.HOUR_OF_DAY, holder.getHour()); - cal.set(Calendar.MINUTE, 0); - cal.set(Calendar.SECOND, 0); - if (cal.before(Calendar.getInstance())) - { - cal.add(Calendar.WEEK_OF_YEAR, 2); - } + calendar.setTimeInMillis(System.currentTimeMillis()); + } + + calendar.set(Calendar.DAY_OF_WEEK, holder.getDay()); + calendar.set(Calendar.HOUR_OF_DAY, holder.getHour()); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + + if (calendar.before(Calendar.getInstance())) + { + calendar.add(Calendar.WEEK_OF_YEAR, 2); + } + + if (CastleManager.getInstance().getSiegeDates(calendar.getTimeInMillis()) < holder.getMaxConcurrent()) + { + CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), calendar.getTimeInMillis()); - if (CastleManager.getInstance().getSiegeDates(cal.getTimeInMillis()) < holder.getMaxConcurrent()) - { - CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), cal.getTimeInMillis()); - break; - } + Broadcast.toAllOnlinePlayers(new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME).addCastleId(_castle.getResidenceId())); + + // Allow registration for next siege + _isRegistrationOver = false; + } + else + { + // Deny registration for next siege + _isRegistrationOver = true; } - - final SystemMessage sm = new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME); - sm.addCastleId(_castle.getResidenceId()); - Broadcast.toAllOnlinePlayers(sm); - - _isRegistrationOver = false; // Allow registration for next siege } /** diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/config/SiegeSchedule.xml b/L2J_Mobius_5.5_EtinasFate/dist/game/config/SiegeSchedule.xml index a4c5284fff..9de3eb0772 100644 --- a/L2J_Mobius_5.5_EtinasFate/dist/game/config/SiegeSchedule.xml +++ b/L2J_Mobius_5.5_EtinasFate/dist/game/config/SiegeSchedule.xml @@ -1,5 +1,12 @@ - - + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/data/xsd/SiegeSchedule.xsd b/L2J_Mobius_5.5_EtinasFate/dist/game/data/xsd/SiegeSchedule.xsd index da2cb0a799..3a3cb7072c 100644 --- a/L2J_Mobius_5.5_EtinasFate/dist/game/data/xsd/SiegeSchedule.xsd +++ b/L2J_Mobius_5.5_EtinasFate/dist/game/data/xsd/SiegeSchedule.xsd @@ -5,6 +5,9 @@ + + + diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java index 0d5c2a8d25..9e5c54a54b 100644 --- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java +++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java @@ -17,9 +17,9 @@ package org.l2jmobius.gameserver.data.xml.impl; import java.io.File; -import java.util.ArrayList; import java.util.Calendar; -import java.util.List; +import java.util.HashMap; +import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; @@ -39,7 +39,7 @@ public class SiegeScheduleData implements IXmlReader { private static final Logger LOGGER = Logger.getLogger(SiegeScheduleData.class.getName()); - private final List _scheduleData = new ArrayList<>(); + private final Map _scheduleData = new HashMap<>(); protected SiegeScheduleData() { @@ -49,14 +49,8 @@ public class SiegeScheduleData implements IXmlReader @Override public synchronized void load() { - _scheduleData.clear(); parseDatapackFile("config/SiegeSchedule.xml"); LOGGER.info(getClass().getSimpleName() + ": Loaded " + _scheduleData.size() + " siege schedulers."); - if (_scheduleData.isEmpty()) - { - _scheduleData.add(new SiegeScheduleDate(new StatSet())); - LOGGER.info(getClass().getSimpleName() + ": Emergency loaded " + _scheduleData.size() + " default siege schedulers."); - } } @Override @@ -85,7 +79,7 @@ public class SiegeScheduleData implements IXmlReader } set.set(key, val); } - _scheduleData.add(new SiegeScheduleDate(set)); + _scheduleData.put(set.getInt("castleId"), new SiegeScheduleDate(set)); break; } } @@ -107,9 +101,9 @@ public class SiegeScheduleData implements IXmlReader } } - public List getScheduleDates() + public SiegeScheduleDate getScheduleDateForCastleId(int castleId) { - return _scheduleData; + return _scheduleData.get(castleId); } public static SiegeScheduleData getInstance() diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java index d854355fb0..fb560f02c9 100644 --- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java +++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java @@ -26,12 +26,14 @@ public class SiegeScheduleDate private final int _day; private final int _hour; private final int _maxConcurrent; + private final boolean _siegeEnabled; public SiegeScheduleDate(StatSet set) { _day = set.getInt("day", Calendar.SUNDAY); _hour = set.getInt("hour", 16); _maxConcurrent = set.getInt("maxConcurrent", 5); + _siegeEnabled = set.getBoolean("siegeEnabled", false); } public int getDay() @@ -48,4 +50,9 @@ public class SiegeScheduleDate { return _maxConcurrent; } + + public boolean siegeEnabled() + { + return _siegeEnabled; + } } diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/entity/Siege.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/entity/Siege.java index b97172806e..4287c3d04c 100644 --- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/entity/Siege.java +++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/entity/Siege.java @@ -1426,35 +1426,42 @@ public class Siege implements Siegable /** Set the date for the next siege. */ private void setNextSiegeDate() { - final Calendar cal = _castle.getSiegeDate(); - if (cal.getTimeInMillis() < System.currentTimeMillis()) + final SiegeScheduleDate holder = SiegeScheduleData.getInstance().getScheduleDateForCastleId(_castle.getResidenceId()); + if (!holder.siegeEnabled()) { - cal.setTimeInMillis(System.currentTimeMillis()); + return; } - for (SiegeScheduleDate holder : SiegeScheduleData.getInstance().getScheduleDates()) + final Calendar calendar = _castle.getSiegeDate(); + if (calendar.getTimeInMillis() < System.currentTimeMillis()) { - cal.set(Calendar.DAY_OF_WEEK, holder.getDay()); - cal.set(Calendar.HOUR_OF_DAY, holder.getHour()); - cal.set(Calendar.MINUTE, 0); - cal.set(Calendar.SECOND, 0); - if (cal.before(Calendar.getInstance())) - { - cal.add(Calendar.WEEK_OF_YEAR, 2); - } + calendar.setTimeInMillis(System.currentTimeMillis()); + } + + calendar.set(Calendar.DAY_OF_WEEK, holder.getDay()); + calendar.set(Calendar.HOUR_OF_DAY, holder.getHour()); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + + if (calendar.before(Calendar.getInstance())) + { + calendar.add(Calendar.WEEK_OF_YEAR, 2); + } + + if (CastleManager.getInstance().getSiegeDates(calendar.getTimeInMillis()) < holder.getMaxConcurrent()) + { + CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), calendar.getTimeInMillis()); - if (CastleManager.getInstance().getSiegeDates(cal.getTimeInMillis()) < holder.getMaxConcurrent()) - { - CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), cal.getTimeInMillis()); - break; - } + Broadcast.toAllOnlinePlayers(new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME).addCastleId(_castle.getResidenceId())); + + // Allow registration for next siege + _isRegistrationOver = false; + } + else + { + // Deny registration for next siege + _isRegistrationOver = true; } - - final SystemMessage sm = new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME); - sm.addCastleId(_castle.getResidenceId()); - Broadcast.toAllOnlinePlayers(sm); - - _isRegistrationOver = false; // Allow registration for next siege } /** diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/config/SiegeSchedule.xml b/L2J_Mobius_6.0_Fafurion/dist/game/config/SiegeSchedule.xml index a4c5284fff..9de3eb0772 100644 --- a/L2J_Mobius_6.0_Fafurion/dist/game/config/SiegeSchedule.xml +++ b/L2J_Mobius_6.0_Fafurion/dist/game/config/SiegeSchedule.xml @@ -1,5 +1,12 @@ - - + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/xsd/SiegeSchedule.xsd b/L2J_Mobius_6.0_Fafurion/dist/game/data/xsd/SiegeSchedule.xsd index da2cb0a799..3a3cb7072c 100644 --- a/L2J_Mobius_6.0_Fafurion/dist/game/data/xsd/SiegeSchedule.xsd +++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/xsd/SiegeSchedule.xsd @@ -5,6 +5,9 @@ + + + diff --git a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java index 0d5c2a8d25..9e5c54a54b 100644 --- a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java +++ b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java @@ -17,9 +17,9 @@ package org.l2jmobius.gameserver.data.xml.impl; import java.io.File; -import java.util.ArrayList; import java.util.Calendar; -import java.util.List; +import java.util.HashMap; +import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; @@ -39,7 +39,7 @@ public class SiegeScheduleData implements IXmlReader { private static final Logger LOGGER = Logger.getLogger(SiegeScheduleData.class.getName()); - private final List _scheduleData = new ArrayList<>(); + private final Map _scheduleData = new HashMap<>(); protected SiegeScheduleData() { @@ -49,14 +49,8 @@ public class SiegeScheduleData implements IXmlReader @Override public synchronized void load() { - _scheduleData.clear(); parseDatapackFile("config/SiegeSchedule.xml"); LOGGER.info(getClass().getSimpleName() + ": Loaded " + _scheduleData.size() + " siege schedulers."); - if (_scheduleData.isEmpty()) - { - _scheduleData.add(new SiegeScheduleDate(new StatSet())); - LOGGER.info(getClass().getSimpleName() + ": Emergency loaded " + _scheduleData.size() + " default siege schedulers."); - } } @Override @@ -85,7 +79,7 @@ public class SiegeScheduleData implements IXmlReader } set.set(key, val); } - _scheduleData.add(new SiegeScheduleDate(set)); + _scheduleData.put(set.getInt("castleId"), new SiegeScheduleDate(set)); break; } } @@ -107,9 +101,9 @@ public class SiegeScheduleData implements IXmlReader } } - public List getScheduleDates() + public SiegeScheduleDate getScheduleDateForCastleId(int castleId) { - return _scheduleData; + return _scheduleData.get(castleId); } public static SiegeScheduleData getInstance() diff --git a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java index d854355fb0..fb560f02c9 100644 --- a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java +++ b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java @@ -26,12 +26,14 @@ public class SiegeScheduleDate private final int _day; private final int _hour; private final int _maxConcurrent; + private final boolean _siegeEnabled; public SiegeScheduleDate(StatSet set) { _day = set.getInt("day", Calendar.SUNDAY); _hour = set.getInt("hour", 16); _maxConcurrent = set.getInt("maxConcurrent", 5); + _siegeEnabled = set.getBoolean("siegeEnabled", false); } public int getDay() @@ -48,4 +50,9 @@ public class SiegeScheduleDate { return _maxConcurrent; } + + public boolean siegeEnabled() + { + return _siegeEnabled; + } } diff --git a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/entity/Siege.java b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/entity/Siege.java index b97172806e..4287c3d04c 100644 --- a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/entity/Siege.java +++ b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/entity/Siege.java @@ -1426,35 +1426,42 @@ public class Siege implements Siegable /** Set the date for the next siege. */ private void setNextSiegeDate() { - final Calendar cal = _castle.getSiegeDate(); - if (cal.getTimeInMillis() < System.currentTimeMillis()) + final SiegeScheduleDate holder = SiegeScheduleData.getInstance().getScheduleDateForCastleId(_castle.getResidenceId()); + if (!holder.siegeEnabled()) { - cal.setTimeInMillis(System.currentTimeMillis()); + return; } - for (SiegeScheduleDate holder : SiegeScheduleData.getInstance().getScheduleDates()) + final Calendar calendar = _castle.getSiegeDate(); + if (calendar.getTimeInMillis() < System.currentTimeMillis()) { - cal.set(Calendar.DAY_OF_WEEK, holder.getDay()); - cal.set(Calendar.HOUR_OF_DAY, holder.getHour()); - cal.set(Calendar.MINUTE, 0); - cal.set(Calendar.SECOND, 0); - if (cal.before(Calendar.getInstance())) - { - cal.add(Calendar.WEEK_OF_YEAR, 2); - } + calendar.setTimeInMillis(System.currentTimeMillis()); + } + + calendar.set(Calendar.DAY_OF_WEEK, holder.getDay()); + calendar.set(Calendar.HOUR_OF_DAY, holder.getHour()); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + + if (calendar.before(Calendar.getInstance())) + { + calendar.add(Calendar.WEEK_OF_YEAR, 2); + } + + if (CastleManager.getInstance().getSiegeDates(calendar.getTimeInMillis()) < holder.getMaxConcurrent()) + { + CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), calendar.getTimeInMillis()); - if (CastleManager.getInstance().getSiegeDates(cal.getTimeInMillis()) < holder.getMaxConcurrent()) - { - CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), cal.getTimeInMillis()); - break; - } + Broadcast.toAllOnlinePlayers(new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME).addCastleId(_castle.getResidenceId())); + + // Allow registration for next siege + _isRegistrationOver = false; + } + else + { + // Deny registration for next siege + _isRegistrationOver = true; } - - final SystemMessage sm = new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME); - sm.addCastleId(_castle.getResidenceId()); - Broadcast.toAllOnlinePlayers(sm); - - _isRegistrationOver = false; // Allow registration for next siege } /** diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/config/SiegeSchedule.xml b/L2J_Mobius_7.0_PreludeOfWar/dist/game/config/SiegeSchedule.xml index a4c5284fff..9de3eb0772 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/config/SiegeSchedule.xml +++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/config/SiegeSchedule.xml @@ -1,5 +1,12 @@ - - + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/xsd/SiegeSchedule.xsd b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/xsd/SiegeSchedule.xsd index da2cb0a799..3a3cb7072c 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/xsd/SiegeSchedule.xsd +++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/xsd/SiegeSchedule.xsd @@ -5,6 +5,9 @@ + + + diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java index 0d5c2a8d25..9e5c54a54b 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java @@ -17,9 +17,9 @@ package org.l2jmobius.gameserver.data.xml.impl; import java.io.File; -import java.util.ArrayList; import java.util.Calendar; -import java.util.List; +import java.util.HashMap; +import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; @@ -39,7 +39,7 @@ public class SiegeScheduleData implements IXmlReader { private static final Logger LOGGER = Logger.getLogger(SiegeScheduleData.class.getName()); - private final List _scheduleData = new ArrayList<>(); + private final Map _scheduleData = new HashMap<>(); protected SiegeScheduleData() { @@ -49,14 +49,8 @@ public class SiegeScheduleData implements IXmlReader @Override public synchronized void load() { - _scheduleData.clear(); parseDatapackFile("config/SiegeSchedule.xml"); LOGGER.info(getClass().getSimpleName() + ": Loaded " + _scheduleData.size() + " siege schedulers."); - if (_scheduleData.isEmpty()) - { - _scheduleData.add(new SiegeScheduleDate(new StatSet())); - LOGGER.info(getClass().getSimpleName() + ": Emergency loaded " + _scheduleData.size() + " default siege schedulers."); - } } @Override @@ -85,7 +79,7 @@ public class SiegeScheduleData implements IXmlReader } set.set(key, val); } - _scheduleData.add(new SiegeScheduleDate(set)); + _scheduleData.put(set.getInt("castleId"), new SiegeScheduleDate(set)); break; } } @@ -107,9 +101,9 @@ public class SiegeScheduleData implements IXmlReader } } - public List getScheduleDates() + public SiegeScheduleDate getScheduleDateForCastleId(int castleId) { - return _scheduleData; + return _scheduleData.get(castleId); } public static SiegeScheduleData getInstance() diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java index d854355fb0..fb560f02c9 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java @@ -26,12 +26,14 @@ public class SiegeScheduleDate private final int _day; private final int _hour; private final int _maxConcurrent; + private final boolean _siegeEnabled; public SiegeScheduleDate(StatSet set) { _day = set.getInt("day", Calendar.SUNDAY); _hour = set.getInt("hour", 16); _maxConcurrent = set.getInt("maxConcurrent", 5); + _siegeEnabled = set.getBoolean("siegeEnabled", false); } public int getDay() @@ -48,4 +50,9 @@ public class SiegeScheduleDate { return _maxConcurrent; } + + public boolean siegeEnabled() + { + return _siegeEnabled; + } } diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/entity/Siege.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/entity/Siege.java index b97172806e..4287c3d04c 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/entity/Siege.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/entity/Siege.java @@ -1426,35 +1426,42 @@ public class Siege implements Siegable /** Set the date for the next siege. */ private void setNextSiegeDate() { - final Calendar cal = _castle.getSiegeDate(); - if (cal.getTimeInMillis() < System.currentTimeMillis()) + final SiegeScheduleDate holder = SiegeScheduleData.getInstance().getScheduleDateForCastleId(_castle.getResidenceId()); + if (!holder.siegeEnabled()) { - cal.setTimeInMillis(System.currentTimeMillis()); + return; } - for (SiegeScheduleDate holder : SiegeScheduleData.getInstance().getScheduleDates()) + final Calendar calendar = _castle.getSiegeDate(); + if (calendar.getTimeInMillis() < System.currentTimeMillis()) { - cal.set(Calendar.DAY_OF_WEEK, holder.getDay()); - cal.set(Calendar.HOUR_OF_DAY, holder.getHour()); - cal.set(Calendar.MINUTE, 0); - cal.set(Calendar.SECOND, 0); - if (cal.before(Calendar.getInstance())) - { - cal.add(Calendar.WEEK_OF_YEAR, 2); - } + calendar.setTimeInMillis(System.currentTimeMillis()); + } + + calendar.set(Calendar.DAY_OF_WEEK, holder.getDay()); + calendar.set(Calendar.HOUR_OF_DAY, holder.getHour()); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + + if (calendar.before(Calendar.getInstance())) + { + calendar.add(Calendar.WEEK_OF_YEAR, 2); + } + + if (CastleManager.getInstance().getSiegeDates(calendar.getTimeInMillis()) < holder.getMaxConcurrent()) + { + CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), calendar.getTimeInMillis()); - if (CastleManager.getInstance().getSiegeDates(cal.getTimeInMillis()) < holder.getMaxConcurrent()) - { - CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), cal.getTimeInMillis()); - break; - } + Broadcast.toAllOnlinePlayers(new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME).addCastleId(_castle.getResidenceId())); + + // Allow registration for next siege + _isRegistrationOver = false; + } + else + { + // Deny registration for next siege + _isRegistrationOver = true; } - - final SystemMessage sm = new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME); - sm.addCastleId(_castle.getResidenceId()); - Broadcast.toAllOnlinePlayers(sm); - - _isRegistrationOver = false; // Allow registration for next siege } /** diff --git a/L2J_Mobius_CT_2.4_Epilogue/dist/game/config/SiegeSchedule.xml b/L2J_Mobius_CT_2.4_Epilogue/dist/game/config/SiegeSchedule.xml index a4c5284fff..9de3eb0772 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/dist/game/config/SiegeSchedule.xml +++ b/L2J_Mobius_CT_2.4_Epilogue/dist/game/config/SiegeSchedule.xml @@ -1,5 +1,12 @@ - - + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/xsd/SiegeSchedule.xsd b/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/xsd/SiegeSchedule.xsd index 484c1e00d1..36f7da1370 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/xsd/SiegeSchedule.xsd +++ b/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/xsd/SiegeSchedule.xsd @@ -5,6 +5,9 @@ + + + diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java index d06b0ad061..9e5c54a54b 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java @@ -17,10 +17,11 @@ package org.l2jmobius.gameserver.data.xml.impl; import java.io.File; -import java.util.ArrayList; import java.util.Calendar; -import java.util.List; +import java.util.HashMap; +import java.util.Map; import java.util.logging.Level; +import java.util.logging.Logger; import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; @@ -36,7 +37,9 @@ import org.l2jmobius.gameserver.util.Util; */ public class SiegeScheduleData implements IXmlReader { - private final List _scheduleData = new ArrayList<>(); + private static final Logger LOGGER = Logger.getLogger(SiegeScheduleData.class.getName()); + + private final Map _scheduleData = new HashMap<>(); protected SiegeScheduleData() { @@ -46,14 +49,8 @@ public class SiegeScheduleData implements IXmlReader @Override public synchronized void load() { - _scheduleData.clear(); parseDatapackFile("config/SiegeSchedule.xml"); - LOGGER.log(Level.INFO, getClass().getSimpleName() + ": Loaded " + _scheduleData.size() + " siege schedulers."); - if (_scheduleData.isEmpty()) - { - _scheduleData.add(new SiegeScheduleDate(new StatSet())); - LOGGER.log(Level.INFO, getClass().getSimpleName() + ": Emergency Loaded: " + _scheduleData.size() + " default siege schedulers."); - } + LOGGER.info(getClass().getSimpleName() + ": Loaded " + _scheduleData.size() + " siege schedulers."); } @Override @@ -82,7 +79,7 @@ public class SiegeScheduleData implements IXmlReader } set.set(key, val); } - _scheduleData.add(new SiegeScheduleDate(set)); + _scheduleData.put(set.getInt("castleId"), new SiegeScheduleDate(set)); break; } } @@ -95,7 +92,7 @@ public class SiegeScheduleData implements IXmlReader { try { - return Calendar.class.getField(field).getInt(Calendar.class); + return Calendar.class.getField(field).getInt(Calendar.class.getName()); } catch (Exception e) { @@ -104,9 +101,9 @@ public class SiegeScheduleData implements IXmlReader } } - public List getScheduleDates() + public SiegeScheduleDate getScheduleDateForCastleId(int castleId) { - return _scheduleData; + return _scheduleData.get(castleId); } public static SiegeScheduleData getInstance() diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java index d854355fb0..fb560f02c9 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java @@ -26,12 +26,14 @@ public class SiegeScheduleDate private final int _day; private final int _hour; private final int _maxConcurrent; + private final boolean _siegeEnabled; public SiegeScheduleDate(StatSet set) { _day = set.getInt("day", Calendar.SUNDAY); _hour = set.getInt("hour", 16); _maxConcurrent = set.getInt("maxConcurrent", 5); + _siegeEnabled = set.getBoolean("siegeEnabled", false); } public int getDay() @@ -48,4 +50,9 @@ public class SiegeScheduleDate { return _maxConcurrent; } + + public boolean siegeEnabled() + { + return _siegeEnabled; + } } diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/entity/Siege.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/entity/Siege.java index d69714a187..14a5e33261 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/entity/Siege.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/entity/Siege.java @@ -1405,35 +1405,42 @@ public class Siege implements Siegable /** Set the date for the next siege. */ private void setNextSiegeDate() { - final Calendar cal = getCastle().getSiegeDate(); - if (cal.getTimeInMillis() < System.currentTimeMillis()) + final SiegeScheduleDate holder = SiegeScheduleData.getInstance().getScheduleDateForCastleId(_castle.getResidenceId()); + if (!holder.siegeEnabled()) { - cal.setTimeInMillis(System.currentTimeMillis()); + return; } - for (SiegeScheduleDate holder : SiegeScheduleData.getInstance().getScheduleDates()) + final Calendar calendar = _castle.getSiegeDate(); + if (calendar.getTimeInMillis() < System.currentTimeMillis()) { - cal.set(Calendar.DAY_OF_WEEK, holder.getDay()); - cal.set(Calendar.HOUR_OF_DAY, holder.getHour()); - cal.set(Calendar.MINUTE, 0); - cal.set(Calendar.SECOND, 0); - if (cal.before(Calendar.getInstance())) - { - cal.add(Calendar.WEEK_OF_YEAR, 2); - } + calendar.setTimeInMillis(System.currentTimeMillis()); + } + + calendar.set(Calendar.DAY_OF_WEEK, holder.getDay()); + calendar.set(Calendar.HOUR_OF_DAY, holder.getHour()); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + + if (calendar.before(Calendar.getInstance())) + { + calendar.add(Calendar.WEEK_OF_YEAR, 2); + } + + if (CastleManager.getInstance().getSiegeDates(calendar.getTimeInMillis()) < holder.getMaxConcurrent()) + { + CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), calendar.getTimeInMillis()); - if (CastleManager.getInstance().getSiegeDates(cal.getTimeInMillis()) < holder.getMaxConcurrent()) - { - CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), cal.getTimeInMillis()); - break; - } + Broadcast.toAllOnlinePlayers(new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME).addCastleId(_castle.getResidenceId())); + + // Allow registration for next siege + _isRegistrationOver = false; + } + else + { + // Deny registration for next siege + _isRegistrationOver = true; } - - final SystemMessage sm = new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME); - sm.addCastleId(getCastle().getResidenceId()); - Broadcast.toAllOnlinePlayers(sm); - - _isRegistrationOver = false; // Allow registration for next siege } /** diff --git a/L2J_Mobius_CT_2.6_HighFive/dist/game/config/SiegeSchedule.xml b/L2J_Mobius_CT_2.6_HighFive/dist/game/config/SiegeSchedule.xml index a4c5284fff..9de3eb0772 100644 --- a/L2J_Mobius_CT_2.6_HighFive/dist/game/config/SiegeSchedule.xml +++ b/L2J_Mobius_CT_2.6_HighFive/dist/game/config/SiegeSchedule.xml @@ -1,5 +1,12 @@ - - + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_CT_2.6_HighFive/dist/game/data/xsd/SiegeSchedule.xsd b/L2J_Mobius_CT_2.6_HighFive/dist/game/data/xsd/SiegeSchedule.xsd index 484c1e00d1..36f7da1370 100644 --- a/L2J_Mobius_CT_2.6_HighFive/dist/game/data/xsd/SiegeSchedule.xsd +++ b/L2J_Mobius_CT_2.6_HighFive/dist/game/data/xsd/SiegeSchedule.xsd @@ -5,6 +5,9 @@ + + + diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java index d06b0ad061..9e5c54a54b 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java @@ -17,10 +17,11 @@ package org.l2jmobius.gameserver.data.xml.impl; import java.io.File; -import java.util.ArrayList; import java.util.Calendar; -import java.util.List; +import java.util.HashMap; +import java.util.Map; import java.util.logging.Level; +import java.util.logging.Logger; import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; @@ -36,7 +37,9 @@ import org.l2jmobius.gameserver.util.Util; */ public class SiegeScheduleData implements IXmlReader { - private final List _scheduleData = new ArrayList<>(); + private static final Logger LOGGER = Logger.getLogger(SiegeScheduleData.class.getName()); + + private final Map _scheduleData = new HashMap<>(); protected SiegeScheduleData() { @@ -46,14 +49,8 @@ public class SiegeScheduleData implements IXmlReader @Override public synchronized void load() { - _scheduleData.clear(); parseDatapackFile("config/SiegeSchedule.xml"); - LOGGER.log(Level.INFO, getClass().getSimpleName() + ": Loaded " + _scheduleData.size() + " siege schedulers."); - if (_scheduleData.isEmpty()) - { - _scheduleData.add(new SiegeScheduleDate(new StatSet())); - LOGGER.log(Level.INFO, getClass().getSimpleName() + ": Emergency Loaded: " + _scheduleData.size() + " default siege schedulers."); - } + LOGGER.info(getClass().getSimpleName() + ": Loaded " + _scheduleData.size() + " siege schedulers."); } @Override @@ -82,7 +79,7 @@ public class SiegeScheduleData implements IXmlReader } set.set(key, val); } - _scheduleData.add(new SiegeScheduleDate(set)); + _scheduleData.put(set.getInt("castleId"), new SiegeScheduleDate(set)); break; } } @@ -95,7 +92,7 @@ public class SiegeScheduleData implements IXmlReader { try { - return Calendar.class.getField(field).getInt(Calendar.class); + return Calendar.class.getField(field).getInt(Calendar.class.getName()); } catch (Exception e) { @@ -104,9 +101,9 @@ public class SiegeScheduleData implements IXmlReader } } - public List getScheduleDates() + public SiegeScheduleDate getScheduleDateForCastleId(int castleId) { - return _scheduleData; + return _scheduleData.get(castleId); } public static SiegeScheduleData getInstance() diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java index d854355fb0..fb560f02c9 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java @@ -26,12 +26,14 @@ public class SiegeScheduleDate private final int _day; private final int _hour; private final int _maxConcurrent; + private final boolean _siegeEnabled; public SiegeScheduleDate(StatSet set) { _day = set.getInt("day", Calendar.SUNDAY); _hour = set.getInt("hour", 16); _maxConcurrent = set.getInt("maxConcurrent", 5); + _siegeEnabled = set.getBoolean("siegeEnabled", false); } public int getDay() @@ -48,4 +50,9 @@ public class SiegeScheduleDate { return _maxConcurrent; } + + public boolean siegeEnabled() + { + return _siegeEnabled; + } } diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/entity/Siege.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/entity/Siege.java index d69714a187..14a5e33261 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/entity/Siege.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/entity/Siege.java @@ -1405,35 +1405,42 @@ public class Siege implements Siegable /** Set the date for the next siege. */ private void setNextSiegeDate() { - final Calendar cal = getCastle().getSiegeDate(); - if (cal.getTimeInMillis() < System.currentTimeMillis()) + final SiegeScheduleDate holder = SiegeScheduleData.getInstance().getScheduleDateForCastleId(_castle.getResidenceId()); + if (!holder.siegeEnabled()) { - cal.setTimeInMillis(System.currentTimeMillis()); + return; } - for (SiegeScheduleDate holder : SiegeScheduleData.getInstance().getScheduleDates()) + final Calendar calendar = _castle.getSiegeDate(); + if (calendar.getTimeInMillis() < System.currentTimeMillis()) { - cal.set(Calendar.DAY_OF_WEEK, holder.getDay()); - cal.set(Calendar.HOUR_OF_DAY, holder.getHour()); - cal.set(Calendar.MINUTE, 0); - cal.set(Calendar.SECOND, 0); - if (cal.before(Calendar.getInstance())) - { - cal.add(Calendar.WEEK_OF_YEAR, 2); - } + calendar.setTimeInMillis(System.currentTimeMillis()); + } + + calendar.set(Calendar.DAY_OF_WEEK, holder.getDay()); + calendar.set(Calendar.HOUR_OF_DAY, holder.getHour()); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + + if (calendar.before(Calendar.getInstance())) + { + calendar.add(Calendar.WEEK_OF_YEAR, 2); + } + + if (CastleManager.getInstance().getSiegeDates(calendar.getTimeInMillis()) < holder.getMaxConcurrent()) + { + CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), calendar.getTimeInMillis()); - if (CastleManager.getInstance().getSiegeDates(cal.getTimeInMillis()) < holder.getMaxConcurrent()) - { - CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), cal.getTimeInMillis()); - break; - } + Broadcast.toAllOnlinePlayers(new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME).addCastleId(_castle.getResidenceId())); + + // Allow registration for next siege + _isRegistrationOver = false; + } + else + { + // Deny registration for next siege + _isRegistrationOver = true; } - - final SystemMessage sm = new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME); - sm.addCastleId(getCastle().getResidenceId()); - Broadcast.toAllOnlinePlayers(sm); - - _isRegistrationOver = false; // Allow registration for next siege } /** diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/config/SiegeSchedule.xml b/L2J_Mobius_Classic_2.0_Saviors/dist/game/config/SiegeSchedule.xml index 6a7ff28248..c3458fe821 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/config/SiegeSchedule.xml +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/config/SiegeSchedule.xml @@ -1,4 +1,8 @@ - + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/xsd/SiegeSchedule.xsd b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/xsd/SiegeSchedule.xsd index da2cb0a799..3a3cb7072c 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/xsd/SiegeSchedule.xsd +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/xsd/SiegeSchedule.xsd @@ -5,6 +5,9 @@ + + + diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java index 0d5c2a8d25..9e5c54a54b 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java @@ -17,9 +17,9 @@ package org.l2jmobius.gameserver.data.xml.impl; import java.io.File; -import java.util.ArrayList; import java.util.Calendar; -import java.util.List; +import java.util.HashMap; +import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; @@ -39,7 +39,7 @@ public class SiegeScheduleData implements IXmlReader { private static final Logger LOGGER = Logger.getLogger(SiegeScheduleData.class.getName()); - private final List _scheduleData = new ArrayList<>(); + private final Map _scheduleData = new HashMap<>(); protected SiegeScheduleData() { @@ -49,14 +49,8 @@ public class SiegeScheduleData implements IXmlReader @Override public synchronized void load() { - _scheduleData.clear(); parseDatapackFile("config/SiegeSchedule.xml"); LOGGER.info(getClass().getSimpleName() + ": Loaded " + _scheduleData.size() + " siege schedulers."); - if (_scheduleData.isEmpty()) - { - _scheduleData.add(new SiegeScheduleDate(new StatSet())); - LOGGER.info(getClass().getSimpleName() + ": Emergency loaded " + _scheduleData.size() + " default siege schedulers."); - } } @Override @@ -85,7 +79,7 @@ public class SiegeScheduleData implements IXmlReader } set.set(key, val); } - _scheduleData.add(new SiegeScheduleDate(set)); + _scheduleData.put(set.getInt("castleId"), new SiegeScheduleDate(set)); break; } } @@ -107,9 +101,9 @@ public class SiegeScheduleData implements IXmlReader } } - public List getScheduleDates() + public SiegeScheduleDate getScheduleDateForCastleId(int castleId) { - return _scheduleData; + return _scheduleData.get(castleId); } public static SiegeScheduleData getInstance() diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java index d854355fb0..fb560f02c9 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java @@ -26,12 +26,14 @@ public class SiegeScheduleDate private final int _day; private final int _hour; private final int _maxConcurrent; + private final boolean _siegeEnabled; public SiegeScheduleDate(StatSet set) { _day = set.getInt("day", Calendar.SUNDAY); _hour = set.getInt("hour", 16); _maxConcurrent = set.getInt("maxConcurrent", 5); + _siegeEnabled = set.getBoolean("siegeEnabled", false); } public int getDay() @@ -48,4 +50,9 @@ public class SiegeScheduleDate { return _maxConcurrent; } + + public boolean siegeEnabled() + { + return _siegeEnabled; + } } diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/entity/Siege.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/entity/Siege.java index 32ec9166df..65ecbde5ae 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/entity/Siege.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/entity/Siege.java @@ -1426,35 +1426,42 @@ public class Siege implements Siegable /** Set the date for the next siege. */ private void setNextSiegeDate() { - final Calendar cal = _castle.getSiegeDate(); - if (cal.getTimeInMillis() < System.currentTimeMillis()) + final SiegeScheduleDate holder = SiegeScheduleData.getInstance().getScheduleDateForCastleId(_castle.getResidenceId()); + if (!holder.siegeEnabled()) { - cal.setTimeInMillis(System.currentTimeMillis()); + return; } - for (SiegeScheduleDate holder : SiegeScheduleData.getInstance().getScheduleDates()) + final Calendar calendar = _castle.getSiegeDate(); + if (calendar.getTimeInMillis() < System.currentTimeMillis()) { - cal.set(Calendar.DAY_OF_WEEK, holder.getDay()); - cal.set(Calendar.HOUR_OF_DAY, holder.getHour()); - cal.set(Calendar.MINUTE, 0); - cal.set(Calendar.SECOND, 0); - if (cal.before(Calendar.getInstance())) - { - cal.add(Calendar.WEEK_OF_YEAR, 2); - } + calendar.setTimeInMillis(System.currentTimeMillis()); + } + + calendar.set(Calendar.DAY_OF_WEEK, holder.getDay()); + calendar.set(Calendar.HOUR_OF_DAY, holder.getHour()); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + + if (calendar.before(Calendar.getInstance())) + { + calendar.add(Calendar.WEEK_OF_YEAR, 2); + } + + if (CastleManager.getInstance().getSiegeDates(calendar.getTimeInMillis()) < holder.getMaxConcurrent()) + { + CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), calendar.getTimeInMillis()); - if (CastleManager.getInstance().getSiegeDates(cal.getTimeInMillis()) < holder.getMaxConcurrent()) - { - CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), cal.getTimeInMillis()); - break; - } + Broadcast.toAllOnlinePlayers(new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME).addCastleId(_castle.getResidenceId())); + + // Allow registration for next siege + _isRegistrationOver = false; + } + else + { + // Deny registration for next siege + _isRegistrationOver = true; } - - final SystemMessage sm = new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME); - sm.addCastleId(_castle.getResidenceId()); - Broadcast.toAllOnlinePlayers(sm); - - _isRegistrationOver = false; // Allow registration for next siege } /** diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/config/SiegeSchedule.xml b/L2J_Mobius_Classic_2.1_Zaken/dist/game/config/SiegeSchedule.xml index 6a7ff28248..c3458fe821 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/config/SiegeSchedule.xml +++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/config/SiegeSchedule.xml @@ -1,4 +1,8 @@ - + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/xsd/SiegeSchedule.xsd b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/xsd/SiegeSchedule.xsd index da2cb0a799..3a3cb7072c 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/xsd/SiegeSchedule.xsd +++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/xsd/SiegeSchedule.xsd @@ -5,6 +5,9 @@ + + + diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java index 0d5c2a8d25..9e5c54a54b 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java @@ -17,9 +17,9 @@ package org.l2jmobius.gameserver.data.xml.impl; import java.io.File; -import java.util.ArrayList; import java.util.Calendar; -import java.util.List; +import java.util.HashMap; +import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; @@ -39,7 +39,7 @@ public class SiegeScheduleData implements IXmlReader { private static final Logger LOGGER = Logger.getLogger(SiegeScheduleData.class.getName()); - private final List _scheduleData = new ArrayList<>(); + private final Map _scheduleData = new HashMap<>(); protected SiegeScheduleData() { @@ -49,14 +49,8 @@ public class SiegeScheduleData implements IXmlReader @Override public synchronized void load() { - _scheduleData.clear(); parseDatapackFile("config/SiegeSchedule.xml"); LOGGER.info(getClass().getSimpleName() + ": Loaded " + _scheduleData.size() + " siege schedulers."); - if (_scheduleData.isEmpty()) - { - _scheduleData.add(new SiegeScheduleDate(new StatSet())); - LOGGER.info(getClass().getSimpleName() + ": Emergency loaded " + _scheduleData.size() + " default siege schedulers."); - } } @Override @@ -85,7 +79,7 @@ public class SiegeScheduleData implements IXmlReader } set.set(key, val); } - _scheduleData.add(new SiegeScheduleDate(set)); + _scheduleData.put(set.getInt("castleId"), new SiegeScheduleDate(set)); break; } } @@ -107,9 +101,9 @@ public class SiegeScheduleData implements IXmlReader } } - public List getScheduleDates() + public SiegeScheduleDate getScheduleDateForCastleId(int castleId) { - return _scheduleData; + return _scheduleData.get(castleId); } public static SiegeScheduleData getInstance() diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java index d854355fb0..fb560f02c9 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java @@ -26,12 +26,14 @@ public class SiegeScheduleDate private final int _day; private final int _hour; private final int _maxConcurrent; + private final boolean _siegeEnabled; public SiegeScheduleDate(StatSet set) { _day = set.getInt("day", Calendar.SUNDAY); _hour = set.getInt("hour", 16); _maxConcurrent = set.getInt("maxConcurrent", 5); + _siegeEnabled = set.getBoolean("siegeEnabled", false); } public int getDay() @@ -48,4 +50,9 @@ public class SiegeScheduleDate { return _maxConcurrent; } + + public boolean siegeEnabled() + { + return _siegeEnabled; + } } diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/entity/Siege.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/entity/Siege.java index 32ec9166df..65ecbde5ae 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/entity/Siege.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/entity/Siege.java @@ -1426,35 +1426,42 @@ public class Siege implements Siegable /** Set the date for the next siege. */ private void setNextSiegeDate() { - final Calendar cal = _castle.getSiegeDate(); - if (cal.getTimeInMillis() < System.currentTimeMillis()) + final SiegeScheduleDate holder = SiegeScheduleData.getInstance().getScheduleDateForCastleId(_castle.getResidenceId()); + if (!holder.siegeEnabled()) { - cal.setTimeInMillis(System.currentTimeMillis()); + return; } - for (SiegeScheduleDate holder : SiegeScheduleData.getInstance().getScheduleDates()) + final Calendar calendar = _castle.getSiegeDate(); + if (calendar.getTimeInMillis() < System.currentTimeMillis()) { - cal.set(Calendar.DAY_OF_WEEK, holder.getDay()); - cal.set(Calendar.HOUR_OF_DAY, holder.getHour()); - cal.set(Calendar.MINUTE, 0); - cal.set(Calendar.SECOND, 0); - if (cal.before(Calendar.getInstance())) - { - cal.add(Calendar.WEEK_OF_YEAR, 2); - } + calendar.setTimeInMillis(System.currentTimeMillis()); + } + + calendar.set(Calendar.DAY_OF_WEEK, holder.getDay()); + calendar.set(Calendar.HOUR_OF_DAY, holder.getHour()); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + + if (calendar.before(Calendar.getInstance())) + { + calendar.add(Calendar.WEEK_OF_YEAR, 2); + } + + if (CastleManager.getInstance().getSiegeDates(calendar.getTimeInMillis()) < holder.getMaxConcurrent()) + { + CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), calendar.getTimeInMillis()); - if (CastleManager.getInstance().getSiegeDates(cal.getTimeInMillis()) < holder.getMaxConcurrent()) - { - CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), cal.getTimeInMillis()); - break; - } + Broadcast.toAllOnlinePlayers(new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME).addCastleId(_castle.getResidenceId())); + + // Allow registration for next siege + _isRegistrationOver = false; + } + else + { + // Deny registration for next siege + _isRegistrationOver = true; } - - final SystemMessage sm = new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME); - sm.addCastleId(_castle.getResidenceId()); - Broadcast.toAllOnlinePlayers(sm); - - _isRegistrationOver = false; // Allow registration for next siege } /** diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/config/SiegeSchedule.xml b/L2J_Mobius_Classic_2.2_Antharas/dist/game/config/SiegeSchedule.xml index 6a7ff28248..c3458fe821 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/config/SiegeSchedule.xml +++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/config/SiegeSchedule.xml @@ -1,4 +1,8 @@ - + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/xsd/SiegeSchedule.xsd b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/xsd/SiegeSchedule.xsd index da2cb0a799..3a3cb7072c 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/xsd/SiegeSchedule.xsd +++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/xsd/SiegeSchedule.xsd @@ -5,6 +5,9 @@ + + + diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java index 0d5c2a8d25..9e5c54a54b 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java @@ -17,9 +17,9 @@ package org.l2jmobius.gameserver.data.xml.impl; import java.io.File; -import java.util.ArrayList; import java.util.Calendar; -import java.util.List; +import java.util.HashMap; +import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; @@ -39,7 +39,7 @@ public class SiegeScheduleData implements IXmlReader { private static final Logger LOGGER = Logger.getLogger(SiegeScheduleData.class.getName()); - private final List _scheduleData = new ArrayList<>(); + private final Map _scheduleData = new HashMap<>(); protected SiegeScheduleData() { @@ -49,14 +49,8 @@ public class SiegeScheduleData implements IXmlReader @Override public synchronized void load() { - _scheduleData.clear(); parseDatapackFile("config/SiegeSchedule.xml"); LOGGER.info(getClass().getSimpleName() + ": Loaded " + _scheduleData.size() + " siege schedulers."); - if (_scheduleData.isEmpty()) - { - _scheduleData.add(new SiegeScheduleDate(new StatSet())); - LOGGER.info(getClass().getSimpleName() + ": Emergency loaded " + _scheduleData.size() + " default siege schedulers."); - } } @Override @@ -85,7 +79,7 @@ public class SiegeScheduleData implements IXmlReader } set.set(key, val); } - _scheduleData.add(new SiegeScheduleDate(set)); + _scheduleData.put(set.getInt("castleId"), new SiegeScheduleDate(set)); break; } } @@ -107,9 +101,9 @@ public class SiegeScheduleData implements IXmlReader } } - public List getScheduleDates() + public SiegeScheduleDate getScheduleDateForCastleId(int castleId) { - return _scheduleData; + return _scheduleData.get(castleId); } public static SiegeScheduleData getInstance() diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java index d854355fb0..fb560f02c9 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java @@ -26,12 +26,14 @@ public class SiegeScheduleDate private final int _day; private final int _hour; private final int _maxConcurrent; + private final boolean _siegeEnabled; public SiegeScheduleDate(StatSet set) { _day = set.getInt("day", Calendar.SUNDAY); _hour = set.getInt("hour", 16); _maxConcurrent = set.getInt("maxConcurrent", 5); + _siegeEnabled = set.getBoolean("siegeEnabled", false); } public int getDay() @@ -48,4 +50,9 @@ public class SiegeScheduleDate { return _maxConcurrent; } + + public boolean siegeEnabled() + { + return _siegeEnabled; + } } diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/entity/Siege.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/entity/Siege.java index 32ec9166df..65ecbde5ae 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/entity/Siege.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/entity/Siege.java @@ -1426,35 +1426,42 @@ public class Siege implements Siegable /** Set the date for the next siege. */ private void setNextSiegeDate() { - final Calendar cal = _castle.getSiegeDate(); - if (cal.getTimeInMillis() < System.currentTimeMillis()) + final SiegeScheduleDate holder = SiegeScheduleData.getInstance().getScheduleDateForCastleId(_castle.getResidenceId()); + if (!holder.siegeEnabled()) { - cal.setTimeInMillis(System.currentTimeMillis()); + return; } - for (SiegeScheduleDate holder : SiegeScheduleData.getInstance().getScheduleDates()) + final Calendar calendar = _castle.getSiegeDate(); + if (calendar.getTimeInMillis() < System.currentTimeMillis()) { - cal.set(Calendar.DAY_OF_WEEK, holder.getDay()); - cal.set(Calendar.HOUR_OF_DAY, holder.getHour()); - cal.set(Calendar.MINUTE, 0); - cal.set(Calendar.SECOND, 0); - if (cal.before(Calendar.getInstance())) - { - cal.add(Calendar.WEEK_OF_YEAR, 2); - } + calendar.setTimeInMillis(System.currentTimeMillis()); + } + + calendar.set(Calendar.DAY_OF_WEEK, holder.getDay()); + calendar.set(Calendar.HOUR_OF_DAY, holder.getHour()); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + + if (calendar.before(Calendar.getInstance())) + { + calendar.add(Calendar.WEEK_OF_YEAR, 2); + } + + if (CastleManager.getInstance().getSiegeDates(calendar.getTimeInMillis()) < holder.getMaxConcurrent()) + { + CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), calendar.getTimeInMillis()); - if (CastleManager.getInstance().getSiegeDates(cal.getTimeInMillis()) < holder.getMaxConcurrent()) - { - CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), cal.getTimeInMillis()); - break; - } + Broadcast.toAllOnlinePlayers(new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME).addCastleId(_castle.getResidenceId())); + + // Allow registration for next siege + _isRegistrationOver = false; + } + else + { + // Deny registration for next siege + _isRegistrationOver = true; } - - final SystemMessage sm = new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME); - sm.addCastleId(_castle.getResidenceId()); - Broadcast.toAllOnlinePlayers(sm); - - _isRegistrationOver = false; // Allow registration for next siege } /** diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/config/SiegeSchedule.xml b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/config/SiegeSchedule.xml index 6a7ff28248..c3458fe821 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/config/SiegeSchedule.xml +++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/config/SiegeSchedule.xml @@ -1,4 +1,8 @@ - + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/xsd/SiegeSchedule.xsd b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/xsd/SiegeSchedule.xsd index da2cb0a799..3a3cb7072c 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/xsd/SiegeSchedule.xsd +++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/xsd/SiegeSchedule.xsd @@ -5,6 +5,9 @@ + + + diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java index 0d5c2a8d25..9e5c54a54b 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java @@ -17,9 +17,9 @@ package org.l2jmobius.gameserver.data.xml.impl; import java.io.File; -import java.util.ArrayList; import java.util.Calendar; -import java.util.List; +import java.util.HashMap; +import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; @@ -39,7 +39,7 @@ public class SiegeScheduleData implements IXmlReader { private static final Logger LOGGER = Logger.getLogger(SiegeScheduleData.class.getName()); - private final List _scheduleData = new ArrayList<>(); + private final Map _scheduleData = new HashMap<>(); protected SiegeScheduleData() { @@ -49,14 +49,8 @@ public class SiegeScheduleData implements IXmlReader @Override public synchronized void load() { - _scheduleData.clear(); parseDatapackFile("config/SiegeSchedule.xml"); LOGGER.info(getClass().getSimpleName() + ": Loaded " + _scheduleData.size() + " siege schedulers."); - if (_scheduleData.isEmpty()) - { - _scheduleData.add(new SiegeScheduleDate(new StatSet())); - LOGGER.info(getClass().getSimpleName() + ": Emergency loaded " + _scheduleData.size() + " default siege schedulers."); - } } @Override @@ -85,7 +79,7 @@ public class SiegeScheduleData implements IXmlReader } set.set(key, val); } - _scheduleData.add(new SiegeScheduleDate(set)); + _scheduleData.put(set.getInt("castleId"), new SiegeScheduleDate(set)); break; } } @@ -107,9 +101,9 @@ public class SiegeScheduleData implements IXmlReader } } - public List getScheduleDates() + public SiegeScheduleDate getScheduleDateForCastleId(int castleId) { - return _scheduleData; + return _scheduleData.get(castleId); } public static SiegeScheduleData getInstance() diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java index d854355fb0..fb560f02c9 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java @@ -26,12 +26,14 @@ public class SiegeScheduleDate private final int _day; private final int _hour; private final int _maxConcurrent; + private final boolean _siegeEnabled; public SiegeScheduleDate(StatSet set) { _day = set.getInt("day", Calendar.SUNDAY); _hour = set.getInt("hour", 16); _maxConcurrent = set.getInt("maxConcurrent", 5); + _siegeEnabled = set.getBoolean("siegeEnabled", false); } public int getDay() @@ -48,4 +50,9 @@ public class SiegeScheduleDate { return _maxConcurrent; } + + public boolean siegeEnabled() + { + return _siegeEnabled; + } } diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/entity/Siege.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/entity/Siege.java index 32ec9166df..65ecbde5ae 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/entity/Siege.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/entity/Siege.java @@ -1426,35 +1426,42 @@ public class Siege implements Siegable /** Set the date for the next siege. */ private void setNextSiegeDate() { - final Calendar cal = _castle.getSiegeDate(); - if (cal.getTimeInMillis() < System.currentTimeMillis()) + final SiegeScheduleDate holder = SiegeScheduleData.getInstance().getScheduleDateForCastleId(_castle.getResidenceId()); + if (!holder.siegeEnabled()) { - cal.setTimeInMillis(System.currentTimeMillis()); + return; } - for (SiegeScheduleDate holder : SiegeScheduleData.getInstance().getScheduleDates()) + final Calendar calendar = _castle.getSiegeDate(); + if (calendar.getTimeInMillis() < System.currentTimeMillis()) { - cal.set(Calendar.DAY_OF_WEEK, holder.getDay()); - cal.set(Calendar.HOUR_OF_DAY, holder.getHour()); - cal.set(Calendar.MINUTE, 0); - cal.set(Calendar.SECOND, 0); - if (cal.before(Calendar.getInstance())) - { - cal.add(Calendar.WEEK_OF_YEAR, 2); - } + calendar.setTimeInMillis(System.currentTimeMillis()); + } + + calendar.set(Calendar.DAY_OF_WEEK, holder.getDay()); + calendar.set(Calendar.HOUR_OF_DAY, holder.getHour()); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + + if (calendar.before(Calendar.getInstance())) + { + calendar.add(Calendar.WEEK_OF_YEAR, 2); + } + + if (CastleManager.getInstance().getSiegeDates(calendar.getTimeInMillis()) < holder.getMaxConcurrent()) + { + CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), calendar.getTimeInMillis()); - if (CastleManager.getInstance().getSiegeDates(cal.getTimeInMillis()) < holder.getMaxConcurrent()) - { - CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), cal.getTimeInMillis()); - break; - } + Broadcast.toAllOnlinePlayers(new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME).addCastleId(_castle.getResidenceId())); + + // Allow registration for next siege + _isRegistrationOver = false; + } + else + { + // Deny registration for next siege + _isRegistrationOver = true; } - - final SystemMessage sm = new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME); - sm.addCastleId(_castle.getResidenceId()); - Broadcast.toAllOnlinePlayers(sm); - - _isRegistrationOver = false; // Allow registration for next siege } /** diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/config/SiegeSchedule.xml b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/config/SiegeSchedule.xml index 6a7ff28248..c3458fe821 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/config/SiegeSchedule.xml +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/config/SiegeSchedule.xml @@ -1,4 +1,8 @@ - + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/xsd/SiegeSchedule.xsd b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/xsd/SiegeSchedule.xsd index da2cb0a799..3a3cb7072c 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/xsd/SiegeSchedule.xsd +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/xsd/SiegeSchedule.xsd @@ -5,6 +5,9 @@ + + + diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java index 0d5c2a8d25..9e5c54a54b 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java @@ -17,9 +17,9 @@ package org.l2jmobius.gameserver.data.xml.impl; import java.io.File; -import java.util.ArrayList; import java.util.Calendar; -import java.util.List; +import java.util.HashMap; +import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; @@ -39,7 +39,7 @@ public class SiegeScheduleData implements IXmlReader { private static final Logger LOGGER = Logger.getLogger(SiegeScheduleData.class.getName()); - private final List _scheduleData = new ArrayList<>(); + private final Map _scheduleData = new HashMap<>(); protected SiegeScheduleData() { @@ -49,14 +49,8 @@ public class SiegeScheduleData implements IXmlReader @Override public synchronized void load() { - _scheduleData.clear(); parseDatapackFile("config/SiegeSchedule.xml"); LOGGER.info(getClass().getSimpleName() + ": Loaded " + _scheduleData.size() + " siege schedulers."); - if (_scheduleData.isEmpty()) - { - _scheduleData.add(new SiegeScheduleDate(new StatSet())); - LOGGER.info(getClass().getSimpleName() + ": Emergency loaded " + _scheduleData.size() + " default siege schedulers."); - } } @Override @@ -85,7 +79,7 @@ public class SiegeScheduleData implements IXmlReader } set.set(key, val); } - _scheduleData.add(new SiegeScheduleDate(set)); + _scheduleData.put(set.getInt("castleId"), new SiegeScheduleDate(set)); break; } } @@ -107,9 +101,9 @@ public class SiegeScheduleData implements IXmlReader } } - public List getScheduleDates() + public SiegeScheduleDate getScheduleDateForCastleId(int castleId) { - return _scheduleData; + return _scheduleData.get(castleId); } public static SiegeScheduleData getInstance() diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java index d854355fb0..fb560f02c9 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java @@ -26,12 +26,14 @@ public class SiegeScheduleDate private final int _day; private final int _hour; private final int _maxConcurrent; + private final boolean _siegeEnabled; public SiegeScheduleDate(StatSet set) { _day = set.getInt("day", Calendar.SUNDAY); _hour = set.getInt("hour", 16); _maxConcurrent = set.getInt("maxConcurrent", 5); + _siegeEnabled = set.getBoolean("siegeEnabled", false); } public int getDay() @@ -48,4 +50,9 @@ public class SiegeScheduleDate { return _maxConcurrent; } + + public boolean siegeEnabled() + { + return _siegeEnabled; + } } diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/entity/Siege.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/entity/Siege.java index 32ec9166df..65ecbde5ae 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/entity/Siege.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/entity/Siege.java @@ -1426,35 +1426,42 @@ public class Siege implements Siegable /** Set the date for the next siege. */ private void setNextSiegeDate() { - final Calendar cal = _castle.getSiegeDate(); - if (cal.getTimeInMillis() < System.currentTimeMillis()) + final SiegeScheduleDate holder = SiegeScheduleData.getInstance().getScheduleDateForCastleId(_castle.getResidenceId()); + if (!holder.siegeEnabled()) { - cal.setTimeInMillis(System.currentTimeMillis()); + return; } - for (SiegeScheduleDate holder : SiegeScheduleData.getInstance().getScheduleDates()) + final Calendar calendar = _castle.getSiegeDate(); + if (calendar.getTimeInMillis() < System.currentTimeMillis()) { - cal.set(Calendar.DAY_OF_WEEK, holder.getDay()); - cal.set(Calendar.HOUR_OF_DAY, holder.getHour()); - cal.set(Calendar.MINUTE, 0); - cal.set(Calendar.SECOND, 0); - if (cal.before(Calendar.getInstance())) - { - cal.add(Calendar.WEEK_OF_YEAR, 2); - } + calendar.setTimeInMillis(System.currentTimeMillis()); + } + + calendar.set(Calendar.DAY_OF_WEEK, holder.getDay()); + calendar.set(Calendar.HOUR_OF_DAY, holder.getHour()); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + + if (calendar.before(Calendar.getInstance())) + { + calendar.add(Calendar.WEEK_OF_YEAR, 2); + } + + if (CastleManager.getInstance().getSiegeDates(calendar.getTimeInMillis()) < holder.getMaxConcurrent()) + { + CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), calendar.getTimeInMillis()); - if (CastleManager.getInstance().getSiegeDates(cal.getTimeInMillis()) < holder.getMaxConcurrent()) - { - CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), cal.getTimeInMillis()); - break; - } + Broadcast.toAllOnlinePlayers(new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME).addCastleId(_castle.getResidenceId())); + + // Allow registration for next siege + _isRegistrationOver = false; + } + else + { + // Deny registration for next siege + _isRegistrationOver = true; } - - final SystemMessage sm = new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME); - sm.addCastleId(_castle.getResidenceId()); - Broadcast.toAllOnlinePlayers(sm); - - _isRegistrationOver = false; // Allow registration for next siege } /** diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/config/SiegeSchedule.xml b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/config/SiegeSchedule.xml index 6a7ff28248..c3458fe821 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/config/SiegeSchedule.xml +++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/config/SiegeSchedule.xml @@ -1,4 +1,8 @@ - + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/xsd/SiegeSchedule.xsd b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/xsd/SiegeSchedule.xsd index da2cb0a799..3a3cb7072c 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/xsd/SiegeSchedule.xsd +++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/xsd/SiegeSchedule.xsd @@ -5,6 +5,9 @@ + + + diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java index 0d5c2a8d25..9e5c54a54b 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java @@ -17,9 +17,9 @@ package org.l2jmobius.gameserver.data.xml.impl; import java.io.File; -import java.util.ArrayList; import java.util.Calendar; -import java.util.List; +import java.util.HashMap; +import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; @@ -39,7 +39,7 @@ public class SiegeScheduleData implements IXmlReader { private static final Logger LOGGER = Logger.getLogger(SiegeScheduleData.class.getName()); - private final List _scheduleData = new ArrayList<>(); + private final Map _scheduleData = new HashMap<>(); protected SiegeScheduleData() { @@ -49,14 +49,8 @@ public class SiegeScheduleData implements IXmlReader @Override public synchronized void load() { - _scheduleData.clear(); parseDatapackFile("config/SiegeSchedule.xml"); LOGGER.info(getClass().getSimpleName() + ": Loaded " + _scheduleData.size() + " siege schedulers."); - if (_scheduleData.isEmpty()) - { - _scheduleData.add(new SiegeScheduleDate(new StatSet())); - LOGGER.info(getClass().getSimpleName() + ": Emergency loaded " + _scheduleData.size() + " default siege schedulers."); - } } @Override @@ -85,7 +79,7 @@ public class SiegeScheduleData implements IXmlReader } set.set(key, val); } - _scheduleData.add(new SiegeScheduleDate(set)); + _scheduleData.put(set.getInt("castleId"), new SiegeScheduleDate(set)); break; } } @@ -107,9 +101,9 @@ public class SiegeScheduleData implements IXmlReader } } - public List getScheduleDates() + public SiegeScheduleDate getScheduleDateForCastleId(int castleId) { - return _scheduleData; + return _scheduleData.get(castleId); } public static SiegeScheduleData getInstance() diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java index d854355fb0..fb560f02c9 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java @@ -26,12 +26,14 @@ public class SiegeScheduleDate private final int _day; private final int _hour; private final int _maxConcurrent; + private final boolean _siegeEnabled; public SiegeScheduleDate(StatSet set) { _day = set.getInt("day", Calendar.SUNDAY); _hour = set.getInt("hour", 16); _maxConcurrent = set.getInt("maxConcurrent", 5); + _siegeEnabled = set.getBoolean("siegeEnabled", false); } public int getDay() @@ -48,4 +50,9 @@ public class SiegeScheduleDate { return _maxConcurrent; } + + public boolean siegeEnabled() + { + return _siegeEnabled; + } } diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/entity/Siege.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/entity/Siege.java index 32ec9166df..65ecbde5ae 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/entity/Siege.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/entity/Siege.java @@ -1426,35 +1426,42 @@ public class Siege implements Siegable /** Set the date for the next siege. */ private void setNextSiegeDate() { - final Calendar cal = _castle.getSiegeDate(); - if (cal.getTimeInMillis() < System.currentTimeMillis()) + final SiegeScheduleDate holder = SiegeScheduleData.getInstance().getScheduleDateForCastleId(_castle.getResidenceId()); + if (!holder.siegeEnabled()) { - cal.setTimeInMillis(System.currentTimeMillis()); + return; } - for (SiegeScheduleDate holder : SiegeScheduleData.getInstance().getScheduleDates()) + final Calendar calendar = _castle.getSiegeDate(); + if (calendar.getTimeInMillis() < System.currentTimeMillis()) { - cal.set(Calendar.DAY_OF_WEEK, holder.getDay()); - cal.set(Calendar.HOUR_OF_DAY, holder.getHour()); - cal.set(Calendar.MINUTE, 0); - cal.set(Calendar.SECOND, 0); - if (cal.before(Calendar.getInstance())) - { - cal.add(Calendar.WEEK_OF_YEAR, 2); - } + calendar.setTimeInMillis(System.currentTimeMillis()); + } + + calendar.set(Calendar.DAY_OF_WEEK, holder.getDay()); + calendar.set(Calendar.HOUR_OF_DAY, holder.getHour()); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + + if (calendar.before(Calendar.getInstance())) + { + calendar.add(Calendar.WEEK_OF_YEAR, 2); + } + + if (CastleManager.getInstance().getSiegeDates(calendar.getTimeInMillis()) < holder.getMaxConcurrent()) + { + CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), calendar.getTimeInMillis()); - if (CastleManager.getInstance().getSiegeDates(cal.getTimeInMillis()) < holder.getMaxConcurrent()) - { - CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), cal.getTimeInMillis()); - break; - } + Broadcast.toAllOnlinePlayers(new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME).addCastleId(_castle.getResidenceId())); + + // Allow registration for next siege + _isRegistrationOver = false; + } + else + { + // Deny registration for next siege + _isRegistrationOver = true; } - - final SystemMessage sm = new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME); - sm.addCastleId(_castle.getResidenceId()); - Broadcast.toAllOnlinePlayers(sm); - - _isRegistrationOver = false; // Allow registration for next siege } /** diff --git a/L2J_Mobius_Classic_Interlude/dist/game/config/SiegeSchedule.xml b/L2J_Mobius_Classic_Interlude/dist/game/config/SiegeSchedule.xml index a4c5284fff..9de3eb0772 100644 --- a/L2J_Mobius_Classic_Interlude/dist/game/config/SiegeSchedule.xml +++ b/L2J_Mobius_Classic_Interlude/dist/game/config/SiegeSchedule.xml @@ -1,5 +1,12 @@ - - + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/xsd/SiegeSchedule.xsd b/L2J_Mobius_Classic_Interlude/dist/game/data/xsd/SiegeSchedule.xsd index da2cb0a799..3a3cb7072c 100644 --- a/L2J_Mobius_Classic_Interlude/dist/game/data/xsd/SiegeSchedule.xsd +++ b/L2J_Mobius_Classic_Interlude/dist/game/data/xsd/SiegeSchedule.xsd @@ -5,6 +5,9 @@ + + + diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java index 0d5c2a8d25..9e5c54a54b 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/data/xml/impl/SiegeScheduleData.java @@ -17,9 +17,9 @@ package org.l2jmobius.gameserver.data.xml.impl; import java.io.File; -import java.util.ArrayList; import java.util.Calendar; -import java.util.List; +import java.util.HashMap; +import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; @@ -39,7 +39,7 @@ public class SiegeScheduleData implements IXmlReader { private static final Logger LOGGER = Logger.getLogger(SiegeScheduleData.class.getName()); - private final List _scheduleData = new ArrayList<>(); + private final Map _scheduleData = new HashMap<>(); protected SiegeScheduleData() { @@ -49,14 +49,8 @@ public class SiegeScheduleData implements IXmlReader @Override public synchronized void load() { - _scheduleData.clear(); parseDatapackFile("config/SiegeSchedule.xml"); LOGGER.info(getClass().getSimpleName() + ": Loaded " + _scheduleData.size() + " siege schedulers."); - if (_scheduleData.isEmpty()) - { - _scheduleData.add(new SiegeScheduleDate(new StatSet())); - LOGGER.info(getClass().getSimpleName() + ": Emergency loaded " + _scheduleData.size() + " default siege schedulers."); - } } @Override @@ -85,7 +79,7 @@ public class SiegeScheduleData implements IXmlReader } set.set(key, val); } - _scheduleData.add(new SiegeScheduleDate(set)); + _scheduleData.put(set.getInt("castleId"), new SiegeScheduleDate(set)); break; } } @@ -107,9 +101,9 @@ public class SiegeScheduleData implements IXmlReader } } - public List getScheduleDates() + public SiegeScheduleDate getScheduleDateForCastleId(int castleId) { - return _scheduleData; + return _scheduleData.get(castleId); } public static SiegeScheduleData getInstance() diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java index d854355fb0..fb560f02c9 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/SiegeScheduleDate.java @@ -26,12 +26,14 @@ public class SiegeScheduleDate private final int _day; private final int _hour; private final int _maxConcurrent; + private final boolean _siegeEnabled; public SiegeScheduleDate(StatSet set) { _day = set.getInt("day", Calendar.SUNDAY); _hour = set.getInt("hour", 16); _maxConcurrent = set.getInt("maxConcurrent", 5); + _siegeEnabled = set.getBoolean("siegeEnabled", false); } public int getDay() @@ -48,4 +50,9 @@ public class SiegeScheduleDate { return _maxConcurrent; } + + public boolean siegeEnabled() + { + return _siegeEnabled; + } } diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/entity/Siege.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/entity/Siege.java index 32ec9166df..65ecbde5ae 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/entity/Siege.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/entity/Siege.java @@ -1426,35 +1426,42 @@ public class Siege implements Siegable /** Set the date for the next siege. */ private void setNextSiegeDate() { - final Calendar cal = _castle.getSiegeDate(); - if (cal.getTimeInMillis() < System.currentTimeMillis()) + final SiegeScheduleDate holder = SiegeScheduleData.getInstance().getScheduleDateForCastleId(_castle.getResidenceId()); + if (!holder.siegeEnabled()) { - cal.setTimeInMillis(System.currentTimeMillis()); + return; } - for (SiegeScheduleDate holder : SiegeScheduleData.getInstance().getScheduleDates()) + final Calendar calendar = _castle.getSiegeDate(); + if (calendar.getTimeInMillis() < System.currentTimeMillis()) { - cal.set(Calendar.DAY_OF_WEEK, holder.getDay()); - cal.set(Calendar.HOUR_OF_DAY, holder.getHour()); - cal.set(Calendar.MINUTE, 0); - cal.set(Calendar.SECOND, 0); - if (cal.before(Calendar.getInstance())) - { - cal.add(Calendar.WEEK_OF_YEAR, 2); - } + calendar.setTimeInMillis(System.currentTimeMillis()); + } + + calendar.set(Calendar.DAY_OF_WEEK, holder.getDay()); + calendar.set(Calendar.HOUR_OF_DAY, holder.getHour()); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + + if (calendar.before(Calendar.getInstance())) + { + calendar.add(Calendar.WEEK_OF_YEAR, 2); + } + + if (CastleManager.getInstance().getSiegeDates(calendar.getTimeInMillis()) < holder.getMaxConcurrent()) + { + CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), calendar.getTimeInMillis()); - if (CastleManager.getInstance().getSiegeDates(cal.getTimeInMillis()) < holder.getMaxConcurrent()) - { - CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), cal.getTimeInMillis()); - break; - } + Broadcast.toAllOnlinePlayers(new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME).addCastleId(_castle.getResidenceId())); + + // Allow registration for next siege + _isRegistrationOver = false; + } + else + { + // Deny registration for next siege + _isRegistrationOver = true; } - - final SystemMessage sm = new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME); - sm.addCastleId(_castle.getResidenceId()); - Broadcast.toAllOnlinePlayers(sm); - - _isRegistrationOver = false; // Allow registration for next siege } /**