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