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
}
/**