Addition of extended SiegeSchedule configurations.
Contributed by Trance.
This commit is contained in:
parent
8ff8f5f250
commit
a98f093fb3
@ -1,5 +1,12 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../data/xsd/SiegeSchedule.xsd">
|
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../data/xsd/SiegeSchedule.xsd">
|
||||||
<schedule day="SUNDAY" hour="16" maxConcurrent="5" />
|
<schedule castleId="1" castleName="Gludio" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
<schedule day="SUNDAY" hour="20" maxConcurrent="5" />
|
<schedule castleId="2" castleName="Dion" siegeEnabled="true" day="SUNDAY" hour="20" maxConcurrent="5" />
|
||||||
|
<schedule castleId="3" castleName="Giran" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="4" castleName="Oren" siegeEnabled="true" day="SUNDAY" hour="20" maxConcurrent="5" />
|
||||||
|
<schedule castleId="5" castleName="Aden" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="6" castleName="Innadril" siegeEnabled="true" day="SUNDAY" hour="20" maxConcurrent="5" />
|
||||||
|
<schedule castleId="7" castleName="Goddard" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="8" castleName="Rune" siegeEnabled="true" day="SUNDAY" hour="20" maxConcurrent="5" />
|
||||||
|
<schedule castleId="9" castleName="Schuttgart" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
</list>
|
</list>
|
@ -5,6 +5,9 @@
|
|||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element name="schedule" maxOccurs="unbounded">
|
<xs:element name="schedule" maxOccurs="unbounded">
|
||||||
<xs:complexType>
|
<xs:complexType>
|
||||||
|
<xs:attribute type="xs:byte" name="castleId" use="optional" />
|
||||||
|
<xs:attribute type="xs:string" name="castleName" use="optional" />
|
||||||
|
<xs:attribute type="xs:boolean" name="siegeEnabled" use="optional" />
|
||||||
<xs:attribute type="xs:string" name="day" use="optional" />
|
<xs:attribute type="xs:string" name="day" use="optional" />
|
||||||
<xs:attribute type="xs:byte" name="hour" use="optional" />
|
<xs:attribute type="xs:byte" name="hour" use="optional" />
|
||||||
<xs:attribute type="xs:byte" name="maxConcurrent" use="optional" />
|
<xs:attribute type="xs:byte" name="maxConcurrent" use="optional" />
|
||||||
|
@ -17,9 +17,9 @@
|
|||||||
package org.l2jmobius.gameserver.data.xml.impl;
|
package org.l2jmobius.gameserver.data.xml.impl;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Calendar;
|
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.Level;
|
||||||
import java.util.logging.Logger;
|
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 static final Logger LOGGER = Logger.getLogger(SiegeScheduleData.class.getName());
|
||||||
|
|
||||||
private final List<SiegeScheduleDate> _scheduleData = new ArrayList<>();
|
private final Map<Integer, SiegeScheduleDate> _scheduleData = new HashMap<>();
|
||||||
|
|
||||||
protected SiegeScheduleData()
|
protected SiegeScheduleData()
|
||||||
{
|
{
|
||||||
@ -49,14 +49,8 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
@Override
|
@Override
|
||||||
public synchronized void load()
|
public synchronized void load()
|
||||||
{
|
{
|
||||||
_scheduleData.clear();
|
|
||||||
parseDatapackFile("config/SiegeSchedule.xml");
|
parseDatapackFile("config/SiegeSchedule.xml");
|
||||||
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _scheduleData.size() + " siege schedulers.");
|
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
|
@Override
|
||||||
@ -85,7 +79,7 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
}
|
}
|
||||||
set.set(key, val);
|
set.set(key, val);
|
||||||
}
|
}
|
||||||
_scheduleData.add(new SiegeScheduleDate(set));
|
_scheduleData.put(set.getInt("castleId"), new SiegeScheduleDate(set));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -107,9 +101,9 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<SiegeScheduleDate> getScheduleDates()
|
public SiegeScheduleDate getScheduleDateForCastleId(int castleId)
|
||||||
{
|
{
|
||||||
return _scheduleData;
|
return _scheduleData.get(castleId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SiegeScheduleData getInstance()
|
public static SiegeScheduleData getInstance()
|
||||||
|
@ -26,12 +26,14 @@ public class SiegeScheduleDate
|
|||||||
private final int _day;
|
private final int _day;
|
||||||
private final int _hour;
|
private final int _hour;
|
||||||
private final int _maxConcurrent;
|
private final int _maxConcurrent;
|
||||||
|
private final boolean _siegeEnabled;
|
||||||
|
|
||||||
public SiegeScheduleDate(StatSet set)
|
public SiegeScheduleDate(StatSet set)
|
||||||
{
|
{
|
||||||
_day = set.getInt("day", Calendar.SUNDAY);
|
_day = set.getInt("day", Calendar.SUNDAY);
|
||||||
_hour = set.getInt("hour", 16);
|
_hour = set.getInt("hour", 16);
|
||||||
_maxConcurrent = set.getInt("maxConcurrent", 5);
|
_maxConcurrent = set.getInt("maxConcurrent", 5);
|
||||||
|
_siegeEnabled = set.getBoolean("siegeEnabled", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getDay()
|
public int getDay()
|
||||||
@ -48,4 +50,9 @@ public class SiegeScheduleDate
|
|||||||
{
|
{
|
||||||
return _maxConcurrent;
|
return _maxConcurrent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean siegeEnabled()
|
||||||
|
{
|
||||||
|
return _siegeEnabled;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1426,35 +1426,42 @@ public class Siege implements Siegable
|
|||||||
/** Set the date for the next siege. */
|
/** Set the date for the next siege. */
|
||||||
private void setNextSiegeDate()
|
private void setNextSiegeDate()
|
||||||
{
|
{
|
||||||
final Calendar cal = _castle.getSiegeDate();
|
final SiegeScheduleDate holder = SiegeScheduleData.getInstance().getScheduleDateForCastleId(_castle.getResidenceId());
|
||||||
if (cal.getTimeInMillis() < System.currentTimeMillis())
|
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());
|
calendar.setTimeInMillis(System.currentTimeMillis());
|
||||||
cal.set(Calendar.HOUR_OF_DAY, holder.getHour());
|
}
|
||||||
cal.set(Calendar.MINUTE, 0);
|
|
||||||
cal.set(Calendar.SECOND, 0);
|
calendar.set(Calendar.DAY_OF_WEEK, holder.getDay());
|
||||||
if (cal.before(Calendar.getInstance()))
|
calendar.set(Calendar.HOUR_OF_DAY, holder.getHour());
|
||||||
{
|
calendar.set(Calendar.MINUTE, 0);
|
||||||
cal.add(Calendar.WEEK_OF_YEAR, 2);
|
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())
|
Broadcast.toAllOnlinePlayers(new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME).addCastleId(_castle.getResidenceId()));
|
||||||
{
|
|
||||||
CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), cal.getTimeInMillis());
|
// Allow registration for next siege
|
||||||
break;
|
_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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,5 +1,12 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../data/xsd/SiegeSchedule.xsd">
|
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../data/xsd/SiegeSchedule.xsd">
|
||||||
<schedule day="SUNDAY" hour="16" maxConcurrent="5" />
|
<schedule castleId="1" castleName="Gludio" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
<schedule day="SUNDAY" hour="20" maxConcurrent="5" />
|
<schedule castleId="2" castleName="Dion" siegeEnabled="true" day="SUNDAY" hour="20" maxConcurrent="5" />
|
||||||
|
<schedule castleId="3" castleName="Giran" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="4" castleName="Oren" siegeEnabled="true" day="SUNDAY" hour="20" maxConcurrent="5" />
|
||||||
|
<schedule castleId="5" castleName="Aden" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="6" castleName="Innadril" siegeEnabled="true" day="SUNDAY" hour="20" maxConcurrent="5" />
|
||||||
|
<schedule castleId="7" castleName="Goddard" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="8" castleName="Rune" siegeEnabled="true" day="SUNDAY" hour="20" maxConcurrent="5" />
|
||||||
|
<schedule castleId="9" castleName="Schuttgart" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
</list>
|
</list>
|
@ -5,6 +5,9 @@
|
|||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element name="schedule" maxOccurs="unbounded">
|
<xs:element name="schedule" maxOccurs="unbounded">
|
||||||
<xs:complexType>
|
<xs:complexType>
|
||||||
|
<xs:attribute type="xs:byte" name="castleId" use="optional" />
|
||||||
|
<xs:attribute type="xs:string" name="castleName" use="optional" />
|
||||||
|
<xs:attribute type="xs:boolean" name="siegeEnabled" use="optional" />
|
||||||
<xs:attribute type="xs:string" name="day" use="optional" />
|
<xs:attribute type="xs:string" name="day" use="optional" />
|
||||||
<xs:attribute type="xs:byte" name="hour" use="optional" />
|
<xs:attribute type="xs:byte" name="hour" use="optional" />
|
||||||
<xs:attribute type="xs:byte" name="maxConcurrent" use="optional" />
|
<xs:attribute type="xs:byte" name="maxConcurrent" use="optional" />
|
||||||
|
@ -17,9 +17,9 @@
|
|||||||
package org.l2jmobius.gameserver.data.xml.impl;
|
package org.l2jmobius.gameserver.data.xml.impl;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Calendar;
|
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.Level;
|
||||||
import java.util.logging.Logger;
|
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 static final Logger LOGGER = Logger.getLogger(SiegeScheduleData.class.getName());
|
||||||
|
|
||||||
private final List<SiegeScheduleDate> _scheduleData = new ArrayList<>();
|
private final Map<Integer, SiegeScheduleDate> _scheduleData = new HashMap<>();
|
||||||
|
|
||||||
protected SiegeScheduleData()
|
protected SiegeScheduleData()
|
||||||
{
|
{
|
||||||
@ -49,14 +49,8 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
@Override
|
@Override
|
||||||
public synchronized void load()
|
public synchronized void load()
|
||||||
{
|
{
|
||||||
_scheduleData.clear();
|
|
||||||
parseDatapackFile("config/SiegeSchedule.xml");
|
parseDatapackFile("config/SiegeSchedule.xml");
|
||||||
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _scheduleData.size() + " siege schedulers.");
|
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
|
@Override
|
||||||
@ -85,7 +79,7 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
}
|
}
|
||||||
set.set(key, val);
|
set.set(key, val);
|
||||||
}
|
}
|
||||||
_scheduleData.add(new SiegeScheduleDate(set));
|
_scheduleData.put(set.getInt("castleId"), new SiegeScheduleDate(set));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -107,9 +101,9 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<SiegeScheduleDate> getScheduleDates()
|
public SiegeScheduleDate getScheduleDateForCastleId(int castleId)
|
||||||
{
|
{
|
||||||
return _scheduleData;
|
return _scheduleData.get(castleId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SiegeScheduleData getInstance()
|
public static SiegeScheduleData getInstance()
|
||||||
|
@ -26,12 +26,14 @@ public class SiegeScheduleDate
|
|||||||
private final int _day;
|
private final int _day;
|
||||||
private final int _hour;
|
private final int _hour;
|
||||||
private final int _maxConcurrent;
|
private final int _maxConcurrent;
|
||||||
|
private final boolean _siegeEnabled;
|
||||||
|
|
||||||
public SiegeScheduleDate(StatSet set)
|
public SiegeScheduleDate(StatSet set)
|
||||||
{
|
{
|
||||||
_day = set.getInt("day", Calendar.SUNDAY);
|
_day = set.getInt("day", Calendar.SUNDAY);
|
||||||
_hour = set.getInt("hour", 16);
|
_hour = set.getInt("hour", 16);
|
||||||
_maxConcurrent = set.getInt("maxConcurrent", 5);
|
_maxConcurrent = set.getInt("maxConcurrent", 5);
|
||||||
|
_siegeEnabled = set.getBoolean("siegeEnabled", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getDay()
|
public int getDay()
|
||||||
@ -48,4 +50,9 @@ public class SiegeScheduleDate
|
|||||||
{
|
{
|
||||||
return _maxConcurrent;
|
return _maxConcurrent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean siegeEnabled()
|
||||||
|
{
|
||||||
|
return _siegeEnabled;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1426,35 +1426,42 @@ public class Siege implements Siegable
|
|||||||
/** Set the date for the next siege. */
|
/** Set the date for the next siege. */
|
||||||
private void setNextSiegeDate()
|
private void setNextSiegeDate()
|
||||||
{
|
{
|
||||||
final Calendar cal = _castle.getSiegeDate();
|
final SiegeScheduleDate holder = SiegeScheduleData.getInstance().getScheduleDateForCastleId(_castle.getResidenceId());
|
||||||
if (cal.getTimeInMillis() < System.currentTimeMillis())
|
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());
|
calendar.setTimeInMillis(System.currentTimeMillis());
|
||||||
cal.set(Calendar.HOUR_OF_DAY, holder.getHour());
|
}
|
||||||
cal.set(Calendar.MINUTE, 0);
|
|
||||||
cal.set(Calendar.SECOND, 0);
|
calendar.set(Calendar.DAY_OF_WEEK, holder.getDay());
|
||||||
if (cal.before(Calendar.getInstance()))
|
calendar.set(Calendar.HOUR_OF_DAY, holder.getHour());
|
||||||
{
|
calendar.set(Calendar.MINUTE, 0);
|
||||||
cal.add(Calendar.WEEK_OF_YEAR, 2);
|
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())
|
Broadcast.toAllOnlinePlayers(new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME).addCastleId(_castle.getResidenceId()));
|
||||||
{
|
|
||||||
CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), cal.getTimeInMillis());
|
// Allow registration for next siege
|
||||||
break;
|
_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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,5 +1,12 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../data/xsd/SiegeSchedule.xsd">
|
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../data/xsd/SiegeSchedule.xsd">
|
||||||
<schedule day="SUNDAY" hour="16" maxConcurrent="5" />
|
<schedule castleId="1" castleName="Gludio" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
<schedule day="SUNDAY" hour="20" maxConcurrent="5" />
|
<schedule castleId="2" castleName="Dion" siegeEnabled="true" day="SUNDAY" hour="20" maxConcurrent="5" />
|
||||||
|
<schedule castleId="3" castleName="Giran" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="4" castleName="Oren" siegeEnabled="true" day="SUNDAY" hour="20" maxConcurrent="5" />
|
||||||
|
<schedule castleId="5" castleName="Aden" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="6" castleName="Innadril" siegeEnabled="true" day="SUNDAY" hour="20" maxConcurrent="5" />
|
||||||
|
<schedule castleId="7" castleName="Goddard" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="8" castleName="Rune" siegeEnabled="true" day="SUNDAY" hour="20" maxConcurrent="5" />
|
||||||
|
<schedule castleId="9" castleName="Schuttgart" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
</list>
|
</list>
|
@ -5,6 +5,9 @@
|
|||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element name="schedule" maxOccurs="unbounded">
|
<xs:element name="schedule" maxOccurs="unbounded">
|
||||||
<xs:complexType>
|
<xs:complexType>
|
||||||
|
<xs:attribute type="xs:byte" name="castleId" use="optional" />
|
||||||
|
<xs:attribute type="xs:string" name="castleName" use="optional" />
|
||||||
|
<xs:attribute type="xs:boolean" name="siegeEnabled" use="optional" />
|
||||||
<xs:attribute type="xs:string" name="day" use="optional" />
|
<xs:attribute type="xs:string" name="day" use="optional" />
|
||||||
<xs:attribute type="xs:byte" name="hour" use="optional" />
|
<xs:attribute type="xs:byte" name="hour" use="optional" />
|
||||||
<xs:attribute type="xs:byte" name="maxConcurrent" use="optional" />
|
<xs:attribute type="xs:byte" name="maxConcurrent" use="optional" />
|
||||||
|
@ -17,9 +17,9 @@
|
|||||||
package org.l2jmobius.gameserver.data.xml.impl;
|
package org.l2jmobius.gameserver.data.xml.impl;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Calendar;
|
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.Level;
|
||||||
import java.util.logging.Logger;
|
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 static final Logger LOGGER = Logger.getLogger(SiegeScheduleData.class.getName());
|
||||||
|
|
||||||
private final List<SiegeScheduleDate> _scheduleData = new ArrayList<>();
|
private final Map<Integer, SiegeScheduleDate> _scheduleData = new HashMap<>();
|
||||||
|
|
||||||
protected SiegeScheduleData()
|
protected SiegeScheduleData()
|
||||||
{
|
{
|
||||||
@ -49,14 +49,8 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
@Override
|
@Override
|
||||||
public synchronized void load()
|
public synchronized void load()
|
||||||
{
|
{
|
||||||
_scheduleData.clear();
|
|
||||||
parseDatapackFile("config/SiegeSchedule.xml");
|
parseDatapackFile("config/SiegeSchedule.xml");
|
||||||
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _scheduleData.size() + " siege schedulers.");
|
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
|
@Override
|
||||||
@ -85,7 +79,7 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
}
|
}
|
||||||
set.set(key, val);
|
set.set(key, val);
|
||||||
}
|
}
|
||||||
_scheduleData.add(new SiegeScheduleDate(set));
|
_scheduleData.put(set.getInt("castleId"), new SiegeScheduleDate(set));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -107,9 +101,9 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<SiegeScheduleDate> getScheduleDates()
|
public SiegeScheduleDate getScheduleDateForCastleId(int castleId)
|
||||||
{
|
{
|
||||||
return _scheduleData;
|
return _scheduleData.get(castleId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SiegeScheduleData getInstance()
|
public static SiegeScheduleData getInstance()
|
||||||
|
@ -26,12 +26,14 @@ public class SiegeScheduleDate
|
|||||||
private final int _day;
|
private final int _day;
|
||||||
private final int _hour;
|
private final int _hour;
|
||||||
private final int _maxConcurrent;
|
private final int _maxConcurrent;
|
||||||
|
private final boolean _siegeEnabled;
|
||||||
|
|
||||||
public SiegeScheduleDate(StatSet set)
|
public SiegeScheduleDate(StatSet set)
|
||||||
{
|
{
|
||||||
_day = set.getInt("day", Calendar.SUNDAY);
|
_day = set.getInt("day", Calendar.SUNDAY);
|
||||||
_hour = set.getInt("hour", 16);
|
_hour = set.getInt("hour", 16);
|
||||||
_maxConcurrent = set.getInt("maxConcurrent", 5);
|
_maxConcurrent = set.getInt("maxConcurrent", 5);
|
||||||
|
_siegeEnabled = set.getBoolean("siegeEnabled", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getDay()
|
public int getDay()
|
||||||
@ -48,4 +50,9 @@ public class SiegeScheduleDate
|
|||||||
{
|
{
|
||||||
return _maxConcurrent;
|
return _maxConcurrent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean siegeEnabled()
|
||||||
|
{
|
||||||
|
return _siegeEnabled;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1426,35 +1426,42 @@ public class Siege implements Siegable
|
|||||||
/** Set the date for the next siege. */
|
/** Set the date for the next siege. */
|
||||||
private void setNextSiegeDate()
|
private void setNextSiegeDate()
|
||||||
{
|
{
|
||||||
final Calendar cal = _castle.getSiegeDate();
|
final SiegeScheduleDate holder = SiegeScheduleData.getInstance().getScheduleDateForCastleId(_castle.getResidenceId());
|
||||||
if (cal.getTimeInMillis() < System.currentTimeMillis())
|
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());
|
calendar.setTimeInMillis(System.currentTimeMillis());
|
||||||
cal.set(Calendar.HOUR_OF_DAY, holder.getHour());
|
}
|
||||||
cal.set(Calendar.MINUTE, 0);
|
|
||||||
cal.set(Calendar.SECOND, 0);
|
calendar.set(Calendar.DAY_OF_WEEK, holder.getDay());
|
||||||
if (cal.before(Calendar.getInstance()))
|
calendar.set(Calendar.HOUR_OF_DAY, holder.getHour());
|
||||||
{
|
calendar.set(Calendar.MINUTE, 0);
|
||||||
cal.add(Calendar.WEEK_OF_YEAR, 2);
|
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())
|
Broadcast.toAllOnlinePlayers(new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME).addCastleId(_castle.getResidenceId()));
|
||||||
{
|
|
||||||
CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), cal.getTimeInMillis());
|
// Allow registration for next siege
|
||||||
break;
|
_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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,5 +1,12 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../data/xsd/SiegeSchedule.xsd">
|
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../data/xsd/SiegeSchedule.xsd">
|
||||||
<schedule day="SUNDAY" hour="16" maxConcurrent="5" />
|
<schedule castleId="1" castleName="Gludio" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
<schedule day="SUNDAY" hour="20" maxConcurrent="5" />
|
<schedule castleId="2" castleName="Dion" siegeEnabled="true" day="SUNDAY" hour="20" maxConcurrent="5" />
|
||||||
|
<schedule castleId="3" castleName="Giran" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="4" castleName="Oren" siegeEnabled="true" day="SUNDAY" hour="20" maxConcurrent="5" />
|
||||||
|
<schedule castleId="5" castleName="Aden" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="6" castleName="Innadril" siegeEnabled="true" day="SUNDAY" hour="20" maxConcurrent="5" />
|
||||||
|
<schedule castleId="7" castleName="Goddard" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="8" castleName="Rune" siegeEnabled="true" day="SUNDAY" hour="20" maxConcurrent="5" />
|
||||||
|
<schedule castleId="9" castleName="Schuttgart" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
</list>
|
</list>
|
@ -5,6 +5,9 @@
|
|||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element name="schedule" maxOccurs="unbounded">
|
<xs:element name="schedule" maxOccurs="unbounded">
|
||||||
<xs:complexType>
|
<xs:complexType>
|
||||||
|
<xs:attribute type="xs:byte" name="castleId" use="optional" />
|
||||||
|
<xs:attribute type="xs:string" name="castleName" use="optional" />
|
||||||
|
<xs:attribute type="xs:boolean" name="siegeEnabled" use="optional" />
|
||||||
<xs:attribute type="xs:string" name="day" use="optional" />
|
<xs:attribute type="xs:string" name="day" use="optional" />
|
||||||
<xs:attribute type="xs:byte" name="hour" use="optional" />
|
<xs:attribute type="xs:byte" name="hour" use="optional" />
|
||||||
<xs:attribute type="xs:byte" name="maxConcurrent" use="optional" />
|
<xs:attribute type="xs:byte" name="maxConcurrent" use="optional" />
|
||||||
|
@ -17,9 +17,9 @@
|
|||||||
package org.l2jmobius.gameserver.data.xml.impl;
|
package org.l2jmobius.gameserver.data.xml.impl;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Calendar;
|
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.Level;
|
||||||
import java.util.logging.Logger;
|
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 static final Logger LOGGER = Logger.getLogger(SiegeScheduleData.class.getName());
|
||||||
|
|
||||||
private final List<SiegeScheduleDate> _scheduleData = new ArrayList<>();
|
private final Map<Integer, SiegeScheduleDate> _scheduleData = new HashMap<>();
|
||||||
|
|
||||||
protected SiegeScheduleData()
|
protected SiegeScheduleData()
|
||||||
{
|
{
|
||||||
@ -49,14 +49,8 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
@Override
|
@Override
|
||||||
public synchronized void load()
|
public synchronized void load()
|
||||||
{
|
{
|
||||||
_scheduleData.clear();
|
|
||||||
parseDatapackFile("config/SiegeSchedule.xml");
|
parseDatapackFile("config/SiegeSchedule.xml");
|
||||||
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _scheduleData.size() + " siege schedulers.");
|
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
|
@Override
|
||||||
@ -85,7 +79,7 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
}
|
}
|
||||||
set.set(key, val);
|
set.set(key, val);
|
||||||
}
|
}
|
||||||
_scheduleData.add(new SiegeScheduleDate(set));
|
_scheduleData.put(set.getInt("castleId"), new SiegeScheduleDate(set));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -107,9 +101,9 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<SiegeScheduleDate> getScheduleDates()
|
public SiegeScheduleDate getScheduleDateForCastleId(int castleId)
|
||||||
{
|
{
|
||||||
return _scheduleData;
|
return _scheduleData.get(castleId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SiegeScheduleData getInstance()
|
public static SiegeScheduleData getInstance()
|
||||||
|
@ -26,12 +26,14 @@ public class SiegeScheduleDate
|
|||||||
private final int _day;
|
private final int _day;
|
||||||
private final int _hour;
|
private final int _hour;
|
||||||
private final int _maxConcurrent;
|
private final int _maxConcurrent;
|
||||||
|
private final boolean _siegeEnabled;
|
||||||
|
|
||||||
public SiegeScheduleDate(StatSet set)
|
public SiegeScheduleDate(StatSet set)
|
||||||
{
|
{
|
||||||
_day = set.getInt("day", Calendar.SUNDAY);
|
_day = set.getInt("day", Calendar.SUNDAY);
|
||||||
_hour = set.getInt("hour", 16);
|
_hour = set.getInt("hour", 16);
|
||||||
_maxConcurrent = set.getInt("maxConcurrent", 5);
|
_maxConcurrent = set.getInt("maxConcurrent", 5);
|
||||||
|
_siegeEnabled = set.getBoolean("siegeEnabled", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getDay()
|
public int getDay()
|
||||||
@ -48,4 +50,9 @@ public class SiegeScheduleDate
|
|||||||
{
|
{
|
||||||
return _maxConcurrent;
|
return _maxConcurrent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean siegeEnabled()
|
||||||
|
{
|
||||||
|
return _siegeEnabled;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1426,35 +1426,42 @@ public class Siege implements Siegable
|
|||||||
/** Set the date for the next siege. */
|
/** Set the date for the next siege. */
|
||||||
private void setNextSiegeDate()
|
private void setNextSiegeDate()
|
||||||
{
|
{
|
||||||
final Calendar cal = _castle.getSiegeDate();
|
final SiegeScheduleDate holder = SiegeScheduleData.getInstance().getScheduleDateForCastleId(_castle.getResidenceId());
|
||||||
if (cal.getTimeInMillis() < System.currentTimeMillis())
|
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());
|
calendar.setTimeInMillis(System.currentTimeMillis());
|
||||||
cal.set(Calendar.HOUR_OF_DAY, holder.getHour());
|
}
|
||||||
cal.set(Calendar.MINUTE, 0);
|
|
||||||
cal.set(Calendar.SECOND, 0);
|
calendar.set(Calendar.DAY_OF_WEEK, holder.getDay());
|
||||||
if (cal.before(Calendar.getInstance()))
|
calendar.set(Calendar.HOUR_OF_DAY, holder.getHour());
|
||||||
{
|
calendar.set(Calendar.MINUTE, 0);
|
||||||
cal.add(Calendar.WEEK_OF_YEAR, 2);
|
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())
|
Broadcast.toAllOnlinePlayers(new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME).addCastleId(_castle.getResidenceId()));
|
||||||
{
|
|
||||||
CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), cal.getTimeInMillis());
|
// Allow registration for next siege
|
||||||
break;
|
_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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,5 +1,12 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../data/xsd/SiegeSchedule.xsd">
|
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../data/xsd/SiegeSchedule.xsd">
|
||||||
<schedule day="SUNDAY" hour="16" maxConcurrent="5" />
|
<schedule castleId="1" castleName="Gludio" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
<schedule day="SUNDAY" hour="20" maxConcurrent="5" />
|
<schedule castleId="2" castleName="Dion" siegeEnabled="true" day="SUNDAY" hour="20" maxConcurrent="5" />
|
||||||
|
<schedule castleId="3" castleName="Giran" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="4" castleName="Oren" siegeEnabled="true" day="SUNDAY" hour="20" maxConcurrent="5" />
|
||||||
|
<schedule castleId="5" castleName="Aden" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="6" castleName="Innadril" siegeEnabled="true" day="SUNDAY" hour="20" maxConcurrent="5" />
|
||||||
|
<schedule castleId="7" castleName="Goddard" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="8" castleName="Rune" siegeEnabled="true" day="SUNDAY" hour="20" maxConcurrent="5" />
|
||||||
|
<schedule castleId="9" castleName="Schuttgart" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
</list>
|
</list>
|
@ -5,6 +5,9 @@
|
|||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element name="schedule" maxOccurs="unbounded">
|
<xs:element name="schedule" maxOccurs="unbounded">
|
||||||
<xs:complexType>
|
<xs:complexType>
|
||||||
|
<xs:attribute type="xs:byte" name="castleId" use="optional" />
|
||||||
|
<xs:attribute type="xs:string" name="castleName" use="optional" />
|
||||||
|
<xs:attribute type="xs:boolean" name="siegeEnabled" use="optional" />
|
||||||
<xs:attribute type="xs:string" name="day" use="optional" />
|
<xs:attribute type="xs:string" name="day" use="optional" />
|
||||||
<xs:attribute type="xs:byte" name="hour" use="optional" />
|
<xs:attribute type="xs:byte" name="hour" use="optional" />
|
||||||
<xs:attribute type="xs:byte" name="maxConcurrent" use="optional" />
|
<xs:attribute type="xs:byte" name="maxConcurrent" use="optional" />
|
||||||
|
@ -17,9 +17,9 @@
|
|||||||
package org.l2jmobius.gameserver.data.xml.impl;
|
package org.l2jmobius.gameserver.data.xml.impl;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Calendar;
|
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.Level;
|
||||||
import java.util.logging.Logger;
|
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 static final Logger LOGGER = Logger.getLogger(SiegeScheduleData.class.getName());
|
||||||
|
|
||||||
private final List<SiegeScheduleDate> _scheduleData = new ArrayList<>();
|
private final Map<Integer, SiegeScheduleDate> _scheduleData = new HashMap<>();
|
||||||
|
|
||||||
protected SiegeScheduleData()
|
protected SiegeScheduleData()
|
||||||
{
|
{
|
||||||
@ -49,14 +49,8 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
@Override
|
@Override
|
||||||
public synchronized void load()
|
public synchronized void load()
|
||||||
{
|
{
|
||||||
_scheduleData.clear();
|
|
||||||
parseDatapackFile("config/SiegeSchedule.xml");
|
parseDatapackFile("config/SiegeSchedule.xml");
|
||||||
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _scheduleData.size() + " siege schedulers.");
|
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
|
@Override
|
||||||
@ -85,7 +79,7 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
}
|
}
|
||||||
set.set(key, val);
|
set.set(key, val);
|
||||||
}
|
}
|
||||||
_scheduleData.add(new SiegeScheduleDate(set));
|
_scheduleData.put(set.getInt("castleId"), new SiegeScheduleDate(set));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -107,9 +101,9 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<SiegeScheduleDate> getScheduleDates()
|
public SiegeScheduleDate getScheduleDateForCastleId(int castleId)
|
||||||
{
|
{
|
||||||
return _scheduleData;
|
return _scheduleData.get(castleId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SiegeScheduleData getInstance()
|
public static SiegeScheduleData getInstance()
|
||||||
|
@ -26,12 +26,14 @@ public class SiegeScheduleDate
|
|||||||
private final int _day;
|
private final int _day;
|
||||||
private final int _hour;
|
private final int _hour;
|
||||||
private final int _maxConcurrent;
|
private final int _maxConcurrent;
|
||||||
|
private final boolean _siegeEnabled;
|
||||||
|
|
||||||
public SiegeScheduleDate(StatSet set)
|
public SiegeScheduleDate(StatSet set)
|
||||||
{
|
{
|
||||||
_day = set.getInt("day", Calendar.SUNDAY);
|
_day = set.getInt("day", Calendar.SUNDAY);
|
||||||
_hour = set.getInt("hour", 16);
|
_hour = set.getInt("hour", 16);
|
||||||
_maxConcurrent = set.getInt("maxConcurrent", 5);
|
_maxConcurrent = set.getInt("maxConcurrent", 5);
|
||||||
|
_siegeEnabled = set.getBoolean("siegeEnabled", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getDay()
|
public int getDay()
|
||||||
@ -48,4 +50,9 @@ public class SiegeScheduleDate
|
|||||||
{
|
{
|
||||||
return _maxConcurrent;
|
return _maxConcurrent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean siegeEnabled()
|
||||||
|
{
|
||||||
|
return _siegeEnabled;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1426,35 +1426,42 @@ public class Siege implements Siegable
|
|||||||
/** Set the date for the next siege. */
|
/** Set the date for the next siege. */
|
||||||
private void setNextSiegeDate()
|
private void setNextSiegeDate()
|
||||||
{
|
{
|
||||||
final Calendar cal = _castle.getSiegeDate();
|
final SiegeScheduleDate holder = SiegeScheduleData.getInstance().getScheduleDateForCastleId(_castle.getResidenceId());
|
||||||
if (cal.getTimeInMillis() < System.currentTimeMillis())
|
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());
|
calendar.setTimeInMillis(System.currentTimeMillis());
|
||||||
cal.set(Calendar.HOUR_OF_DAY, holder.getHour());
|
}
|
||||||
cal.set(Calendar.MINUTE, 0);
|
|
||||||
cal.set(Calendar.SECOND, 0);
|
calendar.set(Calendar.DAY_OF_WEEK, holder.getDay());
|
||||||
if (cal.before(Calendar.getInstance()))
|
calendar.set(Calendar.HOUR_OF_DAY, holder.getHour());
|
||||||
{
|
calendar.set(Calendar.MINUTE, 0);
|
||||||
cal.add(Calendar.WEEK_OF_YEAR, 2);
|
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())
|
Broadcast.toAllOnlinePlayers(new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME).addCastleId(_castle.getResidenceId()));
|
||||||
{
|
|
||||||
CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), cal.getTimeInMillis());
|
// Allow registration for next siege
|
||||||
break;
|
_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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,5 +1,12 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../data/xsd/SiegeSchedule.xsd">
|
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../data/xsd/SiegeSchedule.xsd">
|
||||||
<schedule day="SUNDAY" hour="16" maxConcurrent="5" />
|
<schedule castleId="1" castleName="Gludio" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
<schedule day="SUNDAY" hour="20" maxConcurrent="5" />
|
<schedule castleId="2" castleName="Dion" siegeEnabled="true" day="SUNDAY" hour="20" maxConcurrent="5" />
|
||||||
|
<schedule castleId="3" castleName="Giran" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="4" castleName="Oren" siegeEnabled="true" day="SUNDAY" hour="20" maxConcurrent="5" />
|
||||||
|
<schedule castleId="5" castleName="Aden" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="6" castleName="Innadril" siegeEnabled="true" day="SUNDAY" hour="20" maxConcurrent="5" />
|
||||||
|
<schedule castleId="7" castleName="Goddard" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="8" castleName="Rune" siegeEnabled="true" day="SUNDAY" hour="20" maxConcurrent="5" />
|
||||||
|
<schedule castleId="9" castleName="Schuttgart" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
</list>
|
</list>
|
@ -5,6 +5,9 @@
|
|||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element name="schedule" maxOccurs="unbounded">
|
<xs:element name="schedule" maxOccurs="unbounded">
|
||||||
<xs:complexType>
|
<xs:complexType>
|
||||||
|
<xs:attribute type="xs:byte" name="castleId" use="optional" />
|
||||||
|
<xs:attribute type="xs:string" name="castleName" use="optional" />
|
||||||
|
<xs:attribute type="xs:boolean" name="siegeEnabled" use="optional" />
|
||||||
<xs:attribute type="xs:string" name="day" use="optional" />
|
<xs:attribute type="xs:string" name="day" use="optional" />
|
||||||
<xs:attribute type="xs:byte" name="hour" use="optional" />
|
<xs:attribute type="xs:byte" name="hour" use="optional" />
|
||||||
<xs:attribute type="xs:byte" name="maxConcurrent" use="optional" />
|
<xs:attribute type="xs:byte" name="maxConcurrent" use="optional" />
|
||||||
|
@ -17,9 +17,9 @@
|
|||||||
package org.l2jmobius.gameserver.data.xml.impl;
|
package org.l2jmobius.gameserver.data.xml.impl;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Calendar;
|
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.Level;
|
||||||
import java.util.logging.Logger;
|
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 static final Logger LOGGER = Logger.getLogger(SiegeScheduleData.class.getName());
|
||||||
|
|
||||||
private final List<SiegeScheduleDate> _scheduleData = new ArrayList<>();
|
private final Map<Integer, SiegeScheduleDate> _scheduleData = new HashMap<>();
|
||||||
|
|
||||||
protected SiegeScheduleData()
|
protected SiegeScheduleData()
|
||||||
{
|
{
|
||||||
@ -49,14 +49,8 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
@Override
|
@Override
|
||||||
public synchronized void load()
|
public synchronized void load()
|
||||||
{
|
{
|
||||||
_scheduleData.clear();
|
|
||||||
parseDatapackFile("config/SiegeSchedule.xml");
|
parseDatapackFile("config/SiegeSchedule.xml");
|
||||||
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _scheduleData.size() + " siege schedulers.");
|
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
|
@Override
|
||||||
@ -85,7 +79,7 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
}
|
}
|
||||||
set.set(key, val);
|
set.set(key, val);
|
||||||
}
|
}
|
||||||
_scheduleData.add(new SiegeScheduleDate(set));
|
_scheduleData.put(set.getInt("castleId"), new SiegeScheduleDate(set));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -107,9 +101,9 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<SiegeScheduleDate> getScheduleDates()
|
public SiegeScheduleDate getScheduleDateForCastleId(int castleId)
|
||||||
{
|
{
|
||||||
return _scheduleData;
|
return _scheduleData.get(castleId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SiegeScheduleData getInstance()
|
public static SiegeScheduleData getInstance()
|
||||||
|
@ -26,12 +26,14 @@ public class SiegeScheduleDate
|
|||||||
private final int _day;
|
private final int _day;
|
||||||
private final int _hour;
|
private final int _hour;
|
||||||
private final int _maxConcurrent;
|
private final int _maxConcurrent;
|
||||||
|
private final boolean _siegeEnabled;
|
||||||
|
|
||||||
public SiegeScheduleDate(StatSet set)
|
public SiegeScheduleDate(StatSet set)
|
||||||
{
|
{
|
||||||
_day = set.getInt("day", Calendar.SUNDAY);
|
_day = set.getInt("day", Calendar.SUNDAY);
|
||||||
_hour = set.getInt("hour", 16);
|
_hour = set.getInt("hour", 16);
|
||||||
_maxConcurrent = set.getInt("maxConcurrent", 5);
|
_maxConcurrent = set.getInt("maxConcurrent", 5);
|
||||||
|
_siegeEnabled = set.getBoolean("siegeEnabled", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getDay()
|
public int getDay()
|
||||||
@ -48,4 +50,9 @@ public class SiegeScheduleDate
|
|||||||
{
|
{
|
||||||
return _maxConcurrent;
|
return _maxConcurrent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean siegeEnabled()
|
||||||
|
{
|
||||||
|
return _siegeEnabled;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1426,35 +1426,42 @@ public class Siege implements Siegable
|
|||||||
/** Set the date for the next siege. */
|
/** Set the date for the next siege. */
|
||||||
private void setNextSiegeDate()
|
private void setNextSiegeDate()
|
||||||
{
|
{
|
||||||
final Calendar cal = _castle.getSiegeDate();
|
final SiegeScheduleDate holder = SiegeScheduleData.getInstance().getScheduleDateForCastleId(_castle.getResidenceId());
|
||||||
if (cal.getTimeInMillis() < System.currentTimeMillis())
|
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());
|
calendar.setTimeInMillis(System.currentTimeMillis());
|
||||||
cal.set(Calendar.HOUR_OF_DAY, holder.getHour());
|
}
|
||||||
cal.set(Calendar.MINUTE, 0);
|
|
||||||
cal.set(Calendar.SECOND, 0);
|
calendar.set(Calendar.DAY_OF_WEEK, holder.getDay());
|
||||||
if (cal.before(Calendar.getInstance()))
|
calendar.set(Calendar.HOUR_OF_DAY, holder.getHour());
|
||||||
{
|
calendar.set(Calendar.MINUTE, 0);
|
||||||
cal.add(Calendar.WEEK_OF_YEAR, 2);
|
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())
|
Broadcast.toAllOnlinePlayers(new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME).addCastleId(_castle.getResidenceId()));
|
||||||
{
|
|
||||||
CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), cal.getTimeInMillis());
|
// Allow registration for next siege
|
||||||
break;
|
_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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,5 +1,12 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../data/xsd/SiegeSchedule.xsd">
|
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../data/xsd/SiegeSchedule.xsd">
|
||||||
<schedule day="SUNDAY" hour="16" maxConcurrent="5" />
|
<schedule castleId="1" castleName="Gludio" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
<schedule day="SUNDAY" hour="20" maxConcurrent="5" />
|
<schedule castleId="2" castleName="Dion" siegeEnabled="true" day="SUNDAY" hour="20" maxConcurrent="5" />
|
||||||
|
<schedule castleId="3" castleName="Giran" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="4" castleName="Oren" siegeEnabled="true" day="SUNDAY" hour="20" maxConcurrent="5" />
|
||||||
|
<schedule castleId="5" castleName="Aden" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="6" castleName="Innadril" siegeEnabled="true" day="SUNDAY" hour="20" maxConcurrent="5" />
|
||||||
|
<schedule castleId="7" castleName="Goddard" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="8" castleName="Rune" siegeEnabled="true" day="SUNDAY" hour="20" maxConcurrent="5" />
|
||||||
|
<schedule castleId="9" castleName="Schuttgart" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
</list>
|
</list>
|
@ -5,6 +5,9 @@
|
|||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element name="schedule" maxOccurs="unbounded">
|
<xs:element name="schedule" maxOccurs="unbounded">
|
||||||
<xs:complexType>
|
<xs:complexType>
|
||||||
|
<xs:attribute type="xs:byte" name="castleId" use="optional" />
|
||||||
|
<xs:attribute type="xs:string" name="castleName" use="optional" />
|
||||||
|
<xs:attribute type="xs:boolean" name="siegeEnabled" use="optional" />
|
||||||
<xs:attribute type="xs:string" name="day" use="optional" />
|
<xs:attribute type="xs:string" name="day" use="optional" />
|
||||||
<xs:attribute type="xs:byte" name="hour" use="optional" />
|
<xs:attribute type="xs:byte" name="hour" use="optional" />
|
||||||
<xs:attribute type="xs:byte" name="maxConcurrent" use="optional" />
|
<xs:attribute type="xs:byte" name="maxConcurrent" use="optional" />
|
||||||
|
@ -17,9 +17,9 @@
|
|||||||
package org.l2jmobius.gameserver.data.xml.impl;
|
package org.l2jmobius.gameserver.data.xml.impl;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Calendar;
|
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.Level;
|
||||||
import java.util.logging.Logger;
|
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 static final Logger LOGGER = Logger.getLogger(SiegeScheduleData.class.getName());
|
||||||
|
|
||||||
private final List<SiegeScheduleDate> _scheduleData = new ArrayList<>();
|
private final Map<Integer, SiegeScheduleDate> _scheduleData = new HashMap<>();
|
||||||
|
|
||||||
protected SiegeScheduleData()
|
protected SiegeScheduleData()
|
||||||
{
|
{
|
||||||
@ -49,14 +49,8 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
@Override
|
@Override
|
||||||
public synchronized void load()
|
public synchronized void load()
|
||||||
{
|
{
|
||||||
_scheduleData.clear();
|
|
||||||
parseDatapackFile("config/SiegeSchedule.xml");
|
parseDatapackFile("config/SiegeSchedule.xml");
|
||||||
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _scheduleData.size() + " siege schedulers.");
|
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
|
@Override
|
||||||
@ -85,7 +79,7 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
}
|
}
|
||||||
set.set(key, val);
|
set.set(key, val);
|
||||||
}
|
}
|
||||||
_scheduleData.add(new SiegeScheduleDate(set));
|
_scheduleData.put(set.getInt("castleId"), new SiegeScheduleDate(set));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -107,9 +101,9 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<SiegeScheduleDate> getScheduleDates()
|
public SiegeScheduleDate getScheduleDateForCastleId(int castleId)
|
||||||
{
|
{
|
||||||
return _scheduleData;
|
return _scheduleData.get(castleId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SiegeScheduleData getInstance()
|
public static SiegeScheduleData getInstance()
|
||||||
|
@ -26,12 +26,14 @@ public class SiegeScheduleDate
|
|||||||
private final int _day;
|
private final int _day;
|
||||||
private final int _hour;
|
private final int _hour;
|
||||||
private final int _maxConcurrent;
|
private final int _maxConcurrent;
|
||||||
|
private final boolean _siegeEnabled;
|
||||||
|
|
||||||
public SiegeScheduleDate(StatSet set)
|
public SiegeScheduleDate(StatSet set)
|
||||||
{
|
{
|
||||||
_day = set.getInt("day", Calendar.SUNDAY);
|
_day = set.getInt("day", Calendar.SUNDAY);
|
||||||
_hour = set.getInt("hour", 16);
|
_hour = set.getInt("hour", 16);
|
||||||
_maxConcurrent = set.getInt("maxConcurrent", 5);
|
_maxConcurrent = set.getInt("maxConcurrent", 5);
|
||||||
|
_siegeEnabled = set.getBoolean("siegeEnabled", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getDay()
|
public int getDay()
|
||||||
@ -48,4 +50,9 @@ public class SiegeScheduleDate
|
|||||||
{
|
{
|
||||||
return _maxConcurrent;
|
return _maxConcurrent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean siegeEnabled()
|
||||||
|
{
|
||||||
|
return _siegeEnabled;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1426,35 +1426,42 @@ public class Siege implements Siegable
|
|||||||
/** Set the date for the next siege. */
|
/** Set the date for the next siege. */
|
||||||
private void setNextSiegeDate()
|
private void setNextSiegeDate()
|
||||||
{
|
{
|
||||||
final Calendar cal = _castle.getSiegeDate();
|
final SiegeScheduleDate holder = SiegeScheduleData.getInstance().getScheduleDateForCastleId(_castle.getResidenceId());
|
||||||
if (cal.getTimeInMillis() < System.currentTimeMillis())
|
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());
|
calendar.setTimeInMillis(System.currentTimeMillis());
|
||||||
cal.set(Calendar.HOUR_OF_DAY, holder.getHour());
|
}
|
||||||
cal.set(Calendar.MINUTE, 0);
|
|
||||||
cal.set(Calendar.SECOND, 0);
|
calendar.set(Calendar.DAY_OF_WEEK, holder.getDay());
|
||||||
if (cal.before(Calendar.getInstance()))
|
calendar.set(Calendar.HOUR_OF_DAY, holder.getHour());
|
||||||
{
|
calendar.set(Calendar.MINUTE, 0);
|
||||||
cal.add(Calendar.WEEK_OF_YEAR, 2);
|
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())
|
Broadcast.toAllOnlinePlayers(new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME).addCastleId(_castle.getResidenceId()));
|
||||||
{
|
|
||||||
CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), cal.getTimeInMillis());
|
// Allow registration for next siege
|
||||||
break;
|
_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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,5 +1,12 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../data/xsd/SiegeSchedule.xsd">
|
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../data/xsd/SiegeSchedule.xsd">
|
||||||
<schedule day="SUNDAY" hour="16" maxConcurrent="5" />
|
<schedule castleId="1" castleName="Gludio" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
<schedule day="SUNDAY" hour="20" maxConcurrent="5" />
|
<schedule castleId="2" castleName="Dion" siegeEnabled="true" day="SUNDAY" hour="20" maxConcurrent="5" />
|
||||||
|
<schedule castleId="3" castleName="Giran" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="4" castleName="Oren" siegeEnabled="true" day="SUNDAY" hour="20" maxConcurrent="5" />
|
||||||
|
<schedule castleId="5" castleName="Aden" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="6" castleName="Innadril" siegeEnabled="true" day="SUNDAY" hour="20" maxConcurrent="5" />
|
||||||
|
<schedule castleId="7" castleName="Goddard" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="8" castleName="Rune" siegeEnabled="true" day="SUNDAY" hour="20" maxConcurrent="5" />
|
||||||
|
<schedule castleId="9" castleName="Schuttgart" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
</list>
|
</list>
|
@ -5,6 +5,9 @@
|
|||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element name="schedule" maxOccurs="unbounded">
|
<xs:element name="schedule" maxOccurs="unbounded">
|
||||||
<xs:complexType>
|
<xs:complexType>
|
||||||
|
<xs:attribute type="xs:byte" name="castleId" use="optional" />
|
||||||
|
<xs:attribute type="xs:string" name="castleName" use="optional" />
|
||||||
|
<xs:attribute type="xs:boolean" name="siegeEnabled" use="optional" />
|
||||||
<xs:attribute type="xs:string" name="day" use="optional" />
|
<xs:attribute type="xs:string" name="day" use="optional" />
|
||||||
<xs:attribute type="xs:byte" name="hour" use="optional" />
|
<xs:attribute type="xs:byte" name="hour" use="optional" />
|
||||||
<xs:attribute type="xs:byte" name="maxConcurrent" use="optional" />
|
<xs:attribute type="xs:byte" name="maxConcurrent" use="optional" />
|
||||||
|
@ -17,9 +17,9 @@
|
|||||||
package org.l2jmobius.gameserver.data.xml.impl;
|
package org.l2jmobius.gameserver.data.xml.impl;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Calendar;
|
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.Level;
|
||||||
import java.util.logging.Logger;
|
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 static final Logger LOGGER = Logger.getLogger(SiegeScheduleData.class.getName());
|
||||||
|
|
||||||
private final List<SiegeScheduleDate> _scheduleData = new ArrayList<>();
|
private final Map<Integer, SiegeScheduleDate> _scheduleData = new HashMap<>();
|
||||||
|
|
||||||
protected SiegeScheduleData()
|
protected SiegeScheduleData()
|
||||||
{
|
{
|
||||||
@ -49,14 +49,8 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
@Override
|
@Override
|
||||||
public synchronized void load()
|
public synchronized void load()
|
||||||
{
|
{
|
||||||
_scheduleData.clear();
|
|
||||||
parseDatapackFile("config/SiegeSchedule.xml");
|
parseDatapackFile("config/SiegeSchedule.xml");
|
||||||
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _scheduleData.size() + " siege schedulers.");
|
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
|
@Override
|
||||||
@ -85,7 +79,7 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
}
|
}
|
||||||
set.set(key, val);
|
set.set(key, val);
|
||||||
}
|
}
|
||||||
_scheduleData.add(new SiegeScheduleDate(set));
|
_scheduleData.put(set.getInt("castleId"), new SiegeScheduleDate(set));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -107,9 +101,9 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<SiegeScheduleDate> getScheduleDates()
|
public SiegeScheduleDate getScheduleDateForCastleId(int castleId)
|
||||||
{
|
{
|
||||||
return _scheduleData;
|
return _scheduleData.get(castleId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SiegeScheduleData getInstance()
|
public static SiegeScheduleData getInstance()
|
||||||
|
@ -26,12 +26,14 @@ public class SiegeScheduleDate
|
|||||||
private final int _day;
|
private final int _day;
|
||||||
private final int _hour;
|
private final int _hour;
|
||||||
private final int _maxConcurrent;
|
private final int _maxConcurrent;
|
||||||
|
private final boolean _siegeEnabled;
|
||||||
|
|
||||||
public SiegeScheduleDate(StatSet set)
|
public SiegeScheduleDate(StatSet set)
|
||||||
{
|
{
|
||||||
_day = set.getInt("day", Calendar.SUNDAY);
|
_day = set.getInt("day", Calendar.SUNDAY);
|
||||||
_hour = set.getInt("hour", 16);
|
_hour = set.getInt("hour", 16);
|
||||||
_maxConcurrent = set.getInt("maxConcurrent", 5);
|
_maxConcurrent = set.getInt("maxConcurrent", 5);
|
||||||
|
_siegeEnabled = set.getBoolean("siegeEnabled", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getDay()
|
public int getDay()
|
||||||
@ -48,4 +50,9 @@ public class SiegeScheduleDate
|
|||||||
{
|
{
|
||||||
return _maxConcurrent;
|
return _maxConcurrent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean siegeEnabled()
|
||||||
|
{
|
||||||
|
return _siegeEnabled;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1426,35 +1426,42 @@ public class Siege implements Siegable
|
|||||||
/** Set the date for the next siege. */
|
/** Set the date for the next siege. */
|
||||||
private void setNextSiegeDate()
|
private void setNextSiegeDate()
|
||||||
{
|
{
|
||||||
final Calendar cal = _castle.getSiegeDate();
|
final SiegeScheduleDate holder = SiegeScheduleData.getInstance().getScheduleDateForCastleId(_castle.getResidenceId());
|
||||||
if (cal.getTimeInMillis() < System.currentTimeMillis())
|
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());
|
calendar.setTimeInMillis(System.currentTimeMillis());
|
||||||
cal.set(Calendar.HOUR_OF_DAY, holder.getHour());
|
}
|
||||||
cal.set(Calendar.MINUTE, 0);
|
|
||||||
cal.set(Calendar.SECOND, 0);
|
calendar.set(Calendar.DAY_OF_WEEK, holder.getDay());
|
||||||
if (cal.before(Calendar.getInstance()))
|
calendar.set(Calendar.HOUR_OF_DAY, holder.getHour());
|
||||||
{
|
calendar.set(Calendar.MINUTE, 0);
|
||||||
cal.add(Calendar.WEEK_OF_YEAR, 2);
|
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())
|
Broadcast.toAllOnlinePlayers(new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME).addCastleId(_castle.getResidenceId()));
|
||||||
{
|
|
||||||
CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), cal.getTimeInMillis());
|
// Allow registration for next siege
|
||||||
break;
|
_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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,5 +1,12 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../data/xsd/SiegeSchedule.xsd">
|
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../data/xsd/SiegeSchedule.xsd">
|
||||||
<schedule day="SUNDAY" hour="16" maxConcurrent="5" />
|
<schedule castleId="1" castleName="Gludio" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
<schedule day="SUNDAY" hour="20" maxConcurrent="5" />
|
<schedule castleId="2" castleName="Dion" siegeEnabled="true" day="SUNDAY" hour="20" maxConcurrent="5" />
|
||||||
|
<schedule castleId="3" castleName="Giran" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="4" castleName="Oren" siegeEnabled="true" day="SUNDAY" hour="20" maxConcurrent="5" />
|
||||||
|
<schedule castleId="5" castleName="Aden" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="6" castleName="Innadril" siegeEnabled="true" day="SUNDAY" hour="20" maxConcurrent="5" />
|
||||||
|
<schedule castleId="7" castleName="Goddard" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="8" castleName="Rune" siegeEnabled="true" day="SUNDAY" hour="20" maxConcurrent="5" />
|
||||||
|
<schedule castleId="9" castleName="Schuttgart" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
</list>
|
</list>
|
@ -5,6 +5,9 @@
|
|||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element name="schedule" maxOccurs="unbounded">
|
<xs:element name="schedule" maxOccurs="unbounded">
|
||||||
<xs:complexType>
|
<xs:complexType>
|
||||||
|
<xs:attribute type="xs:byte" name="castleId" use="optional" />
|
||||||
|
<xs:attribute type="xs:string" name="castleName" use="optional" />
|
||||||
|
<xs:attribute type="xs:boolean" name="siegeEnabled" use="optional" />
|
||||||
<xs:attribute type="xs:string" name="day" use="optional" />
|
<xs:attribute type="xs:string" name="day" use="optional" />
|
||||||
<xs:attribute type="xs:byte" name="hour" use="optional" />
|
<xs:attribute type="xs:byte" name="hour" use="optional" />
|
||||||
<xs:attribute type="xs:byte" name="maxConcurrent" use="optional" />
|
<xs:attribute type="xs:byte" name="maxConcurrent" use="optional" />
|
||||||
|
@ -17,10 +17,11 @@
|
|||||||
package org.l2jmobius.gameserver.data.xml.impl;
|
package org.l2jmobius.gameserver.data.xml.impl;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Calendar;
|
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.Level;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
import org.w3c.dom.Document;
|
import org.w3c.dom.Document;
|
||||||
import org.w3c.dom.NamedNodeMap;
|
import org.w3c.dom.NamedNodeMap;
|
||||||
@ -36,7 +37,9 @@ import org.l2jmobius.gameserver.util.Util;
|
|||||||
*/
|
*/
|
||||||
public class SiegeScheduleData implements IXmlReader
|
public class SiegeScheduleData implements IXmlReader
|
||||||
{
|
{
|
||||||
private final List<SiegeScheduleDate> _scheduleData = new ArrayList<>();
|
private static final Logger LOGGER = Logger.getLogger(SiegeScheduleData.class.getName());
|
||||||
|
|
||||||
|
private final Map<Integer, SiegeScheduleDate> _scheduleData = new HashMap<>();
|
||||||
|
|
||||||
protected SiegeScheduleData()
|
protected SiegeScheduleData()
|
||||||
{
|
{
|
||||||
@ -46,14 +49,8 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
@Override
|
@Override
|
||||||
public synchronized void load()
|
public synchronized void load()
|
||||||
{
|
{
|
||||||
_scheduleData.clear();
|
|
||||||
parseDatapackFile("config/SiegeSchedule.xml");
|
parseDatapackFile("config/SiegeSchedule.xml");
|
||||||
LOGGER.log(Level.INFO, getClass().getSimpleName() + ": Loaded " + _scheduleData.size() + " siege schedulers.");
|
LOGGER.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.");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -82,7 +79,7 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
}
|
}
|
||||||
set.set(key, val);
|
set.set(key, val);
|
||||||
}
|
}
|
||||||
_scheduleData.add(new SiegeScheduleDate(set));
|
_scheduleData.put(set.getInt("castleId"), new SiegeScheduleDate(set));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -95,7 +92,7 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return Calendar.class.getField(field).getInt(Calendar.class);
|
return Calendar.class.getField(field).getInt(Calendar.class.getName());
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
@ -104,9 +101,9 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<SiegeScheduleDate> getScheduleDates()
|
public SiegeScheduleDate getScheduleDateForCastleId(int castleId)
|
||||||
{
|
{
|
||||||
return _scheduleData;
|
return _scheduleData.get(castleId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SiegeScheduleData getInstance()
|
public static SiegeScheduleData getInstance()
|
||||||
|
@ -26,12 +26,14 @@ public class SiegeScheduleDate
|
|||||||
private final int _day;
|
private final int _day;
|
||||||
private final int _hour;
|
private final int _hour;
|
||||||
private final int _maxConcurrent;
|
private final int _maxConcurrent;
|
||||||
|
private final boolean _siegeEnabled;
|
||||||
|
|
||||||
public SiegeScheduleDate(StatSet set)
|
public SiegeScheduleDate(StatSet set)
|
||||||
{
|
{
|
||||||
_day = set.getInt("day", Calendar.SUNDAY);
|
_day = set.getInt("day", Calendar.SUNDAY);
|
||||||
_hour = set.getInt("hour", 16);
|
_hour = set.getInt("hour", 16);
|
||||||
_maxConcurrent = set.getInt("maxConcurrent", 5);
|
_maxConcurrent = set.getInt("maxConcurrent", 5);
|
||||||
|
_siegeEnabled = set.getBoolean("siegeEnabled", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getDay()
|
public int getDay()
|
||||||
@ -48,4 +50,9 @@ public class SiegeScheduleDate
|
|||||||
{
|
{
|
||||||
return _maxConcurrent;
|
return _maxConcurrent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean siegeEnabled()
|
||||||
|
{
|
||||||
|
return _siegeEnabled;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1405,35 +1405,42 @@ public class Siege implements Siegable
|
|||||||
/** Set the date for the next siege. */
|
/** Set the date for the next siege. */
|
||||||
private void setNextSiegeDate()
|
private void setNextSiegeDate()
|
||||||
{
|
{
|
||||||
final Calendar cal = getCastle().getSiegeDate();
|
final SiegeScheduleDate holder = SiegeScheduleData.getInstance().getScheduleDateForCastleId(_castle.getResidenceId());
|
||||||
if (cal.getTimeInMillis() < System.currentTimeMillis())
|
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());
|
calendar.setTimeInMillis(System.currentTimeMillis());
|
||||||
cal.set(Calendar.HOUR_OF_DAY, holder.getHour());
|
}
|
||||||
cal.set(Calendar.MINUTE, 0);
|
|
||||||
cal.set(Calendar.SECOND, 0);
|
calendar.set(Calendar.DAY_OF_WEEK, holder.getDay());
|
||||||
if (cal.before(Calendar.getInstance()))
|
calendar.set(Calendar.HOUR_OF_DAY, holder.getHour());
|
||||||
{
|
calendar.set(Calendar.MINUTE, 0);
|
||||||
cal.add(Calendar.WEEK_OF_YEAR, 2);
|
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())
|
Broadcast.toAllOnlinePlayers(new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME).addCastleId(_castle.getResidenceId()));
|
||||||
{
|
|
||||||
CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), cal.getTimeInMillis());
|
// Allow registration for next siege
|
||||||
break;
|
_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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,5 +1,12 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../data/xsd/SiegeSchedule.xsd">
|
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../data/xsd/SiegeSchedule.xsd">
|
||||||
<schedule day="SUNDAY" hour="16" maxConcurrent="5" />
|
<schedule castleId="1" castleName="Gludio" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
<schedule day="SUNDAY" hour="20" maxConcurrent="5" />
|
<schedule castleId="2" castleName="Dion" siegeEnabled="true" day="SUNDAY" hour="20" maxConcurrent="5" />
|
||||||
|
<schedule castleId="3" castleName="Giran" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="4" castleName="Oren" siegeEnabled="true" day="SUNDAY" hour="20" maxConcurrent="5" />
|
||||||
|
<schedule castleId="5" castleName="Aden" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="6" castleName="Innadril" siegeEnabled="true" day="SUNDAY" hour="20" maxConcurrent="5" />
|
||||||
|
<schedule castleId="7" castleName="Goddard" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="8" castleName="Rune" siegeEnabled="true" day="SUNDAY" hour="20" maxConcurrent="5" />
|
||||||
|
<schedule castleId="9" castleName="Schuttgart" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
</list>
|
</list>
|
@ -5,6 +5,9 @@
|
|||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element name="schedule" maxOccurs="unbounded">
|
<xs:element name="schedule" maxOccurs="unbounded">
|
||||||
<xs:complexType>
|
<xs:complexType>
|
||||||
|
<xs:attribute type="xs:byte" name="castleId" use="optional" />
|
||||||
|
<xs:attribute type="xs:string" name="castleName" use="optional" />
|
||||||
|
<xs:attribute type="xs:boolean" name="siegeEnabled" use="optional" />
|
||||||
<xs:attribute type="xs:string" name="day" use="optional" />
|
<xs:attribute type="xs:string" name="day" use="optional" />
|
||||||
<xs:attribute type="xs:byte" name="hour" use="optional" />
|
<xs:attribute type="xs:byte" name="hour" use="optional" />
|
||||||
<xs:attribute type="xs:byte" name="maxConcurrent" use="optional" />
|
<xs:attribute type="xs:byte" name="maxConcurrent" use="optional" />
|
||||||
|
@ -17,10 +17,11 @@
|
|||||||
package org.l2jmobius.gameserver.data.xml.impl;
|
package org.l2jmobius.gameserver.data.xml.impl;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Calendar;
|
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.Level;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
import org.w3c.dom.Document;
|
import org.w3c.dom.Document;
|
||||||
import org.w3c.dom.NamedNodeMap;
|
import org.w3c.dom.NamedNodeMap;
|
||||||
@ -36,7 +37,9 @@ import org.l2jmobius.gameserver.util.Util;
|
|||||||
*/
|
*/
|
||||||
public class SiegeScheduleData implements IXmlReader
|
public class SiegeScheduleData implements IXmlReader
|
||||||
{
|
{
|
||||||
private final List<SiegeScheduleDate> _scheduleData = new ArrayList<>();
|
private static final Logger LOGGER = Logger.getLogger(SiegeScheduleData.class.getName());
|
||||||
|
|
||||||
|
private final Map<Integer, SiegeScheduleDate> _scheduleData = new HashMap<>();
|
||||||
|
|
||||||
protected SiegeScheduleData()
|
protected SiegeScheduleData()
|
||||||
{
|
{
|
||||||
@ -46,14 +49,8 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
@Override
|
@Override
|
||||||
public synchronized void load()
|
public synchronized void load()
|
||||||
{
|
{
|
||||||
_scheduleData.clear();
|
|
||||||
parseDatapackFile("config/SiegeSchedule.xml");
|
parseDatapackFile("config/SiegeSchedule.xml");
|
||||||
LOGGER.log(Level.INFO, getClass().getSimpleName() + ": Loaded " + _scheduleData.size() + " siege schedulers.");
|
LOGGER.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.");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -82,7 +79,7 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
}
|
}
|
||||||
set.set(key, val);
|
set.set(key, val);
|
||||||
}
|
}
|
||||||
_scheduleData.add(new SiegeScheduleDate(set));
|
_scheduleData.put(set.getInt("castleId"), new SiegeScheduleDate(set));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -95,7 +92,7 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return Calendar.class.getField(field).getInt(Calendar.class);
|
return Calendar.class.getField(field).getInt(Calendar.class.getName());
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
@ -104,9 +101,9 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<SiegeScheduleDate> getScheduleDates()
|
public SiegeScheduleDate getScheduleDateForCastleId(int castleId)
|
||||||
{
|
{
|
||||||
return _scheduleData;
|
return _scheduleData.get(castleId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SiegeScheduleData getInstance()
|
public static SiegeScheduleData getInstance()
|
||||||
|
@ -26,12 +26,14 @@ public class SiegeScheduleDate
|
|||||||
private final int _day;
|
private final int _day;
|
||||||
private final int _hour;
|
private final int _hour;
|
||||||
private final int _maxConcurrent;
|
private final int _maxConcurrent;
|
||||||
|
private final boolean _siegeEnabled;
|
||||||
|
|
||||||
public SiegeScheduleDate(StatSet set)
|
public SiegeScheduleDate(StatSet set)
|
||||||
{
|
{
|
||||||
_day = set.getInt("day", Calendar.SUNDAY);
|
_day = set.getInt("day", Calendar.SUNDAY);
|
||||||
_hour = set.getInt("hour", 16);
|
_hour = set.getInt("hour", 16);
|
||||||
_maxConcurrent = set.getInt("maxConcurrent", 5);
|
_maxConcurrent = set.getInt("maxConcurrent", 5);
|
||||||
|
_siegeEnabled = set.getBoolean("siegeEnabled", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getDay()
|
public int getDay()
|
||||||
@ -48,4 +50,9 @@ public class SiegeScheduleDate
|
|||||||
{
|
{
|
||||||
return _maxConcurrent;
|
return _maxConcurrent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean siegeEnabled()
|
||||||
|
{
|
||||||
|
return _siegeEnabled;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1405,35 +1405,42 @@ public class Siege implements Siegable
|
|||||||
/** Set the date for the next siege. */
|
/** Set the date for the next siege. */
|
||||||
private void setNextSiegeDate()
|
private void setNextSiegeDate()
|
||||||
{
|
{
|
||||||
final Calendar cal = getCastle().getSiegeDate();
|
final SiegeScheduleDate holder = SiegeScheduleData.getInstance().getScheduleDateForCastleId(_castle.getResidenceId());
|
||||||
if (cal.getTimeInMillis() < System.currentTimeMillis())
|
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());
|
calendar.setTimeInMillis(System.currentTimeMillis());
|
||||||
cal.set(Calendar.HOUR_OF_DAY, holder.getHour());
|
}
|
||||||
cal.set(Calendar.MINUTE, 0);
|
|
||||||
cal.set(Calendar.SECOND, 0);
|
calendar.set(Calendar.DAY_OF_WEEK, holder.getDay());
|
||||||
if (cal.before(Calendar.getInstance()))
|
calendar.set(Calendar.HOUR_OF_DAY, holder.getHour());
|
||||||
{
|
calendar.set(Calendar.MINUTE, 0);
|
||||||
cal.add(Calendar.WEEK_OF_YEAR, 2);
|
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())
|
Broadcast.toAllOnlinePlayers(new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME).addCastleId(_castle.getResidenceId()));
|
||||||
{
|
|
||||||
CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), cal.getTimeInMillis());
|
// Allow registration for next siege
|
||||||
break;
|
_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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,4 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../data/xsd/SiegeSchedule.xsd">
|
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../data/xsd/SiegeSchedule.xsd">
|
||||||
<schedule day="SUNDAY" hour="16" maxConcurrent="5" />
|
<schedule castleId="1" castleName="Gludio" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="2" castleName="Dion" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="3" castleName="Giran" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="4" castleName="Oren" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="5" castleName="Aden" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
</list>
|
</list>
|
@ -5,6 +5,9 @@
|
|||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element name="schedule" maxOccurs="unbounded">
|
<xs:element name="schedule" maxOccurs="unbounded">
|
||||||
<xs:complexType>
|
<xs:complexType>
|
||||||
|
<xs:attribute type="xs:byte" name="castleId" use="optional" />
|
||||||
|
<xs:attribute type="xs:string" name="castleName" use="optional" />
|
||||||
|
<xs:attribute type="xs:boolean" name="siegeEnabled" use="optional" />
|
||||||
<xs:attribute type="xs:string" name="day" use="optional" />
|
<xs:attribute type="xs:string" name="day" use="optional" />
|
||||||
<xs:attribute type="xs:byte" name="hour" use="optional" />
|
<xs:attribute type="xs:byte" name="hour" use="optional" />
|
||||||
<xs:attribute type="xs:byte" name="maxConcurrent" use="optional" />
|
<xs:attribute type="xs:byte" name="maxConcurrent" use="optional" />
|
||||||
|
@ -17,9 +17,9 @@
|
|||||||
package org.l2jmobius.gameserver.data.xml.impl;
|
package org.l2jmobius.gameserver.data.xml.impl;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Calendar;
|
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.Level;
|
||||||
import java.util.logging.Logger;
|
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 static final Logger LOGGER = Logger.getLogger(SiegeScheduleData.class.getName());
|
||||||
|
|
||||||
private final List<SiegeScheduleDate> _scheduleData = new ArrayList<>();
|
private final Map<Integer, SiegeScheduleDate> _scheduleData = new HashMap<>();
|
||||||
|
|
||||||
protected SiegeScheduleData()
|
protected SiegeScheduleData()
|
||||||
{
|
{
|
||||||
@ -49,14 +49,8 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
@Override
|
@Override
|
||||||
public synchronized void load()
|
public synchronized void load()
|
||||||
{
|
{
|
||||||
_scheduleData.clear();
|
|
||||||
parseDatapackFile("config/SiegeSchedule.xml");
|
parseDatapackFile("config/SiegeSchedule.xml");
|
||||||
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _scheduleData.size() + " siege schedulers.");
|
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
|
@Override
|
||||||
@ -85,7 +79,7 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
}
|
}
|
||||||
set.set(key, val);
|
set.set(key, val);
|
||||||
}
|
}
|
||||||
_scheduleData.add(new SiegeScheduleDate(set));
|
_scheduleData.put(set.getInt("castleId"), new SiegeScheduleDate(set));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -107,9 +101,9 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<SiegeScheduleDate> getScheduleDates()
|
public SiegeScheduleDate getScheduleDateForCastleId(int castleId)
|
||||||
{
|
{
|
||||||
return _scheduleData;
|
return _scheduleData.get(castleId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SiegeScheduleData getInstance()
|
public static SiegeScheduleData getInstance()
|
||||||
|
@ -26,12 +26,14 @@ public class SiegeScheduleDate
|
|||||||
private final int _day;
|
private final int _day;
|
||||||
private final int _hour;
|
private final int _hour;
|
||||||
private final int _maxConcurrent;
|
private final int _maxConcurrent;
|
||||||
|
private final boolean _siegeEnabled;
|
||||||
|
|
||||||
public SiegeScheduleDate(StatSet set)
|
public SiegeScheduleDate(StatSet set)
|
||||||
{
|
{
|
||||||
_day = set.getInt("day", Calendar.SUNDAY);
|
_day = set.getInt("day", Calendar.SUNDAY);
|
||||||
_hour = set.getInt("hour", 16);
|
_hour = set.getInt("hour", 16);
|
||||||
_maxConcurrent = set.getInt("maxConcurrent", 5);
|
_maxConcurrent = set.getInt("maxConcurrent", 5);
|
||||||
|
_siegeEnabled = set.getBoolean("siegeEnabled", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getDay()
|
public int getDay()
|
||||||
@ -48,4 +50,9 @@ public class SiegeScheduleDate
|
|||||||
{
|
{
|
||||||
return _maxConcurrent;
|
return _maxConcurrent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean siegeEnabled()
|
||||||
|
{
|
||||||
|
return _siegeEnabled;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1426,35 +1426,42 @@ public class Siege implements Siegable
|
|||||||
/** Set the date for the next siege. */
|
/** Set the date for the next siege. */
|
||||||
private void setNextSiegeDate()
|
private void setNextSiegeDate()
|
||||||
{
|
{
|
||||||
final Calendar cal = _castle.getSiegeDate();
|
final SiegeScheduleDate holder = SiegeScheduleData.getInstance().getScheduleDateForCastleId(_castle.getResidenceId());
|
||||||
if (cal.getTimeInMillis() < System.currentTimeMillis())
|
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());
|
calendar.setTimeInMillis(System.currentTimeMillis());
|
||||||
cal.set(Calendar.HOUR_OF_DAY, holder.getHour());
|
}
|
||||||
cal.set(Calendar.MINUTE, 0);
|
|
||||||
cal.set(Calendar.SECOND, 0);
|
calendar.set(Calendar.DAY_OF_WEEK, holder.getDay());
|
||||||
if (cal.before(Calendar.getInstance()))
|
calendar.set(Calendar.HOUR_OF_DAY, holder.getHour());
|
||||||
{
|
calendar.set(Calendar.MINUTE, 0);
|
||||||
cal.add(Calendar.WEEK_OF_YEAR, 2);
|
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())
|
Broadcast.toAllOnlinePlayers(new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME).addCastleId(_castle.getResidenceId()));
|
||||||
{
|
|
||||||
CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), cal.getTimeInMillis());
|
// Allow registration for next siege
|
||||||
break;
|
_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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,4 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../data/xsd/SiegeSchedule.xsd">
|
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../data/xsd/SiegeSchedule.xsd">
|
||||||
<schedule day="SUNDAY" hour="16" maxConcurrent="5" />
|
<schedule castleId="1" castleName="Gludio" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="2" castleName="Dion" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="3" castleName="Giran" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="4" castleName="Oren" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="5" castleName="Aden" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
</list>
|
</list>
|
@ -5,6 +5,9 @@
|
|||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element name="schedule" maxOccurs="unbounded">
|
<xs:element name="schedule" maxOccurs="unbounded">
|
||||||
<xs:complexType>
|
<xs:complexType>
|
||||||
|
<xs:attribute type="xs:byte" name="castleId" use="optional" />
|
||||||
|
<xs:attribute type="xs:string" name="castleName" use="optional" />
|
||||||
|
<xs:attribute type="xs:boolean" name="siegeEnabled" use="optional" />
|
||||||
<xs:attribute type="xs:string" name="day" use="optional" />
|
<xs:attribute type="xs:string" name="day" use="optional" />
|
||||||
<xs:attribute type="xs:byte" name="hour" use="optional" />
|
<xs:attribute type="xs:byte" name="hour" use="optional" />
|
||||||
<xs:attribute type="xs:byte" name="maxConcurrent" use="optional" />
|
<xs:attribute type="xs:byte" name="maxConcurrent" use="optional" />
|
||||||
|
@ -17,9 +17,9 @@
|
|||||||
package org.l2jmobius.gameserver.data.xml.impl;
|
package org.l2jmobius.gameserver.data.xml.impl;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Calendar;
|
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.Level;
|
||||||
import java.util.logging.Logger;
|
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 static final Logger LOGGER = Logger.getLogger(SiegeScheduleData.class.getName());
|
||||||
|
|
||||||
private final List<SiegeScheduleDate> _scheduleData = new ArrayList<>();
|
private final Map<Integer, SiegeScheduleDate> _scheduleData = new HashMap<>();
|
||||||
|
|
||||||
protected SiegeScheduleData()
|
protected SiegeScheduleData()
|
||||||
{
|
{
|
||||||
@ -49,14 +49,8 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
@Override
|
@Override
|
||||||
public synchronized void load()
|
public synchronized void load()
|
||||||
{
|
{
|
||||||
_scheduleData.clear();
|
|
||||||
parseDatapackFile("config/SiegeSchedule.xml");
|
parseDatapackFile("config/SiegeSchedule.xml");
|
||||||
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _scheduleData.size() + " siege schedulers.");
|
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
|
@Override
|
||||||
@ -85,7 +79,7 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
}
|
}
|
||||||
set.set(key, val);
|
set.set(key, val);
|
||||||
}
|
}
|
||||||
_scheduleData.add(new SiegeScheduleDate(set));
|
_scheduleData.put(set.getInt("castleId"), new SiegeScheduleDate(set));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -107,9 +101,9 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<SiegeScheduleDate> getScheduleDates()
|
public SiegeScheduleDate getScheduleDateForCastleId(int castleId)
|
||||||
{
|
{
|
||||||
return _scheduleData;
|
return _scheduleData.get(castleId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SiegeScheduleData getInstance()
|
public static SiegeScheduleData getInstance()
|
||||||
|
@ -26,12 +26,14 @@ public class SiegeScheduleDate
|
|||||||
private final int _day;
|
private final int _day;
|
||||||
private final int _hour;
|
private final int _hour;
|
||||||
private final int _maxConcurrent;
|
private final int _maxConcurrent;
|
||||||
|
private final boolean _siegeEnabled;
|
||||||
|
|
||||||
public SiegeScheduleDate(StatSet set)
|
public SiegeScheduleDate(StatSet set)
|
||||||
{
|
{
|
||||||
_day = set.getInt("day", Calendar.SUNDAY);
|
_day = set.getInt("day", Calendar.SUNDAY);
|
||||||
_hour = set.getInt("hour", 16);
|
_hour = set.getInt("hour", 16);
|
||||||
_maxConcurrent = set.getInt("maxConcurrent", 5);
|
_maxConcurrent = set.getInt("maxConcurrent", 5);
|
||||||
|
_siegeEnabled = set.getBoolean("siegeEnabled", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getDay()
|
public int getDay()
|
||||||
@ -48,4 +50,9 @@ public class SiegeScheduleDate
|
|||||||
{
|
{
|
||||||
return _maxConcurrent;
|
return _maxConcurrent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean siegeEnabled()
|
||||||
|
{
|
||||||
|
return _siegeEnabled;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1426,35 +1426,42 @@ public class Siege implements Siegable
|
|||||||
/** Set the date for the next siege. */
|
/** Set the date for the next siege. */
|
||||||
private void setNextSiegeDate()
|
private void setNextSiegeDate()
|
||||||
{
|
{
|
||||||
final Calendar cal = _castle.getSiegeDate();
|
final SiegeScheduleDate holder = SiegeScheduleData.getInstance().getScheduleDateForCastleId(_castle.getResidenceId());
|
||||||
if (cal.getTimeInMillis() < System.currentTimeMillis())
|
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());
|
calendar.setTimeInMillis(System.currentTimeMillis());
|
||||||
cal.set(Calendar.HOUR_OF_DAY, holder.getHour());
|
}
|
||||||
cal.set(Calendar.MINUTE, 0);
|
|
||||||
cal.set(Calendar.SECOND, 0);
|
calendar.set(Calendar.DAY_OF_WEEK, holder.getDay());
|
||||||
if (cal.before(Calendar.getInstance()))
|
calendar.set(Calendar.HOUR_OF_DAY, holder.getHour());
|
||||||
{
|
calendar.set(Calendar.MINUTE, 0);
|
||||||
cal.add(Calendar.WEEK_OF_YEAR, 2);
|
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())
|
Broadcast.toAllOnlinePlayers(new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME).addCastleId(_castle.getResidenceId()));
|
||||||
{
|
|
||||||
CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), cal.getTimeInMillis());
|
// Allow registration for next siege
|
||||||
break;
|
_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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,4 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../data/xsd/SiegeSchedule.xsd">
|
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../data/xsd/SiegeSchedule.xsd">
|
||||||
<schedule day="SUNDAY" hour="16" maxConcurrent="5" />
|
<schedule castleId="1" castleName="Gludio" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="2" castleName="Dion" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="3" castleName="Giran" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="4" castleName="Oren" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="5" castleName="Aden" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
</list>
|
</list>
|
@ -5,6 +5,9 @@
|
|||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element name="schedule" maxOccurs="unbounded">
|
<xs:element name="schedule" maxOccurs="unbounded">
|
||||||
<xs:complexType>
|
<xs:complexType>
|
||||||
|
<xs:attribute type="xs:byte" name="castleId" use="optional" />
|
||||||
|
<xs:attribute type="xs:string" name="castleName" use="optional" />
|
||||||
|
<xs:attribute type="xs:boolean" name="siegeEnabled" use="optional" />
|
||||||
<xs:attribute type="xs:string" name="day" use="optional" />
|
<xs:attribute type="xs:string" name="day" use="optional" />
|
||||||
<xs:attribute type="xs:byte" name="hour" use="optional" />
|
<xs:attribute type="xs:byte" name="hour" use="optional" />
|
||||||
<xs:attribute type="xs:byte" name="maxConcurrent" use="optional" />
|
<xs:attribute type="xs:byte" name="maxConcurrent" use="optional" />
|
||||||
|
@ -17,9 +17,9 @@
|
|||||||
package org.l2jmobius.gameserver.data.xml.impl;
|
package org.l2jmobius.gameserver.data.xml.impl;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Calendar;
|
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.Level;
|
||||||
import java.util.logging.Logger;
|
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 static final Logger LOGGER = Logger.getLogger(SiegeScheduleData.class.getName());
|
||||||
|
|
||||||
private final List<SiegeScheduleDate> _scheduleData = new ArrayList<>();
|
private final Map<Integer, SiegeScheduleDate> _scheduleData = new HashMap<>();
|
||||||
|
|
||||||
protected SiegeScheduleData()
|
protected SiegeScheduleData()
|
||||||
{
|
{
|
||||||
@ -49,14 +49,8 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
@Override
|
@Override
|
||||||
public synchronized void load()
|
public synchronized void load()
|
||||||
{
|
{
|
||||||
_scheduleData.clear();
|
|
||||||
parseDatapackFile("config/SiegeSchedule.xml");
|
parseDatapackFile("config/SiegeSchedule.xml");
|
||||||
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _scheduleData.size() + " siege schedulers.");
|
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
|
@Override
|
||||||
@ -85,7 +79,7 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
}
|
}
|
||||||
set.set(key, val);
|
set.set(key, val);
|
||||||
}
|
}
|
||||||
_scheduleData.add(new SiegeScheduleDate(set));
|
_scheduleData.put(set.getInt("castleId"), new SiegeScheduleDate(set));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -107,9 +101,9 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<SiegeScheduleDate> getScheduleDates()
|
public SiegeScheduleDate getScheduleDateForCastleId(int castleId)
|
||||||
{
|
{
|
||||||
return _scheduleData;
|
return _scheduleData.get(castleId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SiegeScheduleData getInstance()
|
public static SiegeScheduleData getInstance()
|
||||||
|
@ -26,12 +26,14 @@ public class SiegeScheduleDate
|
|||||||
private final int _day;
|
private final int _day;
|
||||||
private final int _hour;
|
private final int _hour;
|
||||||
private final int _maxConcurrent;
|
private final int _maxConcurrent;
|
||||||
|
private final boolean _siegeEnabled;
|
||||||
|
|
||||||
public SiegeScheduleDate(StatSet set)
|
public SiegeScheduleDate(StatSet set)
|
||||||
{
|
{
|
||||||
_day = set.getInt("day", Calendar.SUNDAY);
|
_day = set.getInt("day", Calendar.SUNDAY);
|
||||||
_hour = set.getInt("hour", 16);
|
_hour = set.getInt("hour", 16);
|
||||||
_maxConcurrent = set.getInt("maxConcurrent", 5);
|
_maxConcurrent = set.getInt("maxConcurrent", 5);
|
||||||
|
_siegeEnabled = set.getBoolean("siegeEnabled", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getDay()
|
public int getDay()
|
||||||
@ -48,4 +50,9 @@ public class SiegeScheduleDate
|
|||||||
{
|
{
|
||||||
return _maxConcurrent;
|
return _maxConcurrent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean siegeEnabled()
|
||||||
|
{
|
||||||
|
return _siegeEnabled;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1426,35 +1426,42 @@ public class Siege implements Siegable
|
|||||||
/** Set the date for the next siege. */
|
/** Set the date for the next siege. */
|
||||||
private void setNextSiegeDate()
|
private void setNextSiegeDate()
|
||||||
{
|
{
|
||||||
final Calendar cal = _castle.getSiegeDate();
|
final SiegeScheduleDate holder = SiegeScheduleData.getInstance().getScheduleDateForCastleId(_castle.getResidenceId());
|
||||||
if (cal.getTimeInMillis() < System.currentTimeMillis())
|
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());
|
calendar.setTimeInMillis(System.currentTimeMillis());
|
||||||
cal.set(Calendar.HOUR_OF_DAY, holder.getHour());
|
}
|
||||||
cal.set(Calendar.MINUTE, 0);
|
|
||||||
cal.set(Calendar.SECOND, 0);
|
calendar.set(Calendar.DAY_OF_WEEK, holder.getDay());
|
||||||
if (cal.before(Calendar.getInstance()))
|
calendar.set(Calendar.HOUR_OF_DAY, holder.getHour());
|
||||||
{
|
calendar.set(Calendar.MINUTE, 0);
|
||||||
cal.add(Calendar.WEEK_OF_YEAR, 2);
|
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())
|
Broadcast.toAllOnlinePlayers(new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME).addCastleId(_castle.getResidenceId()));
|
||||||
{
|
|
||||||
CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), cal.getTimeInMillis());
|
// Allow registration for next siege
|
||||||
break;
|
_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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,4 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../data/xsd/SiegeSchedule.xsd">
|
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../data/xsd/SiegeSchedule.xsd">
|
||||||
<schedule day="SUNDAY" hour="16" maxConcurrent="5" />
|
<schedule castleId="1" castleName="Gludio" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="2" castleName="Dion" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="3" castleName="Giran" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="4" castleName="Oren" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="5" castleName="Aden" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
</list>
|
</list>
|
@ -5,6 +5,9 @@
|
|||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element name="schedule" maxOccurs="unbounded">
|
<xs:element name="schedule" maxOccurs="unbounded">
|
||||||
<xs:complexType>
|
<xs:complexType>
|
||||||
|
<xs:attribute type="xs:byte" name="castleId" use="optional" />
|
||||||
|
<xs:attribute type="xs:string" name="castleName" use="optional" />
|
||||||
|
<xs:attribute type="xs:boolean" name="siegeEnabled" use="optional" />
|
||||||
<xs:attribute type="xs:string" name="day" use="optional" />
|
<xs:attribute type="xs:string" name="day" use="optional" />
|
||||||
<xs:attribute type="xs:byte" name="hour" use="optional" />
|
<xs:attribute type="xs:byte" name="hour" use="optional" />
|
||||||
<xs:attribute type="xs:byte" name="maxConcurrent" use="optional" />
|
<xs:attribute type="xs:byte" name="maxConcurrent" use="optional" />
|
||||||
|
@ -17,9 +17,9 @@
|
|||||||
package org.l2jmobius.gameserver.data.xml.impl;
|
package org.l2jmobius.gameserver.data.xml.impl;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Calendar;
|
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.Level;
|
||||||
import java.util.logging.Logger;
|
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 static final Logger LOGGER = Logger.getLogger(SiegeScheduleData.class.getName());
|
||||||
|
|
||||||
private final List<SiegeScheduleDate> _scheduleData = new ArrayList<>();
|
private final Map<Integer, SiegeScheduleDate> _scheduleData = new HashMap<>();
|
||||||
|
|
||||||
protected SiegeScheduleData()
|
protected SiegeScheduleData()
|
||||||
{
|
{
|
||||||
@ -49,14 +49,8 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
@Override
|
@Override
|
||||||
public synchronized void load()
|
public synchronized void load()
|
||||||
{
|
{
|
||||||
_scheduleData.clear();
|
|
||||||
parseDatapackFile("config/SiegeSchedule.xml");
|
parseDatapackFile("config/SiegeSchedule.xml");
|
||||||
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _scheduleData.size() + " siege schedulers.");
|
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
|
@Override
|
||||||
@ -85,7 +79,7 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
}
|
}
|
||||||
set.set(key, val);
|
set.set(key, val);
|
||||||
}
|
}
|
||||||
_scheduleData.add(new SiegeScheduleDate(set));
|
_scheduleData.put(set.getInt("castleId"), new SiegeScheduleDate(set));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -107,9 +101,9 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<SiegeScheduleDate> getScheduleDates()
|
public SiegeScheduleDate getScheduleDateForCastleId(int castleId)
|
||||||
{
|
{
|
||||||
return _scheduleData;
|
return _scheduleData.get(castleId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SiegeScheduleData getInstance()
|
public static SiegeScheduleData getInstance()
|
||||||
|
@ -26,12 +26,14 @@ public class SiegeScheduleDate
|
|||||||
private final int _day;
|
private final int _day;
|
||||||
private final int _hour;
|
private final int _hour;
|
||||||
private final int _maxConcurrent;
|
private final int _maxConcurrent;
|
||||||
|
private final boolean _siegeEnabled;
|
||||||
|
|
||||||
public SiegeScheduleDate(StatSet set)
|
public SiegeScheduleDate(StatSet set)
|
||||||
{
|
{
|
||||||
_day = set.getInt("day", Calendar.SUNDAY);
|
_day = set.getInt("day", Calendar.SUNDAY);
|
||||||
_hour = set.getInt("hour", 16);
|
_hour = set.getInt("hour", 16);
|
||||||
_maxConcurrent = set.getInt("maxConcurrent", 5);
|
_maxConcurrent = set.getInt("maxConcurrent", 5);
|
||||||
|
_siegeEnabled = set.getBoolean("siegeEnabled", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getDay()
|
public int getDay()
|
||||||
@ -48,4 +50,9 @@ public class SiegeScheduleDate
|
|||||||
{
|
{
|
||||||
return _maxConcurrent;
|
return _maxConcurrent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean siegeEnabled()
|
||||||
|
{
|
||||||
|
return _siegeEnabled;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1426,35 +1426,42 @@ public class Siege implements Siegable
|
|||||||
/** Set the date for the next siege. */
|
/** Set the date for the next siege. */
|
||||||
private void setNextSiegeDate()
|
private void setNextSiegeDate()
|
||||||
{
|
{
|
||||||
final Calendar cal = _castle.getSiegeDate();
|
final SiegeScheduleDate holder = SiegeScheduleData.getInstance().getScheduleDateForCastleId(_castle.getResidenceId());
|
||||||
if (cal.getTimeInMillis() < System.currentTimeMillis())
|
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());
|
calendar.setTimeInMillis(System.currentTimeMillis());
|
||||||
cal.set(Calendar.HOUR_OF_DAY, holder.getHour());
|
}
|
||||||
cal.set(Calendar.MINUTE, 0);
|
|
||||||
cal.set(Calendar.SECOND, 0);
|
calendar.set(Calendar.DAY_OF_WEEK, holder.getDay());
|
||||||
if (cal.before(Calendar.getInstance()))
|
calendar.set(Calendar.HOUR_OF_DAY, holder.getHour());
|
||||||
{
|
calendar.set(Calendar.MINUTE, 0);
|
||||||
cal.add(Calendar.WEEK_OF_YEAR, 2);
|
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())
|
Broadcast.toAllOnlinePlayers(new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME).addCastleId(_castle.getResidenceId()));
|
||||||
{
|
|
||||||
CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), cal.getTimeInMillis());
|
// Allow registration for next siege
|
||||||
break;
|
_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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,4 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../data/xsd/SiegeSchedule.xsd">
|
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../data/xsd/SiegeSchedule.xsd">
|
||||||
<schedule day="SUNDAY" hour="16" maxConcurrent="5" />
|
<schedule castleId="1" castleName="Gludio" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="2" castleName="Dion" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="3" castleName="Giran" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="4" castleName="Oren" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="5" castleName="Aden" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
</list>
|
</list>
|
@ -5,6 +5,9 @@
|
|||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element name="schedule" maxOccurs="unbounded">
|
<xs:element name="schedule" maxOccurs="unbounded">
|
||||||
<xs:complexType>
|
<xs:complexType>
|
||||||
|
<xs:attribute type="xs:byte" name="castleId" use="optional" />
|
||||||
|
<xs:attribute type="xs:string" name="castleName" use="optional" />
|
||||||
|
<xs:attribute type="xs:boolean" name="siegeEnabled" use="optional" />
|
||||||
<xs:attribute type="xs:string" name="day" use="optional" />
|
<xs:attribute type="xs:string" name="day" use="optional" />
|
||||||
<xs:attribute type="xs:byte" name="hour" use="optional" />
|
<xs:attribute type="xs:byte" name="hour" use="optional" />
|
||||||
<xs:attribute type="xs:byte" name="maxConcurrent" use="optional" />
|
<xs:attribute type="xs:byte" name="maxConcurrent" use="optional" />
|
||||||
|
@ -17,9 +17,9 @@
|
|||||||
package org.l2jmobius.gameserver.data.xml.impl;
|
package org.l2jmobius.gameserver.data.xml.impl;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Calendar;
|
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.Level;
|
||||||
import java.util.logging.Logger;
|
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 static final Logger LOGGER = Logger.getLogger(SiegeScheduleData.class.getName());
|
||||||
|
|
||||||
private final List<SiegeScheduleDate> _scheduleData = new ArrayList<>();
|
private final Map<Integer, SiegeScheduleDate> _scheduleData = new HashMap<>();
|
||||||
|
|
||||||
protected SiegeScheduleData()
|
protected SiegeScheduleData()
|
||||||
{
|
{
|
||||||
@ -49,14 +49,8 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
@Override
|
@Override
|
||||||
public synchronized void load()
|
public synchronized void load()
|
||||||
{
|
{
|
||||||
_scheduleData.clear();
|
|
||||||
parseDatapackFile("config/SiegeSchedule.xml");
|
parseDatapackFile("config/SiegeSchedule.xml");
|
||||||
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _scheduleData.size() + " siege schedulers.");
|
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
|
@Override
|
||||||
@ -85,7 +79,7 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
}
|
}
|
||||||
set.set(key, val);
|
set.set(key, val);
|
||||||
}
|
}
|
||||||
_scheduleData.add(new SiegeScheduleDate(set));
|
_scheduleData.put(set.getInt("castleId"), new SiegeScheduleDate(set));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -107,9 +101,9 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<SiegeScheduleDate> getScheduleDates()
|
public SiegeScheduleDate getScheduleDateForCastleId(int castleId)
|
||||||
{
|
{
|
||||||
return _scheduleData;
|
return _scheduleData.get(castleId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SiegeScheduleData getInstance()
|
public static SiegeScheduleData getInstance()
|
||||||
|
@ -26,12 +26,14 @@ public class SiegeScheduleDate
|
|||||||
private final int _day;
|
private final int _day;
|
||||||
private final int _hour;
|
private final int _hour;
|
||||||
private final int _maxConcurrent;
|
private final int _maxConcurrent;
|
||||||
|
private final boolean _siegeEnabled;
|
||||||
|
|
||||||
public SiegeScheduleDate(StatSet set)
|
public SiegeScheduleDate(StatSet set)
|
||||||
{
|
{
|
||||||
_day = set.getInt("day", Calendar.SUNDAY);
|
_day = set.getInt("day", Calendar.SUNDAY);
|
||||||
_hour = set.getInt("hour", 16);
|
_hour = set.getInt("hour", 16);
|
||||||
_maxConcurrent = set.getInt("maxConcurrent", 5);
|
_maxConcurrent = set.getInt("maxConcurrent", 5);
|
||||||
|
_siegeEnabled = set.getBoolean("siegeEnabled", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getDay()
|
public int getDay()
|
||||||
@ -48,4 +50,9 @@ public class SiegeScheduleDate
|
|||||||
{
|
{
|
||||||
return _maxConcurrent;
|
return _maxConcurrent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean siegeEnabled()
|
||||||
|
{
|
||||||
|
return _siegeEnabled;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1426,35 +1426,42 @@ public class Siege implements Siegable
|
|||||||
/** Set the date for the next siege. */
|
/** Set the date for the next siege. */
|
||||||
private void setNextSiegeDate()
|
private void setNextSiegeDate()
|
||||||
{
|
{
|
||||||
final Calendar cal = _castle.getSiegeDate();
|
final SiegeScheduleDate holder = SiegeScheduleData.getInstance().getScheduleDateForCastleId(_castle.getResidenceId());
|
||||||
if (cal.getTimeInMillis() < System.currentTimeMillis())
|
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());
|
calendar.setTimeInMillis(System.currentTimeMillis());
|
||||||
cal.set(Calendar.HOUR_OF_DAY, holder.getHour());
|
}
|
||||||
cal.set(Calendar.MINUTE, 0);
|
|
||||||
cal.set(Calendar.SECOND, 0);
|
calendar.set(Calendar.DAY_OF_WEEK, holder.getDay());
|
||||||
if (cal.before(Calendar.getInstance()))
|
calendar.set(Calendar.HOUR_OF_DAY, holder.getHour());
|
||||||
{
|
calendar.set(Calendar.MINUTE, 0);
|
||||||
cal.add(Calendar.WEEK_OF_YEAR, 2);
|
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())
|
Broadcast.toAllOnlinePlayers(new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME).addCastleId(_castle.getResidenceId()));
|
||||||
{
|
|
||||||
CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), cal.getTimeInMillis());
|
// Allow registration for next siege
|
||||||
break;
|
_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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,4 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../data/xsd/SiegeSchedule.xsd">
|
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../data/xsd/SiegeSchedule.xsd">
|
||||||
<schedule day="SUNDAY" hour="16" maxConcurrent="5" />
|
<schedule castleId="1" castleName="Gludio" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="2" castleName="Dion" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="3" castleName="Giran" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="4" castleName="Oren" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="5" castleName="Aden" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
</list>
|
</list>
|
@ -5,6 +5,9 @@
|
|||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element name="schedule" maxOccurs="unbounded">
|
<xs:element name="schedule" maxOccurs="unbounded">
|
||||||
<xs:complexType>
|
<xs:complexType>
|
||||||
|
<xs:attribute type="xs:byte" name="castleId" use="optional" />
|
||||||
|
<xs:attribute type="xs:string" name="castleName" use="optional" />
|
||||||
|
<xs:attribute type="xs:boolean" name="siegeEnabled" use="optional" />
|
||||||
<xs:attribute type="xs:string" name="day" use="optional" />
|
<xs:attribute type="xs:string" name="day" use="optional" />
|
||||||
<xs:attribute type="xs:byte" name="hour" use="optional" />
|
<xs:attribute type="xs:byte" name="hour" use="optional" />
|
||||||
<xs:attribute type="xs:byte" name="maxConcurrent" use="optional" />
|
<xs:attribute type="xs:byte" name="maxConcurrent" use="optional" />
|
||||||
|
@ -17,9 +17,9 @@
|
|||||||
package org.l2jmobius.gameserver.data.xml.impl;
|
package org.l2jmobius.gameserver.data.xml.impl;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Calendar;
|
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.Level;
|
||||||
import java.util.logging.Logger;
|
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 static final Logger LOGGER = Logger.getLogger(SiegeScheduleData.class.getName());
|
||||||
|
|
||||||
private final List<SiegeScheduleDate> _scheduleData = new ArrayList<>();
|
private final Map<Integer, SiegeScheduleDate> _scheduleData = new HashMap<>();
|
||||||
|
|
||||||
protected SiegeScheduleData()
|
protected SiegeScheduleData()
|
||||||
{
|
{
|
||||||
@ -49,14 +49,8 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
@Override
|
@Override
|
||||||
public synchronized void load()
|
public synchronized void load()
|
||||||
{
|
{
|
||||||
_scheduleData.clear();
|
|
||||||
parseDatapackFile("config/SiegeSchedule.xml");
|
parseDatapackFile("config/SiegeSchedule.xml");
|
||||||
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _scheduleData.size() + " siege schedulers.");
|
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
|
@Override
|
||||||
@ -85,7 +79,7 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
}
|
}
|
||||||
set.set(key, val);
|
set.set(key, val);
|
||||||
}
|
}
|
||||||
_scheduleData.add(new SiegeScheduleDate(set));
|
_scheduleData.put(set.getInt("castleId"), new SiegeScheduleDate(set));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -107,9 +101,9 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<SiegeScheduleDate> getScheduleDates()
|
public SiegeScheduleDate getScheduleDateForCastleId(int castleId)
|
||||||
{
|
{
|
||||||
return _scheduleData;
|
return _scheduleData.get(castleId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SiegeScheduleData getInstance()
|
public static SiegeScheduleData getInstance()
|
||||||
|
@ -26,12 +26,14 @@ public class SiegeScheduleDate
|
|||||||
private final int _day;
|
private final int _day;
|
||||||
private final int _hour;
|
private final int _hour;
|
||||||
private final int _maxConcurrent;
|
private final int _maxConcurrent;
|
||||||
|
private final boolean _siegeEnabled;
|
||||||
|
|
||||||
public SiegeScheduleDate(StatSet set)
|
public SiegeScheduleDate(StatSet set)
|
||||||
{
|
{
|
||||||
_day = set.getInt("day", Calendar.SUNDAY);
|
_day = set.getInt("day", Calendar.SUNDAY);
|
||||||
_hour = set.getInt("hour", 16);
|
_hour = set.getInt("hour", 16);
|
||||||
_maxConcurrent = set.getInt("maxConcurrent", 5);
|
_maxConcurrent = set.getInt("maxConcurrent", 5);
|
||||||
|
_siegeEnabled = set.getBoolean("siegeEnabled", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getDay()
|
public int getDay()
|
||||||
@ -48,4 +50,9 @@ public class SiegeScheduleDate
|
|||||||
{
|
{
|
||||||
return _maxConcurrent;
|
return _maxConcurrent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean siegeEnabled()
|
||||||
|
{
|
||||||
|
return _siegeEnabled;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1426,35 +1426,42 @@ public class Siege implements Siegable
|
|||||||
/** Set the date for the next siege. */
|
/** Set the date for the next siege. */
|
||||||
private void setNextSiegeDate()
|
private void setNextSiegeDate()
|
||||||
{
|
{
|
||||||
final Calendar cal = _castle.getSiegeDate();
|
final SiegeScheduleDate holder = SiegeScheduleData.getInstance().getScheduleDateForCastleId(_castle.getResidenceId());
|
||||||
if (cal.getTimeInMillis() < System.currentTimeMillis())
|
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());
|
calendar.setTimeInMillis(System.currentTimeMillis());
|
||||||
cal.set(Calendar.HOUR_OF_DAY, holder.getHour());
|
}
|
||||||
cal.set(Calendar.MINUTE, 0);
|
|
||||||
cal.set(Calendar.SECOND, 0);
|
calendar.set(Calendar.DAY_OF_WEEK, holder.getDay());
|
||||||
if (cal.before(Calendar.getInstance()))
|
calendar.set(Calendar.HOUR_OF_DAY, holder.getHour());
|
||||||
{
|
calendar.set(Calendar.MINUTE, 0);
|
||||||
cal.add(Calendar.WEEK_OF_YEAR, 2);
|
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())
|
Broadcast.toAllOnlinePlayers(new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME).addCastleId(_castle.getResidenceId()));
|
||||||
{
|
|
||||||
CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), cal.getTimeInMillis());
|
// Allow registration for next siege
|
||||||
break;
|
_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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,5 +1,12 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../data/xsd/SiegeSchedule.xsd">
|
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../data/xsd/SiegeSchedule.xsd">
|
||||||
<schedule day="SUNDAY" hour="16" maxConcurrent="5" />
|
<schedule castleId="1" castleName="Gludio" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
<schedule day="SUNDAY" hour="20" maxConcurrent="5" />
|
<schedule castleId="2" castleName="Dion" siegeEnabled="true" day="SUNDAY" hour="20" maxConcurrent="5" />
|
||||||
|
<schedule castleId="3" castleName="Giran" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="4" castleName="Oren" siegeEnabled="true" day="SUNDAY" hour="20" maxConcurrent="5" />
|
||||||
|
<schedule castleId="5" castleName="Aden" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="6" castleName="Innadril" siegeEnabled="true" day="SUNDAY" hour="20" maxConcurrent="5" />
|
||||||
|
<schedule castleId="7" castleName="Goddard" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
|
<schedule castleId="8" castleName="Rune" siegeEnabled="true" day="SUNDAY" hour="20" maxConcurrent="5" />
|
||||||
|
<schedule castleId="9" castleName="Schuttgart" siegeEnabled="true" day="SUNDAY" hour="16" maxConcurrent="5" />
|
||||||
</list>
|
</list>
|
@ -5,6 +5,9 @@
|
|||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element name="schedule" maxOccurs="unbounded">
|
<xs:element name="schedule" maxOccurs="unbounded">
|
||||||
<xs:complexType>
|
<xs:complexType>
|
||||||
|
<xs:attribute type="xs:byte" name="castleId" use="optional" />
|
||||||
|
<xs:attribute type="xs:string" name="castleName" use="optional" />
|
||||||
|
<xs:attribute type="xs:boolean" name="siegeEnabled" use="optional" />
|
||||||
<xs:attribute type="xs:string" name="day" use="optional" />
|
<xs:attribute type="xs:string" name="day" use="optional" />
|
||||||
<xs:attribute type="xs:byte" name="hour" use="optional" />
|
<xs:attribute type="xs:byte" name="hour" use="optional" />
|
||||||
<xs:attribute type="xs:byte" name="maxConcurrent" use="optional" />
|
<xs:attribute type="xs:byte" name="maxConcurrent" use="optional" />
|
||||||
|
@ -17,9 +17,9 @@
|
|||||||
package org.l2jmobius.gameserver.data.xml.impl;
|
package org.l2jmobius.gameserver.data.xml.impl;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Calendar;
|
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.Level;
|
||||||
import java.util.logging.Logger;
|
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 static final Logger LOGGER = Logger.getLogger(SiegeScheduleData.class.getName());
|
||||||
|
|
||||||
private final List<SiegeScheduleDate> _scheduleData = new ArrayList<>();
|
private final Map<Integer, SiegeScheduleDate> _scheduleData = new HashMap<>();
|
||||||
|
|
||||||
protected SiegeScheduleData()
|
protected SiegeScheduleData()
|
||||||
{
|
{
|
||||||
@ -49,14 +49,8 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
@Override
|
@Override
|
||||||
public synchronized void load()
|
public synchronized void load()
|
||||||
{
|
{
|
||||||
_scheduleData.clear();
|
|
||||||
parseDatapackFile("config/SiegeSchedule.xml");
|
parseDatapackFile("config/SiegeSchedule.xml");
|
||||||
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _scheduleData.size() + " siege schedulers.");
|
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
|
@Override
|
||||||
@ -85,7 +79,7 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
}
|
}
|
||||||
set.set(key, val);
|
set.set(key, val);
|
||||||
}
|
}
|
||||||
_scheduleData.add(new SiegeScheduleDate(set));
|
_scheduleData.put(set.getInt("castleId"), new SiegeScheduleDate(set));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -107,9 +101,9 @@ public class SiegeScheduleData implements IXmlReader
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<SiegeScheduleDate> getScheduleDates()
|
public SiegeScheduleDate getScheduleDateForCastleId(int castleId)
|
||||||
{
|
{
|
||||||
return _scheduleData;
|
return _scheduleData.get(castleId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SiegeScheduleData getInstance()
|
public static SiegeScheduleData getInstance()
|
||||||
|
@ -26,12 +26,14 @@ public class SiegeScheduleDate
|
|||||||
private final int _day;
|
private final int _day;
|
||||||
private final int _hour;
|
private final int _hour;
|
||||||
private final int _maxConcurrent;
|
private final int _maxConcurrent;
|
||||||
|
private final boolean _siegeEnabled;
|
||||||
|
|
||||||
public SiegeScheduleDate(StatSet set)
|
public SiegeScheduleDate(StatSet set)
|
||||||
{
|
{
|
||||||
_day = set.getInt("day", Calendar.SUNDAY);
|
_day = set.getInt("day", Calendar.SUNDAY);
|
||||||
_hour = set.getInt("hour", 16);
|
_hour = set.getInt("hour", 16);
|
||||||
_maxConcurrent = set.getInt("maxConcurrent", 5);
|
_maxConcurrent = set.getInt("maxConcurrent", 5);
|
||||||
|
_siegeEnabled = set.getBoolean("siegeEnabled", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getDay()
|
public int getDay()
|
||||||
@ -48,4 +50,9 @@ public class SiegeScheduleDate
|
|||||||
{
|
{
|
||||||
return _maxConcurrent;
|
return _maxConcurrent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean siegeEnabled()
|
||||||
|
{
|
||||||
|
return _siegeEnabled;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1426,35 +1426,42 @@ public class Siege implements Siegable
|
|||||||
/** Set the date for the next siege. */
|
/** Set the date for the next siege. */
|
||||||
private void setNextSiegeDate()
|
private void setNextSiegeDate()
|
||||||
{
|
{
|
||||||
final Calendar cal = _castle.getSiegeDate();
|
final SiegeScheduleDate holder = SiegeScheduleData.getInstance().getScheduleDateForCastleId(_castle.getResidenceId());
|
||||||
if (cal.getTimeInMillis() < System.currentTimeMillis())
|
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());
|
calendar.setTimeInMillis(System.currentTimeMillis());
|
||||||
cal.set(Calendar.HOUR_OF_DAY, holder.getHour());
|
}
|
||||||
cal.set(Calendar.MINUTE, 0);
|
|
||||||
cal.set(Calendar.SECOND, 0);
|
calendar.set(Calendar.DAY_OF_WEEK, holder.getDay());
|
||||||
if (cal.before(Calendar.getInstance()))
|
calendar.set(Calendar.HOUR_OF_DAY, holder.getHour());
|
||||||
{
|
calendar.set(Calendar.MINUTE, 0);
|
||||||
cal.add(Calendar.WEEK_OF_YEAR, 2);
|
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())
|
Broadcast.toAllOnlinePlayers(new SystemMessage(SystemMessageId.S1_HAS_ANNOUNCED_THE_NEXT_CASTLE_SIEGE_TIME).addCastleId(_castle.getResidenceId()));
|
||||||
{
|
|
||||||
CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), cal.getTimeInMillis());
|
// Allow registration for next siege
|
||||||
break;
|
_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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user