|
@@ -35,11 +35,12 @@ import javolution.util.FastList;
|
|
import com.l2jserver.Config;
|
|
import com.l2jserver.Config;
|
|
import com.l2jserver.L2DatabaseFactory;
|
|
import com.l2jserver.L2DatabaseFactory;
|
|
import com.l2jserver.gameserver.Announcements;
|
|
import com.l2jserver.gameserver.Announcements;
|
|
-import com.l2jserver.gameserver.SevenSigns;
|
|
|
|
import com.l2jserver.gameserver.ThreadPoolManager;
|
|
import com.l2jserver.gameserver.ThreadPoolManager;
|
|
import com.l2jserver.gameserver.datatables.ClanTable;
|
|
import com.l2jserver.gameserver.datatables.ClanTable;
|
|
import com.l2jserver.gameserver.datatables.NpcTable;
|
|
import com.l2jserver.gameserver.datatables.NpcTable;
|
|
|
|
+import com.l2jserver.gameserver.datatables.SiegeScheduleData;
|
|
import com.l2jserver.gameserver.enums.SiegeTeleportWhoType;
|
|
import com.l2jserver.gameserver.enums.SiegeTeleportWhoType;
|
|
|
|
+import com.l2jserver.gameserver.instancemanager.CastleManager;
|
|
import com.l2jserver.gameserver.instancemanager.MercTicketManager;
|
|
import com.l2jserver.gameserver.instancemanager.MercTicketManager;
|
|
import com.l2jserver.gameserver.instancemanager.SiegeGuardManager;
|
|
import com.l2jserver.gameserver.instancemanager.SiegeGuardManager;
|
|
import com.l2jserver.gameserver.instancemanager.SiegeManager;
|
|
import com.l2jserver.gameserver.instancemanager.SiegeManager;
|
|
@@ -50,6 +51,7 @@ import com.l2jserver.gameserver.model.L2SiegeClan;
|
|
import com.l2jserver.gameserver.model.L2SiegeClan.SiegeClanType;
|
|
import com.l2jserver.gameserver.model.L2SiegeClan.SiegeClanType;
|
|
import com.l2jserver.gameserver.model.L2Spawn;
|
|
import com.l2jserver.gameserver.model.L2Spawn;
|
|
import com.l2jserver.gameserver.model.PcCondOverride;
|
|
import com.l2jserver.gameserver.model.PcCondOverride;
|
|
|
|
+import com.l2jserver.gameserver.model.SiegeScheduleDate;
|
|
import com.l2jserver.gameserver.model.TeleportWhereType;
|
|
import com.l2jserver.gameserver.model.TeleportWhereType;
|
|
import com.l2jserver.gameserver.model.TowerSpawn;
|
|
import com.l2jserver.gameserver.model.TowerSpawn;
|
|
import com.l2jserver.gameserver.model.actor.L2Npc;
|
|
import com.l2jserver.gameserver.model.actor.L2Npc;
|
|
@@ -65,6 +67,7 @@ import com.l2jserver.gameserver.network.serverpackets.UserInfo;
|
|
import com.l2jserver.gameserver.scripting.scriptengine.events.SiegeEvent;
|
|
import com.l2jserver.gameserver.scripting.scriptengine.events.SiegeEvent;
|
|
import com.l2jserver.gameserver.scripting.scriptengine.impl.L2Script.EventStage;
|
|
import com.l2jserver.gameserver.scripting.scriptengine.impl.L2Script.EventStage;
|
|
import com.l2jserver.gameserver.scripting.scriptengine.listeners.events.SiegeListener;
|
|
import com.l2jserver.gameserver.scripting.scriptengine.listeners.events.SiegeListener;
|
|
|
|
+import com.l2jserver.gameserver.util.Broadcast;
|
|
|
|
|
|
public class Siege implements Siegable
|
|
public class Siege implements Siegable
|
|
{
|
|
{
|
|
@@ -1254,14 +1257,6 @@ public class Siege implements Siegable
|
|
setNextSiegeDate();
|
|
setNextSiegeDate();
|
|
}
|
|
}
|
|
|
|
|
|
- if (!SevenSigns.getInstance().isDateInSealValidPeriod(getCastle().getSiegeDate()))
|
|
|
|
- {
|
|
|
|
- // no sieges in Quest period! reschedule it to the next SealValidationPeriod
|
|
|
|
- // This is usually caused by server being down
|
|
|
|
- corrected = true;
|
|
|
|
- setNextSiegeDate();
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
if (corrected)
|
|
if (corrected)
|
|
{
|
|
{
|
|
saveSiegeDate();
|
|
saveSiegeDate();
|
|
@@ -1472,25 +1467,34 @@ public class Siege implements Siegable
|
|
/** Set the date for the next siege. */
|
|
/** Set the date for the next siege. */
|
|
private void setNextSiegeDate()
|
|
private void setNextSiegeDate()
|
|
{
|
|
{
|
|
- while (getCastle().getSiegeDate().getTimeInMillis() < Calendar.getInstance().getTimeInMillis())
|
|
|
|
|
|
+ final Calendar cal = getCastle().getSiegeDate();
|
|
|
|
+ if (cal.getTimeInMillis() < System.currentTimeMillis())
|
|
|
|
+ {
|
|
|
|
+ cal.setTimeInMillis(System.currentTimeMillis());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ for (SiegeScheduleDate holder : SiegeScheduleData.getInstance().getScheduleDates())
|
|
{
|
|
{
|
|
- if ((getCastle().getSiegeDate().get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY) && (getCastle().getSiegeDate().get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY))
|
|
|
|
|
|
+ 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()))
|
|
{
|
|
{
|
|
- getCastle().getSiegeDate().set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
|
|
|
|
|
|
+ cal.add(Calendar.WEEK_OF_YEAR, 2);
|
|
}
|
|
}
|
|
- // from CT2.3 Castle sieges are on Sunday, but if server admins allow to set day of the siege than sieges can occur on Saturdays as well
|
|
|
|
- if ((getCastle().getSiegeDate().get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY))
|
|
|
|
|
|
+
|
|
|
|
+ if (CastleManager.getInstance().getSiegeDates(cal.getTimeInMillis()) < holder.getMaxConcurrent())
|
|
{
|
|
{
|
|
- getCastle().getSiegeDate().set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
|
|
|
|
|
|
+ CastleManager.getInstance().registerSiegeDate(getCastle().getResidenceId(), cal.getTimeInMillis());
|
|
|
|
+ break;
|
|
}
|
|
}
|
|
- // set the next siege day to the next weekend
|
|
|
|
- getCastle().getSiegeDate().add(Calendar.DAY_OF_MONTH, 7);
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- if (!SevenSigns.getInstance().isDateInSealValidPeriod(getCastle().getSiegeDate()))
|
|
|
|
- {
|
|
|
|
- getCastle().getSiegeDate().add(Calendar.DAY_OF_MONTH, 7);
|
|
|
|
- }
|
|
|
|
|
|
+ SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_ANNOUNCED_SIEGE_TIME);
|
|
|
|
+ sm.addCastleId(getCastle().getResidenceId());
|
|
|
|
+ Broadcast.toAllOnlinePlayers(sm);
|
|
|
|
+
|
|
_isRegistrationOver = false; // Allow registration for next siege
|
|
_isRegistrationOver = false; // Allow registration for next siege
|
|
}
|
|
}
|
|
|
|
|