From 6201cf93037ac8bda1cbb21b9e3ead036d966817 Mon Sep 17 00:00:00 2001
From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com>
Date: Sat, 8 Oct 2022 22:49:25 +0000
Subject: [PATCH] Daily Mission changes. Contributed by kamikadzz.
---
.../dist/game/data/DailyMission.xml | 4 +-
.../handlers/DailyMissionMasterHandler.java | 2 +
.../JoinClanDailyMissionHandler.java | 81 +
.../LoginMonthDailyMissionHandler.java | 18 +-
.../LoginWeekendDailyMissionHandler.java | 25 +-
.../dist/game/data/xsd/DailyMission.xsd | 1 +
.../gameserver/enums/MissionResetType.java | 28 +
.../model/DailyMissionDataHolder.java | 21 +-
.../dist/game/data/DailyMission.xml | 4 +-
.../handlers/DailyMissionMasterHandler.java | 2 +
.../JoinClanDailyMissionHandler.java | 81 +
.../LoginMonthDailyMissionHandler.java | 18 +-
.../LoginWeekendDailyMissionHandler.java | 25 +-
.../dist/game/data/xsd/DailyMission.xsd | 1 +
.../gameserver/enums/MissionResetType.java | 28 +
.../model/DailyMissionDataHolder.java | 21 +-
.../dist/game/data/DailyMission.xml | 4 +-
.../handlers/DailyMissionMasterHandler.java | 2 +
.../JoinClanDailyMissionHandler.java | 81 +
.../LoginMonthDailyMissionHandler.java | 18 +-
.../LoginWeekendDailyMissionHandler.java | 25 +-
.../dist/game/data/xsd/DailyMission.xsd | 1 +
.../gameserver/enums/MissionResetType.java | 28 +
.../model/DailyMissionDataHolder.java | 21 +-
.../handlers/DailyMissionMasterHandler.java | 2 +
.../JoinClanDailyMissionHandler.java | 81 +
.../LoginMonthDailyMissionHandler.java | 18 +-
.../LoginWeekendDailyMissionHandler.java | 25 +-
.../dist/game/data/xsd/DailyMission.xsd | 1 +
.../gameserver/enums/MissionResetType.java | 28 +
.../model/DailyMissionDataHolder.java | 21 +-
.../handlers/DailyMissionMasterHandler.java | 2 +
.../JoinClanDailyMissionHandler.java | 81 +
.../LoginMonthDailyMissionHandler.java | 18 +-
.../LoginWeekendDailyMissionHandler.java | 25 +-
.../dist/game/data/xsd/DailyMission.xsd | 1 +
.../gameserver/enums/MissionResetType.java | 28 +
.../model/DailyMissionDataHolder.java | 21 +-
.../handlers/DailyMissionMasterHandler.java | 2 +
.../JoinClanDailyMissionHandler.java | 81 +
.../LoginMonthDailyMissionHandler.java | 18 +-
.../LoginWeekendDailyMissionHandler.java | 25 +-
.../MonsterDailyMissionHandler.java | 7 +-
.../dist/game/data/xsd/DailyMission.xsd | 1 +
.../gameserver/enums/MissionResetType.java | 28 +
.../model/DailyMissionDataHolder.java | 21 +-
.../handlers/DailyMissionMasterHandler.java | 2 +
.../JoinClanDailyMissionHandler.java | 81 +
.../LoginMonthDailyMissionHandler.java | 18 +-
.../LoginWeekendDailyMissionHandler.java | 25 +-
.../MonsterDailyMissionHandler.java | 7 +-
.../dist/game/data/xsd/DailyMission.xsd | 1 +
.../gameserver/enums/MissionResetType.java | 28 +
.../model/DailyMissionDataHolder.java | 21 +-
.../handlers/DailyMissionMasterHandler.java | 2 +
.../JoinClanDailyMissionHandler.java | 81 +
.../LoginMonthDailyMissionHandler.java | 18 +-
.../LoginWeekendDailyMissionHandler.java | 25 +-
.../MonsterDailyMissionHandler.java | 17 +-
.../dist/game/data/xsd/DailyMission.xsd | 1 +
.../gameserver/enums/MissionResetType.java | 28 +
.../model/DailyMissionDataHolder.java | 21 +-
.../handlers/DailyMissionMasterHandler.java | 2 +
.../JoinClanDailyMissionHandler.java | 81 +
.../LoginMonthDailyMissionHandler.java | 18 +-
.../LoginWeekendDailyMissionHandler.java | 25 +-
.../MonsterDailyMissionHandler.java | 17 +-
.../dist/game/data/xsd/DailyMission.xsd | 1 +
.../gameserver/enums/MissionResetType.java | 28 +
.../model/DailyMissionDataHolder.java | 21 +-
.../handlers/DailyMissionMasterHandler.java | 2 +
.../JoinClanDailyMissionHandler.java | 81 +
.../LoginMonthDailyMissionHandler.java | 18 +-
.../LoginWeekendDailyMissionHandler.java | 25 +-
.../MonsterDailyMissionHandler.java | 17 +-
.../dist/game/data/xsd/DailyMission.xsd | 1 +
.../gameserver/enums/MissionResetType.java | 28 +
.../model/DailyMissionDataHolder.java | 21 +-
.../dist/game/data/DailyMission.xml | 8 +-
.../handlers/DailyMissionMasterHandler.java | 2 +
.../JoinClanDailyMissionHandler.java | 81 +
.../LoginMonthDailyMissionHandler.java | 18 +-
.../LoginWeekendDailyMissionHandler.java | 25 +-
.../dist/game/data/xsd/DailyMission.xsd | 1 +
.../gameserver/enums/MissionResetType.java | 28 +
.../model/DailyMissionDataHolder.java | 21 +-
.../dist/game/data/DailyMission.xml | 10 +-
.../handlers/DailyMissionMasterHandler.java | 2 +
.../JoinClanDailyMissionHandler.java | 81 +
.../LoginMonthDailyMissionHandler.java | 18 +-
.../LoginWeekendDailyMissionHandler.java | 25 +-
.../dist/game/data/xsd/DailyMission.xsd | 1 +
.../gameserver/enums/MissionResetType.java | 28 +
.../model/DailyMissionDataHolder.java | 21 +-
.../dist/game/data/DailyMission.xml | 8 +-
.../handlers/DailyMissionMasterHandler.java | 2 +
.../JoinClanDailyMissionHandler.java | 81 +
.../LoginMonthDailyMissionHandler.java | 18 +-
.../LoginWeekendDailyMissionHandler.java | 25 +-
.../dist/game/data/xsd/DailyMission.xsd | 1 +
.../gameserver/enums/MissionResetType.java | 28 +
.../model/DailyMissionDataHolder.java | 21 +-
.../dist/game/data/DailyMission.xml | 8 +-
.../handlers/DailyMissionMasterHandler.java | 2 +
.../JoinClanDailyMissionHandler.java | 81 +
.../LoginMonthDailyMissionHandler.java | 18 +-
.../LoginWeekendDailyMissionHandler.java | 25 +-
.../dist/game/data/xsd/DailyMission.xsd | 1 +
.../gameserver/enums/MissionResetType.java | 28 +
.../model/DailyMissionDataHolder.java | 21 +-
.../dist/game/data/DailyMission.xml | 1659 +++--------------
.../handlers/DailyMissionMasterHandler.java | 2 +
.../JoinClanDailyMissionHandler.java | 81 +
.../LoginMonthDailyMissionHandler.java | 18 +-
.../LoginWeekendDailyMissionHandler.java | 25 +-
.../MonsterDailyMissionHandler.java | 15 +-
.../dist/game/data/xsd/DailyMission.xsd | 1 +
.../gameserver/enums/MissionResetType.java | 28 +
.../model/DailyMissionDataHolder.java | 21 +-
.../dist/game/data/DailyMission.xml | 169 +-
.../handlers/DailyMissionMasterHandler.java | 2 +
.../JoinClanDailyMissionHandler.java | 81 +
.../LoginMonthDailyMissionHandler.java | 18 +-
.../LoginWeekendDailyMissionHandler.java | 25 +-
.../MonsterDailyMissionHandler.java | 15 +-
.../dist/game/data/xsd/DailyMission.xsd | 1 +
.../gameserver/enums/MissionResetType.java | 28 +
.../model/DailyMissionDataHolder.java | 21 +-
.../dist/game/data/DailyMission.xml | 73 +-
.../handlers/DailyMissionMasterHandler.java | 2 +
.../JoinClanDailyMissionHandler.java | 81 +
.../LoginMonthDailyMissionHandler.java | 18 +-
.../LoginWeekendDailyMissionHandler.java | 25 +-
.../MonsterDailyMissionHandler.java | 15 +-
.../dist/game/data/xsd/DailyMission.xsd | 1 +
.../gameserver/enums/MissionResetType.java | 28 +
.../model/DailyMissionDataHolder.java | 21 +-
.../handlers/DailyMissionMasterHandler.java | 2 +
.../JoinClanDailyMissionHandler.java | 81 +
.../LoginMonthDailyMissionHandler.java | 18 +-
.../LoginWeekendDailyMissionHandler.java | 25 +-
.../dist/game/data/xsd/DailyMission.xsd | 1 +
.../gameserver/enums/MissionResetType.java | 28 +
.../model/DailyMissionDataHolder.java | 21 +-
.../dist/game/data/DailyMission.xml | 2 +-
.../handlers/DailyMissionMasterHandler.java | 2 +
.../JoinClanDailyMissionHandler.java | 81 +
.../LoginMonthDailyMissionHandler.java | 18 +-
.../LoginWeekendDailyMissionHandler.java | 25 +-
.../MonsterDailyMissionHandler.java | 15 +-
.../dist/game/data/xsd/DailyMission.xsd | 1 +
.../gameserver/enums/MissionResetType.java | 28 +
.../model/DailyMissionDataHolder.java | 21 +-
.../dist/game/data/DailyMission.xml | 12 +-
.../handlers/DailyMissionMasterHandler.java | 2 +
.../JoinClanDailyMissionHandler.java | 81 +
.../LoginMonthDailyMissionHandler.java | 18 +-
.../LoginWeekendDailyMissionHandler.java | 25 +-
.../MonsterDailyMissionHandler.java | 15 +-
.../dist/game/data/xsd/DailyMission.xsd | 1 +
.../gameserver/enums/MissionResetType.java | 28 +
.../model/DailyMissionDataHolder.java | 21 +-
.../handlers/DailyMissionMasterHandler.java | 2 +
.../JoinClanDailyMissionHandler.java | 81 +
.../LoginMonthDailyMissionHandler.java | 18 +-
.../LoginWeekendDailyMissionHandler.java | 25 +-
.../MonsterDailyMissionHandler.java | 15 +-
.../dist/game/data/xsd/DailyMission.xsd | 1 +
.../gameserver/enums/MissionResetType.java | 28 +
.../model/DailyMissionDataHolder.java | 21 +-
170 files changed, 3483 insertions(+), 2329 deletions(-)
create mode 100644 L2J_Mobius_02.5_Underground/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
create mode 100644 L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/enums/MissionResetType.java
create mode 100644 L2J_Mobius_03.0_Helios/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
create mode 100644 L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/enums/MissionResetType.java
create mode 100644 L2J_Mobius_04.0_GrandCrusade/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
create mode 100644 L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/enums/MissionResetType.java
create mode 100644 L2J_Mobius_05.0_Salvation/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
create mode 100644 L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/enums/MissionResetType.java
create mode 100644 L2J_Mobius_05.5_EtinasFate/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
create mode 100644 L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/enums/MissionResetType.java
create mode 100644 L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
create mode 100644 L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/enums/MissionResetType.java
create mode 100644 L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
create mode 100644 L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/enums/MissionResetType.java
create mode 100644 L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
create mode 100644 L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/enums/MissionResetType.java
create mode 100644 L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
create mode 100644 L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/enums/MissionResetType.java
create mode 100644 L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
create mode 100644 L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/enums/MissionResetType.java
create mode 100644 L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
create mode 100644 L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/enums/MissionResetType.java
create mode 100644 L2J_Mobius_Classic_2.5_Zaken/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
create mode 100644 L2J_Mobius_Classic_2.5_Zaken/java/org/l2jmobius/gameserver/enums/MissionResetType.java
create mode 100644 L2J_Mobius_Classic_2.7_Antharas/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
create mode 100644 L2J_Mobius_Classic_2.7_Antharas/java/org/l2jmobius/gameserver/enums/MissionResetType.java
create mode 100644 L2J_Mobius_Classic_2.8_SevenSigns/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
create mode 100644 L2J_Mobius_Classic_2.8_SevenSigns/java/org/l2jmobius/gameserver/enums/MissionResetType.java
create mode 100644 L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
create mode 100644 L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/enums/MissionResetType.java
create mode 100644 L2J_Mobius_Classic_2.9_SecretOfEmpire/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
create mode 100644 L2J_Mobius_Classic_2.9_SecretOfEmpire/java/org/l2jmobius/gameserver/enums/MissionResetType.java
create mode 100644 L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
create mode 100644 L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/enums/MissionResetType.java
create mode 100644 L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
create mode 100644 L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/enums/MissionResetType.java
create mode 100644 L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
create mode 100644 L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/enums/MissionResetType.java
create mode 100644 L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
create mode 100644 L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/enums/MissionResetType.java
create mode 100644 L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
create mode 100644 L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/enums/MissionResetType.java
diff --git a/L2J_Mobius_02.5_Underground/dist/game/data/DailyMission.xml b/L2J_Mobius_02.5_Underground/dist/game/data/DailyMission.xml
index 548a3507c8..b60df09c7e 100644
--- a/L2J_Mobius_02.5_Underground/dist/game/data/DailyMission.xml
+++ b/L2J_Mobius_02.5_Underground/dist/game/data/DailyMission.xml
@@ -2628,14 +2628,14 @@
-
+
-
+
diff --git a/L2J_Mobius_02.5_Underground/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java b/L2J_Mobius_02.5_Underground/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
index 33c1ad74b4..55debbbdc1 100644
--- a/L2J_Mobius_02.5_Underground/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
+++ b/L2J_Mobius_02.5_Underground/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
@@ -23,6 +23,7 @@ import org.l2jmobius.gameserver.handler.DailyMissionHandler;
import handlers.dailymissionhandlers.BossDailyMissionHandler;
import handlers.dailymissionhandlers.CeremonyOfChaosDailyMissionHandler;
import handlers.dailymissionhandlers.FishingDailyMissionHandler;
+import handlers.dailymissionhandlers.JoinClanDailyMissionHandler;
import handlers.dailymissionhandlers.LevelDailyMissionHandler;
import handlers.dailymissionhandlers.LoginMonthDailyMissionHandler;
import handlers.dailymissionhandlers.LoginWeekendDailyMissionHandler;
@@ -48,6 +49,7 @@ public class DailyMissionMasterHandler
DailyMissionHandler.getInstance().registerHandler("ceremonyofchaos", CeremonyOfChaosDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("boss", BossDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("fishing", FishingDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("joinclan", JoinClanDailyMissionHandler::new);
LOGGER.info(DailyMissionMasterHandler.class.getSimpleName() + ": Loaded " + DailyMissionHandler.getInstance().size() + " handlers.");
}
}
diff --git a/L2J_Mobius_02.5_Underground/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java b/L2J_Mobius_02.5_Underground/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
new file mode 100644
index 0000000000..7af0642f51
--- /dev/null
+++ b/L2J_Mobius_02.5_Underground/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
@@ -0,0 +1,81 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package handlers.dailymissionhandlers;
+
+import java.util.function.Consumer;
+
+import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
+import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
+import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.Containers;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanCreate;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanJoin;
+import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
+
+/**
+ * @author kamikadzz
+ */
+public class JoinClanDailyMissionHandler extends AbstractDailyMissionHandler
+{
+ public JoinClanDailyMissionHandler(DailyMissionDataHolder holder)
+ {
+ super(holder);
+ }
+
+ @Override
+ public boolean isAvailable(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
+ return (entry != null) && (entry.getStatus() == DailyMissionStatus.AVAILABLE);
+ }
+
+ @Override
+ public void init()
+ {
+ Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_CLAN_JOIN, (Consumer) this::onPlayerClanJoin, this));
+ Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_CLAN_CREATE, (Consumer) this::onPlayerClanCreate, this));
+ }
+
+ private void onPlayerClanJoin(OnPlayerClanJoin event)
+ {
+ final DailyMissionPlayerEntry missionData = getPlayerEntry(event.getClanMember().getPlayer().getObjectId(), true);
+ processMission(missionData);
+ }
+
+ private void onPlayerClanCreate(OnPlayerClanCreate event)
+ {
+ final DailyMissionPlayerEntry missionData = getPlayerEntry(event.getPlayer().getObjectId(), true);
+ processMission(missionData);
+ }
+
+ private void processMission(DailyMissionPlayerEntry missionData)
+ {
+ if (missionData.getProgress() == 1)
+ {
+ missionData.setStatus(DailyMissionStatus.COMPLETED);
+ }
+ else
+ {
+ missionData.setProgress(1);
+ missionData.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(missionData);
+ }
+}
diff --git a/L2J_Mobius_02.5_Underground/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java b/L2J_Mobius_02.5_Underground/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
index 84462adcb8..0da9875cd5 100644
--- a/L2J_Mobius_02.5_Underground/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
+++ b/L2J_Mobius_02.5_Underground/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
@@ -49,30 +49,14 @@ public class LoginMonthDailyMissionHandler extends AbstractDailyMissionHandler
Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_LOGIN, (OnPlayerLogin event) -> onPlayerLogin(event), this));
}
- @Override
- public void reset()
- {
- // Monthly rewards do not reset daily.
- }
-
private void onPlayerLogin(OnPlayerLogin event)
{
final DailyMissionPlayerEntry entry = getPlayerEntry(event.getPlayer().getObjectId(), true);
- final long lastCompleted = entry.getLastCompleted();
- if (lastCompleted == 0) // Initial entry.
- {
- entry.setLastCompleted(System.currentTimeMillis());
- }
- else if ((System.currentTimeMillis() - lastCompleted) > 2506000000L) // 2506000000L (29 day) delay.
+ if (entry.getStatus() != DailyMissionStatus.COMPLETED)
{
entry.setProgress(1);
entry.setStatus(DailyMissionStatus.AVAILABLE);
}
- else
- {
- entry.setProgress(0);
- entry.setStatus(DailyMissionStatus.NOT_AVAILABLE);
- }
storePlayerEntry(entry);
}
}
diff --git a/L2J_Mobius_02.5_Underground/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java b/L2J_Mobius_02.5_Underground/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
index f7e5360c4e..18eaca0a48 100644
--- a/L2J_Mobius_02.5_Underground/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
+++ b/L2J_Mobius_02.5_Underground/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
@@ -51,27 +51,18 @@ public class LoginWeekendDailyMissionHandler extends AbstractDailyMissionHandler
Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_LOGIN, (OnPlayerLogin event) -> onPlayerLogin(event), this));
}
- @Override
- public void reset()
- {
- // Weekend rewards do not reset daily.
- }
-
private void onPlayerLogin(OnPlayerLogin event)
{
final DailyMissionPlayerEntry entry = getPlayerEntry(event.getPlayer().getObjectId(), true);
- final int currentDay = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
- final long lastCompleted = entry.getLastCompleted();
- if (((currentDay == Calendar.SATURDAY) || (currentDay == Calendar.SUNDAY)) // Reward only on weekend.
- && ((lastCompleted == 0) || ((System.currentTimeMillis() - lastCompleted) > 172800000))) // Initial entry or 172800000 (2 day) delay.
+ if (entry.getStatus() != DailyMissionStatus.COMPLETED)
{
- entry.setProgress(1);
- entry.setStatus(DailyMissionStatus.AVAILABLE);
- }
- else if (entry.getStatus() != DailyMissionStatus.AVAILABLE) // Not waiting to be rewarded.
- {
- entry.setProgress(0);
- entry.setStatus(DailyMissionStatus.NOT_AVAILABLE);
+ final int currentDay = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
+ if (((currentDay == Calendar.SATURDAY) || (currentDay == Calendar.SUNDAY) || (currentDay == Calendar.MONDAY)) //
+ && (Calendar.getInstance().get(Calendar.HOUR_OF_DAY) < 6) && (Calendar.getInstance().get(Calendar.MINUTE) < 30))
+ {
+ entry.setProgress(1);
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
}
storePlayerEntry(entry);
}
diff --git a/L2J_Mobius_02.5_Underground/dist/game/data/xsd/DailyMission.xsd b/L2J_Mobius_02.5_Underground/dist/game/data/xsd/DailyMission.xsd
index d8e4390d3c..6411a3a90d 100644
--- a/L2J_Mobius_02.5_Underground/dist/game/data/xsd/DailyMission.xsd
+++ b/L2J_Mobius_02.5_Underground/dist/game/data/xsd/DailyMission.xsd
@@ -39,6 +39,7 @@
+
diff --git a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/enums/MissionResetType.java b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/enums/MissionResetType.java
new file mode 100644
index 0000000000..cb74a12d14
--- /dev/null
+++ b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/enums/MissionResetType.java
@@ -0,0 +1,28 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.l2jmobius.gameserver.enums;
+
+/**
+ * @author kamikadzz
+ */
+public enum MissionResetType
+{
+ DAY,
+ WEEK,
+ MONTH,
+ WEEKEND
+}
diff --git a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
index 5582fdde0b..2b7d43f215 100644
--- a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
+++ b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
@@ -16,11 +16,13 @@
*/
package org.l2jmobius.gameserver.model;
+import java.util.Calendar;
import java.util.List;
import java.util.function.Function;
import org.l2jmobius.gameserver.enums.ClassId;
import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.enums.MissionResetType;
import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
import org.l2jmobius.gameserver.handler.DailyMissionHandler;
import org.l2jmobius.gameserver.model.actor.Player;
@@ -39,6 +41,7 @@ public class DailyMissionDataHolder
private final boolean _dailyReset;
private final boolean _isOneTime;
private final AbstractDailyMissionHandler _handler;
+ private final MissionResetType _missionResetSlot;
public DailyMissionDataHolder(StatSet set)
{
@@ -51,6 +54,7 @@ public class DailyMissionDataHolder
_dailyReset = set.getBoolean("dailyReset", true);
_isOneTime = set.getBoolean("isOneTime", true);
_handler = handler != null ? handler.apply(this) : null;
+ _missionResetSlot = set.getObject("duration", MissionResetType.class, MissionResetType.DAY);
}
public int getId()
@@ -115,7 +119,22 @@ public class DailyMissionDataHolder
{
if (_handler != null)
{
- _handler.reset();
+ if ((_missionResetSlot == MissionResetType.WEEK) && (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY))
+ {
+ _handler.reset();
+ }
+ else if ((_missionResetSlot == MissionResetType.MONTH) && (Calendar.getInstance().get(Calendar.DAY_OF_MONTH) == 1))
+ {
+ _handler.reset();
+ }
+ else if ((_missionResetSlot == MissionResetType.WEEKEND) && (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY))
+ {
+ _handler.reset();
+ }
+ else if (_dailyReset)
+ {
+ _handler.reset();
+ }
}
}
}
diff --git a/L2J_Mobius_03.0_Helios/dist/game/data/DailyMission.xml b/L2J_Mobius_03.0_Helios/dist/game/data/DailyMission.xml
index e14084f3fe..82e75fcc4e 100644
--- a/L2J_Mobius_03.0_Helios/dist/game/data/DailyMission.xml
+++ b/L2J_Mobius_03.0_Helios/dist/game/data/DailyMission.xml
@@ -2613,14 +2613,14 @@
-
+
-
+
diff --git a/L2J_Mobius_03.0_Helios/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java b/L2J_Mobius_03.0_Helios/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
index 33c1ad74b4..55debbbdc1 100644
--- a/L2J_Mobius_03.0_Helios/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
+++ b/L2J_Mobius_03.0_Helios/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
@@ -23,6 +23,7 @@ import org.l2jmobius.gameserver.handler.DailyMissionHandler;
import handlers.dailymissionhandlers.BossDailyMissionHandler;
import handlers.dailymissionhandlers.CeremonyOfChaosDailyMissionHandler;
import handlers.dailymissionhandlers.FishingDailyMissionHandler;
+import handlers.dailymissionhandlers.JoinClanDailyMissionHandler;
import handlers.dailymissionhandlers.LevelDailyMissionHandler;
import handlers.dailymissionhandlers.LoginMonthDailyMissionHandler;
import handlers.dailymissionhandlers.LoginWeekendDailyMissionHandler;
@@ -48,6 +49,7 @@ public class DailyMissionMasterHandler
DailyMissionHandler.getInstance().registerHandler("ceremonyofchaos", CeremonyOfChaosDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("boss", BossDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("fishing", FishingDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("joinclan", JoinClanDailyMissionHandler::new);
LOGGER.info(DailyMissionMasterHandler.class.getSimpleName() + ": Loaded " + DailyMissionHandler.getInstance().size() + " handlers.");
}
}
diff --git a/L2J_Mobius_03.0_Helios/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java b/L2J_Mobius_03.0_Helios/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
new file mode 100644
index 0000000000..7af0642f51
--- /dev/null
+++ b/L2J_Mobius_03.0_Helios/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
@@ -0,0 +1,81 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package handlers.dailymissionhandlers;
+
+import java.util.function.Consumer;
+
+import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
+import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
+import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.Containers;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanCreate;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanJoin;
+import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
+
+/**
+ * @author kamikadzz
+ */
+public class JoinClanDailyMissionHandler extends AbstractDailyMissionHandler
+{
+ public JoinClanDailyMissionHandler(DailyMissionDataHolder holder)
+ {
+ super(holder);
+ }
+
+ @Override
+ public boolean isAvailable(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
+ return (entry != null) && (entry.getStatus() == DailyMissionStatus.AVAILABLE);
+ }
+
+ @Override
+ public void init()
+ {
+ Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_CLAN_JOIN, (Consumer) this::onPlayerClanJoin, this));
+ Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_CLAN_CREATE, (Consumer) this::onPlayerClanCreate, this));
+ }
+
+ private void onPlayerClanJoin(OnPlayerClanJoin event)
+ {
+ final DailyMissionPlayerEntry missionData = getPlayerEntry(event.getClanMember().getPlayer().getObjectId(), true);
+ processMission(missionData);
+ }
+
+ private void onPlayerClanCreate(OnPlayerClanCreate event)
+ {
+ final DailyMissionPlayerEntry missionData = getPlayerEntry(event.getPlayer().getObjectId(), true);
+ processMission(missionData);
+ }
+
+ private void processMission(DailyMissionPlayerEntry missionData)
+ {
+ if (missionData.getProgress() == 1)
+ {
+ missionData.setStatus(DailyMissionStatus.COMPLETED);
+ }
+ else
+ {
+ missionData.setProgress(1);
+ missionData.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(missionData);
+ }
+}
diff --git a/L2J_Mobius_03.0_Helios/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java b/L2J_Mobius_03.0_Helios/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
index 84462adcb8..0da9875cd5 100644
--- a/L2J_Mobius_03.0_Helios/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
+++ b/L2J_Mobius_03.0_Helios/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
@@ -49,30 +49,14 @@ public class LoginMonthDailyMissionHandler extends AbstractDailyMissionHandler
Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_LOGIN, (OnPlayerLogin event) -> onPlayerLogin(event), this));
}
- @Override
- public void reset()
- {
- // Monthly rewards do not reset daily.
- }
-
private void onPlayerLogin(OnPlayerLogin event)
{
final DailyMissionPlayerEntry entry = getPlayerEntry(event.getPlayer().getObjectId(), true);
- final long lastCompleted = entry.getLastCompleted();
- if (lastCompleted == 0) // Initial entry.
- {
- entry.setLastCompleted(System.currentTimeMillis());
- }
- else if ((System.currentTimeMillis() - lastCompleted) > 2506000000L) // 2506000000L (29 day) delay.
+ if (entry.getStatus() != DailyMissionStatus.COMPLETED)
{
entry.setProgress(1);
entry.setStatus(DailyMissionStatus.AVAILABLE);
}
- else
- {
- entry.setProgress(0);
- entry.setStatus(DailyMissionStatus.NOT_AVAILABLE);
- }
storePlayerEntry(entry);
}
}
diff --git a/L2J_Mobius_03.0_Helios/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java b/L2J_Mobius_03.0_Helios/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
index f7e5360c4e..18eaca0a48 100644
--- a/L2J_Mobius_03.0_Helios/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
+++ b/L2J_Mobius_03.0_Helios/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
@@ -51,27 +51,18 @@ public class LoginWeekendDailyMissionHandler extends AbstractDailyMissionHandler
Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_LOGIN, (OnPlayerLogin event) -> onPlayerLogin(event), this));
}
- @Override
- public void reset()
- {
- // Weekend rewards do not reset daily.
- }
-
private void onPlayerLogin(OnPlayerLogin event)
{
final DailyMissionPlayerEntry entry = getPlayerEntry(event.getPlayer().getObjectId(), true);
- final int currentDay = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
- final long lastCompleted = entry.getLastCompleted();
- if (((currentDay == Calendar.SATURDAY) || (currentDay == Calendar.SUNDAY)) // Reward only on weekend.
- && ((lastCompleted == 0) || ((System.currentTimeMillis() - lastCompleted) > 172800000))) // Initial entry or 172800000 (2 day) delay.
+ if (entry.getStatus() != DailyMissionStatus.COMPLETED)
{
- entry.setProgress(1);
- entry.setStatus(DailyMissionStatus.AVAILABLE);
- }
- else if (entry.getStatus() != DailyMissionStatus.AVAILABLE) // Not waiting to be rewarded.
- {
- entry.setProgress(0);
- entry.setStatus(DailyMissionStatus.NOT_AVAILABLE);
+ final int currentDay = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
+ if (((currentDay == Calendar.SATURDAY) || (currentDay == Calendar.SUNDAY) || (currentDay == Calendar.MONDAY)) //
+ && (Calendar.getInstance().get(Calendar.HOUR_OF_DAY) < 6) && (Calendar.getInstance().get(Calendar.MINUTE) < 30))
+ {
+ entry.setProgress(1);
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
}
storePlayerEntry(entry);
}
diff --git a/L2J_Mobius_03.0_Helios/dist/game/data/xsd/DailyMission.xsd b/L2J_Mobius_03.0_Helios/dist/game/data/xsd/DailyMission.xsd
index d8e4390d3c..6411a3a90d 100644
--- a/L2J_Mobius_03.0_Helios/dist/game/data/xsd/DailyMission.xsd
+++ b/L2J_Mobius_03.0_Helios/dist/game/data/xsd/DailyMission.xsd
@@ -39,6 +39,7 @@
+
diff --git a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/enums/MissionResetType.java b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/enums/MissionResetType.java
new file mode 100644
index 0000000000..cb74a12d14
--- /dev/null
+++ b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/enums/MissionResetType.java
@@ -0,0 +1,28 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.l2jmobius.gameserver.enums;
+
+/**
+ * @author kamikadzz
+ */
+public enum MissionResetType
+{
+ DAY,
+ WEEK,
+ MONTH,
+ WEEKEND
+}
diff --git a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
index 5582fdde0b..2b7d43f215 100644
--- a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
+++ b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
@@ -16,11 +16,13 @@
*/
package org.l2jmobius.gameserver.model;
+import java.util.Calendar;
import java.util.List;
import java.util.function.Function;
import org.l2jmobius.gameserver.enums.ClassId;
import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.enums.MissionResetType;
import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
import org.l2jmobius.gameserver.handler.DailyMissionHandler;
import org.l2jmobius.gameserver.model.actor.Player;
@@ -39,6 +41,7 @@ public class DailyMissionDataHolder
private final boolean _dailyReset;
private final boolean _isOneTime;
private final AbstractDailyMissionHandler _handler;
+ private final MissionResetType _missionResetSlot;
public DailyMissionDataHolder(StatSet set)
{
@@ -51,6 +54,7 @@ public class DailyMissionDataHolder
_dailyReset = set.getBoolean("dailyReset", true);
_isOneTime = set.getBoolean("isOneTime", true);
_handler = handler != null ? handler.apply(this) : null;
+ _missionResetSlot = set.getObject("duration", MissionResetType.class, MissionResetType.DAY);
}
public int getId()
@@ -115,7 +119,22 @@ public class DailyMissionDataHolder
{
if (_handler != null)
{
- _handler.reset();
+ if ((_missionResetSlot == MissionResetType.WEEK) && (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY))
+ {
+ _handler.reset();
+ }
+ else if ((_missionResetSlot == MissionResetType.MONTH) && (Calendar.getInstance().get(Calendar.DAY_OF_MONTH) == 1))
+ {
+ _handler.reset();
+ }
+ else if ((_missionResetSlot == MissionResetType.WEEKEND) && (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY))
+ {
+ _handler.reset();
+ }
+ else if (_dailyReset)
+ {
+ _handler.reset();
+ }
}
}
}
diff --git a/L2J_Mobius_04.0_GrandCrusade/dist/game/data/DailyMission.xml b/L2J_Mobius_04.0_GrandCrusade/dist/game/data/DailyMission.xml
index fafa24ecf1..d4ab1acdb0 100644
--- a/L2J_Mobius_04.0_GrandCrusade/dist/game/data/DailyMission.xml
+++ b/L2J_Mobius_04.0_GrandCrusade/dist/game/data/DailyMission.xml
@@ -2612,14 +2612,14 @@
-
+
-
+
diff --git a/L2J_Mobius_04.0_GrandCrusade/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java b/L2J_Mobius_04.0_GrandCrusade/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
index 33c1ad74b4..55debbbdc1 100644
--- a/L2J_Mobius_04.0_GrandCrusade/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
+++ b/L2J_Mobius_04.0_GrandCrusade/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
@@ -23,6 +23,7 @@ import org.l2jmobius.gameserver.handler.DailyMissionHandler;
import handlers.dailymissionhandlers.BossDailyMissionHandler;
import handlers.dailymissionhandlers.CeremonyOfChaosDailyMissionHandler;
import handlers.dailymissionhandlers.FishingDailyMissionHandler;
+import handlers.dailymissionhandlers.JoinClanDailyMissionHandler;
import handlers.dailymissionhandlers.LevelDailyMissionHandler;
import handlers.dailymissionhandlers.LoginMonthDailyMissionHandler;
import handlers.dailymissionhandlers.LoginWeekendDailyMissionHandler;
@@ -48,6 +49,7 @@ public class DailyMissionMasterHandler
DailyMissionHandler.getInstance().registerHandler("ceremonyofchaos", CeremonyOfChaosDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("boss", BossDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("fishing", FishingDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("joinclan", JoinClanDailyMissionHandler::new);
LOGGER.info(DailyMissionMasterHandler.class.getSimpleName() + ": Loaded " + DailyMissionHandler.getInstance().size() + " handlers.");
}
}
diff --git a/L2J_Mobius_04.0_GrandCrusade/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java b/L2J_Mobius_04.0_GrandCrusade/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
new file mode 100644
index 0000000000..7af0642f51
--- /dev/null
+++ b/L2J_Mobius_04.0_GrandCrusade/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
@@ -0,0 +1,81 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package handlers.dailymissionhandlers;
+
+import java.util.function.Consumer;
+
+import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
+import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
+import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.Containers;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanCreate;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanJoin;
+import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
+
+/**
+ * @author kamikadzz
+ */
+public class JoinClanDailyMissionHandler extends AbstractDailyMissionHandler
+{
+ public JoinClanDailyMissionHandler(DailyMissionDataHolder holder)
+ {
+ super(holder);
+ }
+
+ @Override
+ public boolean isAvailable(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
+ return (entry != null) && (entry.getStatus() == DailyMissionStatus.AVAILABLE);
+ }
+
+ @Override
+ public void init()
+ {
+ Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_CLAN_JOIN, (Consumer) this::onPlayerClanJoin, this));
+ Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_CLAN_CREATE, (Consumer) this::onPlayerClanCreate, this));
+ }
+
+ private void onPlayerClanJoin(OnPlayerClanJoin event)
+ {
+ final DailyMissionPlayerEntry missionData = getPlayerEntry(event.getClanMember().getPlayer().getObjectId(), true);
+ processMission(missionData);
+ }
+
+ private void onPlayerClanCreate(OnPlayerClanCreate event)
+ {
+ final DailyMissionPlayerEntry missionData = getPlayerEntry(event.getPlayer().getObjectId(), true);
+ processMission(missionData);
+ }
+
+ private void processMission(DailyMissionPlayerEntry missionData)
+ {
+ if (missionData.getProgress() == 1)
+ {
+ missionData.setStatus(DailyMissionStatus.COMPLETED);
+ }
+ else
+ {
+ missionData.setProgress(1);
+ missionData.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(missionData);
+ }
+}
diff --git a/L2J_Mobius_04.0_GrandCrusade/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java b/L2J_Mobius_04.0_GrandCrusade/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
index 84462adcb8..0da9875cd5 100644
--- a/L2J_Mobius_04.0_GrandCrusade/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
+++ b/L2J_Mobius_04.0_GrandCrusade/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
@@ -49,30 +49,14 @@ public class LoginMonthDailyMissionHandler extends AbstractDailyMissionHandler
Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_LOGIN, (OnPlayerLogin event) -> onPlayerLogin(event), this));
}
- @Override
- public void reset()
- {
- // Monthly rewards do not reset daily.
- }
-
private void onPlayerLogin(OnPlayerLogin event)
{
final DailyMissionPlayerEntry entry = getPlayerEntry(event.getPlayer().getObjectId(), true);
- final long lastCompleted = entry.getLastCompleted();
- if (lastCompleted == 0) // Initial entry.
- {
- entry.setLastCompleted(System.currentTimeMillis());
- }
- else if ((System.currentTimeMillis() - lastCompleted) > 2506000000L) // 2506000000L (29 day) delay.
+ if (entry.getStatus() != DailyMissionStatus.COMPLETED)
{
entry.setProgress(1);
entry.setStatus(DailyMissionStatus.AVAILABLE);
}
- else
- {
- entry.setProgress(0);
- entry.setStatus(DailyMissionStatus.NOT_AVAILABLE);
- }
storePlayerEntry(entry);
}
}
diff --git a/L2J_Mobius_04.0_GrandCrusade/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java b/L2J_Mobius_04.0_GrandCrusade/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
index f7e5360c4e..18eaca0a48 100644
--- a/L2J_Mobius_04.0_GrandCrusade/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
+++ b/L2J_Mobius_04.0_GrandCrusade/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
@@ -51,27 +51,18 @@ public class LoginWeekendDailyMissionHandler extends AbstractDailyMissionHandler
Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_LOGIN, (OnPlayerLogin event) -> onPlayerLogin(event), this));
}
- @Override
- public void reset()
- {
- // Weekend rewards do not reset daily.
- }
-
private void onPlayerLogin(OnPlayerLogin event)
{
final DailyMissionPlayerEntry entry = getPlayerEntry(event.getPlayer().getObjectId(), true);
- final int currentDay = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
- final long lastCompleted = entry.getLastCompleted();
- if (((currentDay == Calendar.SATURDAY) || (currentDay == Calendar.SUNDAY)) // Reward only on weekend.
- && ((lastCompleted == 0) || ((System.currentTimeMillis() - lastCompleted) > 172800000))) // Initial entry or 172800000 (2 day) delay.
+ if (entry.getStatus() != DailyMissionStatus.COMPLETED)
{
- entry.setProgress(1);
- entry.setStatus(DailyMissionStatus.AVAILABLE);
- }
- else if (entry.getStatus() != DailyMissionStatus.AVAILABLE) // Not waiting to be rewarded.
- {
- entry.setProgress(0);
- entry.setStatus(DailyMissionStatus.NOT_AVAILABLE);
+ final int currentDay = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
+ if (((currentDay == Calendar.SATURDAY) || (currentDay == Calendar.SUNDAY) || (currentDay == Calendar.MONDAY)) //
+ && (Calendar.getInstance().get(Calendar.HOUR_OF_DAY) < 6) && (Calendar.getInstance().get(Calendar.MINUTE) < 30))
+ {
+ entry.setProgress(1);
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
}
storePlayerEntry(entry);
}
diff --git a/L2J_Mobius_04.0_GrandCrusade/dist/game/data/xsd/DailyMission.xsd b/L2J_Mobius_04.0_GrandCrusade/dist/game/data/xsd/DailyMission.xsd
index 9da08900d0..35f2f6dc35 100644
--- a/L2J_Mobius_04.0_GrandCrusade/dist/game/data/xsd/DailyMission.xsd
+++ b/L2J_Mobius_04.0_GrandCrusade/dist/game/data/xsd/DailyMission.xsd
@@ -42,6 +42,7 @@
+
diff --git a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/enums/MissionResetType.java b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/enums/MissionResetType.java
new file mode 100644
index 0000000000..cb74a12d14
--- /dev/null
+++ b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/enums/MissionResetType.java
@@ -0,0 +1,28 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.l2jmobius.gameserver.enums;
+
+/**
+ * @author kamikadzz
+ */
+public enum MissionResetType
+{
+ DAY,
+ WEEK,
+ MONTH,
+ WEEKEND
+}
diff --git a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
index c3afc80400..a82b5db772 100644
--- a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
+++ b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
@@ -16,11 +16,13 @@
*/
package org.l2jmobius.gameserver.model;
+import java.util.Calendar;
import java.util.List;
import java.util.function.Function;
import org.l2jmobius.gameserver.enums.ClassId;
import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.enums.MissionResetType;
import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
import org.l2jmobius.gameserver.handler.DailyMissionHandler;
import org.l2jmobius.gameserver.model.actor.Player;
@@ -42,6 +44,7 @@ public class DailyMissionDataHolder
private final boolean _isDualClassOnly;
private final boolean _isDisplayedWhenNotAvailable;
private final AbstractDailyMissionHandler _handler;
+ private final MissionResetType _missionResetSlot;
public DailyMissionDataHolder(StatSet set)
{
@@ -57,6 +60,7 @@ public class DailyMissionDataHolder
_isDualClassOnly = set.getBoolean("isDualClassOnly", false);
_isDisplayedWhenNotAvailable = set.getBoolean("isDisplayedWhenNotAvailable", true);
_handler = handler != null ? handler.apply(this) : null;
+ _missionResetSlot = set.getObject("duration", MissionResetType.class, MissionResetType.DAY);
}
public int getId()
@@ -166,7 +170,22 @@ public class DailyMissionDataHolder
{
if (_handler != null)
{
- _handler.reset();
+ if ((_missionResetSlot == MissionResetType.WEEK) && (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY))
+ {
+ _handler.reset();
+ }
+ else if ((_missionResetSlot == MissionResetType.MONTH) && (Calendar.getInstance().get(Calendar.DAY_OF_MONTH) == 1))
+ {
+ _handler.reset();
+ }
+ else if ((_missionResetSlot == MissionResetType.WEEKEND) && (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY))
+ {
+ _handler.reset();
+ }
+ else if (_dailyReset)
+ {
+ _handler.reset();
+ }
}
}
}
diff --git a/L2J_Mobius_05.0_Salvation/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java b/L2J_Mobius_05.0_Salvation/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
index 33c1ad74b4..55debbbdc1 100644
--- a/L2J_Mobius_05.0_Salvation/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
+++ b/L2J_Mobius_05.0_Salvation/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
@@ -23,6 +23,7 @@ import org.l2jmobius.gameserver.handler.DailyMissionHandler;
import handlers.dailymissionhandlers.BossDailyMissionHandler;
import handlers.dailymissionhandlers.CeremonyOfChaosDailyMissionHandler;
import handlers.dailymissionhandlers.FishingDailyMissionHandler;
+import handlers.dailymissionhandlers.JoinClanDailyMissionHandler;
import handlers.dailymissionhandlers.LevelDailyMissionHandler;
import handlers.dailymissionhandlers.LoginMonthDailyMissionHandler;
import handlers.dailymissionhandlers.LoginWeekendDailyMissionHandler;
@@ -48,6 +49,7 @@ public class DailyMissionMasterHandler
DailyMissionHandler.getInstance().registerHandler("ceremonyofchaos", CeremonyOfChaosDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("boss", BossDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("fishing", FishingDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("joinclan", JoinClanDailyMissionHandler::new);
LOGGER.info(DailyMissionMasterHandler.class.getSimpleName() + ": Loaded " + DailyMissionHandler.getInstance().size() + " handlers.");
}
}
diff --git a/L2J_Mobius_05.0_Salvation/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java b/L2J_Mobius_05.0_Salvation/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
new file mode 100644
index 0000000000..7af0642f51
--- /dev/null
+++ b/L2J_Mobius_05.0_Salvation/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
@@ -0,0 +1,81 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package handlers.dailymissionhandlers;
+
+import java.util.function.Consumer;
+
+import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
+import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
+import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.Containers;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanCreate;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanJoin;
+import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
+
+/**
+ * @author kamikadzz
+ */
+public class JoinClanDailyMissionHandler extends AbstractDailyMissionHandler
+{
+ public JoinClanDailyMissionHandler(DailyMissionDataHolder holder)
+ {
+ super(holder);
+ }
+
+ @Override
+ public boolean isAvailable(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
+ return (entry != null) && (entry.getStatus() == DailyMissionStatus.AVAILABLE);
+ }
+
+ @Override
+ public void init()
+ {
+ Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_CLAN_JOIN, (Consumer) this::onPlayerClanJoin, this));
+ Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_CLAN_CREATE, (Consumer) this::onPlayerClanCreate, this));
+ }
+
+ private void onPlayerClanJoin(OnPlayerClanJoin event)
+ {
+ final DailyMissionPlayerEntry missionData = getPlayerEntry(event.getClanMember().getPlayer().getObjectId(), true);
+ processMission(missionData);
+ }
+
+ private void onPlayerClanCreate(OnPlayerClanCreate event)
+ {
+ final DailyMissionPlayerEntry missionData = getPlayerEntry(event.getPlayer().getObjectId(), true);
+ processMission(missionData);
+ }
+
+ private void processMission(DailyMissionPlayerEntry missionData)
+ {
+ if (missionData.getProgress() == 1)
+ {
+ missionData.setStatus(DailyMissionStatus.COMPLETED);
+ }
+ else
+ {
+ missionData.setProgress(1);
+ missionData.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(missionData);
+ }
+}
diff --git a/L2J_Mobius_05.0_Salvation/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java b/L2J_Mobius_05.0_Salvation/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
index 84462adcb8..0da9875cd5 100644
--- a/L2J_Mobius_05.0_Salvation/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
+++ b/L2J_Mobius_05.0_Salvation/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
@@ -49,30 +49,14 @@ public class LoginMonthDailyMissionHandler extends AbstractDailyMissionHandler
Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_LOGIN, (OnPlayerLogin event) -> onPlayerLogin(event), this));
}
- @Override
- public void reset()
- {
- // Monthly rewards do not reset daily.
- }
-
private void onPlayerLogin(OnPlayerLogin event)
{
final DailyMissionPlayerEntry entry = getPlayerEntry(event.getPlayer().getObjectId(), true);
- final long lastCompleted = entry.getLastCompleted();
- if (lastCompleted == 0) // Initial entry.
- {
- entry.setLastCompleted(System.currentTimeMillis());
- }
- else if ((System.currentTimeMillis() - lastCompleted) > 2506000000L) // 2506000000L (29 day) delay.
+ if (entry.getStatus() != DailyMissionStatus.COMPLETED)
{
entry.setProgress(1);
entry.setStatus(DailyMissionStatus.AVAILABLE);
}
- else
- {
- entry.setProgress(0);
- entry.setStatus(DailyMissionStatus.NOT_AVAILABLE);
- }
storePlayerEntry(entry);
}
}
diff --git a/L2J_Mobius_05.0_Salvation/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java b/L2J_Mobius_05.0_Salvation/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
index f7e5360c4e..18eaca0a48 100644
--- a/L2J_Mobius_05.0_Salvation/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
+++ b/L2J_Mobius_05.0_Salvation/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
@@ -51,27 +51,18 @@ public class LoginWeekendDailyMissionHandler extends AbstractDailyMissionHandler
Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_LOGIN, (OnPlayerLogin event) -> onPlayerLogin(event), this));
}
- @Override
- public void reset()
- {
- // Weekend rewards do not reset daily.
- }
-
private void onPlayerLogin(OnPlayerLogin event)
{
final DailyMissionPlayerEntry entry = getPlayerEntry(event.getPlayer().getObjectId(), true);
- final int currentDay = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
- final long lastCompleted = entry.getLastCompleted();
- if (((currentDay == Calendar.SATURDAY) || (currentDay == Calendar.SUNDAY)) // Reward only on weekend.
- && ((lastCompleted == 0) || ((System.currentTimeMillis() - lastCompleted) > 172800000))) // Initial entry or 172800000 (2 day) delay.
+ if (entry.getStatus() != DailyMissionStatus.COMPLETED)
{
- entry.setProgress(1);
- entry.setStatus(DailyMissionStatus.AVAILABLE);
- }
- else if (entry.getStatus() != DailyMissionStatus.AVAILABLE) // Not waiting to be rewarded.
- {
- entry.setProgress(0);
- entry.setStatus(DailyMissionStatus.NOT_AVAILABLE);
+ final int currentDay = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
+ if (((currentDay == Calendar.SATURDAY) || (currentDay == Calendar.SUNDAY) || (currentDay == Calendar.MONDAY)) //
+ && (Calendar.getInstance().get(Calendar.HOUR_OF_DAY) < 6) && (Calendar.getInstance().get(Calendar.MINUTE) < 30))
+ {
+ entry.setProgress(1);
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
}
storePlayerEntry(entry);
}
diff --git a/L2J_Mobius_05.0_Salvation/dist/game/data/xsd/DailyMission.xsd b/L2J_Mobius_05.0_Salvation/dist/game/data/xsd/DailyMission.xsd
index 9da08900d0..35f2f6dc35 100644
--- a/L2J_Mobius_05.0_Salvation/dist/game/data/xsd/DailyMission.xsd
+++ b/L2J_Mobius_05.0_Salvation/dist/game/data/xsd/DailyMission.xsd
@@ -42,6 +42,7 @@
+
diff --git a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/enums/MissionResetType.java b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/enums/MissionResetType.java
new file mode 100644
index 0000000000..cb74a12d14
--- /dev/null
+++ b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/enums/MissionResetType.java
@@ -0,0 +1,28 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.l2jmobius.gameserver.enums;
+
+/**
+ * @author kamikadzz
+ */
+public enum MissionResetType
+{
+ DAY,
+ WEEK,
+ MONTH,
+ WEEKEND
+}
diff --git a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
index 6c55c9d65a..892f3b75df 100644
--- a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
+++ b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
@@ -16,11 +16,13 @@
*/
package org.l2jmobius.gameserver.model;
+import java.util.Calendar;
import java.util.List;
import java.util.function.Function;
import org.l2jmobius.gameserver.enums.ClassId;
import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.enums.MissionResetType;
import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
import org.l2jmobius.gameserver.handler.DailyMissionHandler;
import org.l2jmobius.gameserver.model.actor.Player;
@@ -42,6 +44,7 @@ public class DailyMissionDataHolder
private final boolean _isDualClassOnly;
private final boolean _isDisplayedWhenNotAvailable;
private final AbstractDailyMissionHandler _handler;
+ private final MissionResetType _missionResetSlot;
public DailyMissionDataHolder(StatSet set)
{
@@ -57,6 +60,7 @@ public class DailyMissionDataHolder
_isDualClassOnly = set.getBoolean("isDualClassOnly", false);
_isDisplayedWhenNotAvailable = set.getBoolean("isDisplayedWhenNotAvailable", true);
_handler = handler != null ? handler.apply(this) : null;
+ _missionResetSlot = set.getObject("duration", MissionResetType.class, MissionResetType.DAY);
}
public int getId()
@@ -171,7 +175,22 @@ public class DailyMissionDataHolder
{
if (_handler != null)
{
- _handler.reset();
+ if ((_missionResetSlot == MissionResetType.WEEK) && (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY))
+ {
+ _handler.reset();
+ }
+ else if ((_missionResetSlot == MissionResetType.MONTH) && (Calendar.getInstance().get(Calendar.DAY_OF_MONTH) == 1))
+ {
+ _handler.reset();
+ }
+ else if ((_missionResetSlot == MissionResetType.WEEKEND) && (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY))
+ {
+ _handler.reset();
+ }
+ else if (_dailyReset)
+ {
+ _handler.reset();
+ }
}
}
}
diff --git a/L2J_Mobius_05.5_EtinasFate/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java b/L2J_Mobius_05.5_EtinasFate/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
index 33c1ad74b4..55debbbdc1 100644
--- a/L2J_Mobius_05.5_EtinasFate/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
+++ b/L2J_Mobius_05.5_EtinasFate/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
@@ -23,6 +23,7 @@ import org.l2jmobius.gameserver.handler.DailyMissionHandler;
import handlers.dailymissionhandlers.BossDailyMissionHandler;
import handlers.dailymissionhandlers.CeremonyOfChaosDailyMissionHandler;
import handlers.dailymissionhandlers.FishingDailyMissionHandler;
+import handlers.dailymissionhandlers.JoinClanDailyMissionHandler;
import handlers.dailymissionhandlers.LevelDailyMissionHandler;
import handlers.dailymissionhandlers.LoginMonthDailyMissionHandler;
import handlers.dailymissionhandlers.LoginWeekendDailyMissionHandler;
@@ -48,6 +49,7 @@ public class DailyMissionMasterHandler
DailyMissionHandler.getInstance().registerHandler("ceremonyofchaos", CeremonyOfChaosDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("boss", BossDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("fishing", FishingDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("joinclan", JoinClanDailyMissionHandler::new);
LOGGER.info(DailyMissionMasterHandler.class.getSimpleName() + ": Loaded " + DailyMissionHandler.getInstance().size() + " handlers.");
}
}
diff --git a/L2J_Mobius_05.5_EtinasFate/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java b/L2J_Mobius_05.5_EtinasFate/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
new file mode 100644
index 0000000000..7af0642f51
--- /dev/null
+++ b/L2J_Mobius_05.5_EtinasFate/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
@@ -0,0 +1,81 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package handlers.dailymissionhandlers;
+
+import java.util.function.Consumer;
+
+import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
+import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
+import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.Containers;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanCreate;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanJoin;
+import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
+
+/**
+ * @author kamikadzz
+ */
+public class JoinClanDailyMissionHandler extends AbstractDailyMissionHandler
+{
+ public JoinClanDailyMissionHandler(DailyMissionDataHolder holder)
+ {
+ super(holder);
+ }
+
+ @Override
+ public boolean isAvailable(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
+ return (entry != null) && (entry.getStatus() == DailyMissionStatus.AVAILABLE);
+ }
+
+ @Override
+ public void init()
+ {
+ Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_CLAN_JOIN, (Consumer) this::onPlayerClanJoin, this));
+ Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_CLAN_CREATE, (Consumer) this::onPlayerClanCreate, this));
+ }
+
+ private void onPlayerClanJoin(OnPlayerClanJoin event)
+ {
+ final DailyMissionPlayerEntry missionData = getPlayerEntry(event.getClanMember().getPlayer().getObjectId(), true);
+ processMission(missionData);
+ }
+
+ private void onPlayerClanCreate(OnPlayerClanCreate event)
+ {
+ final DailyMissionPlayerEntry missionData = getPlayerEntry(event.getPlayer().getObjectId(), true);
+ processMission(missionData);
+ }
+
+ private void processMission(DailyMissionPlayerEntry missionData)
+ {
+ if (missionData.getProgress() == 1)
+ {
+ missionData.setStatus(DailyMissionStatus.COMPLETED);
+ }
+ else
+ {
+ missionData.setProgress(1);
+ missionData.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(missionData);
+ }
+}
diff --git a/L2J_Mobius_05.5_EtinasFate/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java b/L2J_Mobius_05.5_EtinasFate/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
index 84462adcb8..0da9875cd5 100644
--- a/L2J_Mobius_05.5_EtinasFate/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
+++ b/L2J_Mobius_05.5_EtinasFate/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
@@ -49,30 +49,14 @@ public class LoginMonthDailyMissionHandler extends AbstractDailyMissionHandler
Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_LOGIN, (OnPlayerLogin event) -> onPlayerLogin(event), this));
}
- @Override
- public void reset()
- {
- // Monthly rewards do not reset daily.
- }
-
private void onPlayerLogin(OnPlayerLogin event)
{
final DailyMissionPlayerEntry entry = getPlayerEntry(event.getPlayer().getObjectId(), true);
- final long lastCompleted = entry.getLastCompleted();
- if (lastCompleted == 0) // Initial entry.
- {
- entry.setLastCompleted(System.currentTimeMillis());
- }
- else if ((System.currentTimeMillis() - lastCompleted) > 2506000000L) // 2506000000L (29 day) delay.
+ if (entry.getStatus() != DailyMissionStatus.COMPLETED)
{
entry.setProgress(1);
entry.setStatus(DailyMissionStatus.AVAILABLE);
}
- else
- {
- entry.setProgress(0);
- entry.setStatus(DailyMissionStatus.NOT_AVAILABLE);
- }
storePlayerEntry(entry);
}
}
diff --git a/L2J_Mobius_05.5_EtinasFate/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java b/L2J_Mobius_05.5_EtinasFate/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
index f7e5360c4e..18eaca0a48 100644
--- a/L2J_Mobius_05.5_EtinasFate/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
+++ b/L2J_Mobius_05.5_EtinasFate/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
@@ -51,27 +51,18 @@ public class LoginWeekendDailyMissionHandler extends AbstractDailyMissionHandler
Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_LOGIN, (OnPlayerLogin event) -> onPlayerLogin(event), this));
}
- @Override
- public void reset()
- {
- // Weekend rewards do not reset daily.
- }
-
private void onPlayerLogin(OnPlayerLogin event)
{
final DailyMissionPlayerEntry entry = getPlayerEntry(event.getPlayer().getObjectId(), true);
- final int currentDay = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
- final long lastCompleted = entry.getLastCompleted();
- if (((currentDay == Calendar.SATURDAY) || (currentDay == Calendar.SUNDAY)) // Reward only on weekend.
- && ((lastCompleted == 0) || ((System.currentTimeMillis() - lastCompleted) > 172800000))) // Initial entry or 172800000 (2 day) delay.
+ if (entry.getStatus() != DailyMissionStatus.COMPLETED)
{
- entry.setProgress(1);
- entry.setStatus(DailyMissionStatus.AVAILABLE);
- }
- else if (entry.getStatus() != DailyMissionStatus.AVAILABLE) // Not waiting to be rewarded.
- {
- entry.setProgress(0);
- entry.setStatus(DailyMissionStatus.NOT_AVAILABLE);
+ final int currentDay = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
+ if (((currentDay == Calendar.SATURDAY) || (currentDay == Calendar.SUNDAY) || (currentDay == Calendar.MONDAY)) //
+ && (Calendar.getInstance().get(Calendar.HOUR_OF_DAY) < 6) && (Calendar.getInstance().get(Calendar.MINUTE) < 30))
+ {
+ entry.setProgress(1);
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
}
storePlayerEntry(entry);
}
diff --git a/L2J_Mobius_05.5_EtinasFate/dist/game/data/xsd/DailyMission.xsd b/L2J_Mobius_05.5_EtinasFate/dist/game/data/xsd/DailyMission.xsd
index 9da08900d0..35f2f6dc35 100644
--- a/L2J_Mobius_05.5_EtinasFate/dist/game/data/xsd/DailyMission.xsd
+++ b/L2J_Mobius_05.5_EtinasFate/dist/game/data/xsd/DailyMission.xsd
@@ -42,6 +42,7 @@
+
diff --git a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/enums/MissionResetType.java b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/enums/MissionResetType.java
new file mode 100644
index 0000000000..cb74a12d14
--- /dev/null
+++ b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/enums/MissionResetType.java
@@ -0,0 +1,28 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.l2jmobius.gameserver.enums;
+
+/**
+ * @author kamikadzz
+ */
+public enum MissionResetType
+{
+ DAY,
+ WEEK,
+ MONTH,
+ WEEKEND
+}
diff --git a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
index 6c55c9d65a..892f3b75df 100644
--- a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
+++ b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
@@ -16,11 +16,13 @@
*/
package org.l2jmobius.gameserver.model;
+import java.util.Calendar;
import java.util.List;
import java.util.function.Function;
import org.l2jmobius.gameserver.enums.ClassId;
import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.enums.MissionResetType;
import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
import org.l2jmobius.gameserver.handler.DailyMissionHandler;
import org.l2jmobius.gameserver.model.actor.Player;
@@ -42,6 +44,7 @@ public class DailyMissionDataHolder
private final boolean _isDualClassOnly;
private final boolean _isDisplayedWhenNotAvailable;
private final AbstractDailyMissionHandler _handler;
+ private final MissionResetType _missionResetSlot;
public DailyMissionDataHolder(StatSet set)
{
@@ -57,6 +60,7 @@ public class DailyMissionDataHolder
_isDualClassOnly = set.getBoolean("isDualClassOnly", false);
_isDisplayedWhenNotAvailable = set.getBoolean("isDisplayedWhenNotAvailable", true);
_handler = handler != null ? handler.apply(this) : null;
+ _missionResetSlot = set.getObject("duration", MissionResetType.class, MissionResetType.DAY);
}
public int getId()
@@ -171,7 +175,22 @@ public class DailyMissionDataHolder
{
if (_handler != null)
{
- _handler.reset();
+ if ((_missionResetSlot == MissionResetType.WEEK) && (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY))
+ {
+ _handler.reset();
+ }
+ else if ((_missionResetSlot == MissionResetType.MONTH) && (Calendar.getInstance().get(Calendar.DAY_OF_MONTH) == 1))
+ {
+ _handler.reset();
+ }
+ else if ((_missionResetSlot == MissionResetType.WEEKEND) && (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY))
+ {
+ _handler.reset();
+ }
+ else if (_dailyReset)
+ {
+ _handler.reset();
+ }
}
}
}
diff --git a/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java b/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
index 42f60f8499..b846e23668 100644
--- a/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
+++ b/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
@@ -23,6 +23,7 @@ import org.l2jmobius.gameserver.handler.DailyMissionHandler;
import handlers.dailymissionhandlers.BossDailyMissionHandler;
import handlers.dailymissionhandlers.CeremonyOfChaosDailyMissionHandler;
import handlers.dailymissionhandlers.FishingDailyMissionHandler;
+import handlers.dailymissionhandlers.JoinClanDailyMissionHandler;
import handlers.dailymissionhandlers.LevelDailyMissionHandler;
import handlers.dailymissionhandlers.LoginMonthDailyMissionHandler;
import handlers.dailymissionhandlers.LoginWeekendDailyMissionHandler;
@@ -50,6 +51,7 @@ public class DailyMissionMasterHandler
DailyMissionHandler.getInstance().registerHandler("boss", BossDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("monster", MonsterDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("fishing", FishingDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("joinclan", JoinClanDailyMissionHandler::new);
LOGGER.info(DailyMissionMasterHandler.class.getSimpleName() + ": Loaded " + DailyMissionHandler.getInstance().size() + " handlers.");
}
}
diff --git a/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java b/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
new file mode 100644
index 0000000000..7af0642f51
--- /dev/null
+++ b/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
@@ -0,0 +1,81 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package handlers.dailymissionhandlers;
+
+import java.util.function.Consumer;
+
+import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
+import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
+import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.Containers;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanCreate;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanJoin;
+import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
+
+/**
+ * @author kamikadzz
+ */
+public class JoinClanDailyMissionHandler extends AbstractDailyMissionHandler
+{
+ public JoinClanDailyMissionHandler(DailyMissionDataHolder holder)
+ {
+ super(holder);
+ }
+
+ @Override
+ public boolean isAvailable(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
+ return (entry != null) && (entry.getStatus() == DailyMissionStatus.AVAILABLE);
+ }
+
+ @Override
+ public void init()
+ {
+ Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_CLAN_JOIN, (Consumer) this::onPlayerClanJoin, this));
+ Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_CLAN_CREATE, (Consumer) this::onPlayerClanCreate, this));
+ }
+
+ private void onPlayerClanJoin(OnPlayerClanJoin event)
+ {
+ final DailyMissionPlayerEntry missionData = getPlayerEntry(event.getClanMember().getPlayer().getObjectId(), true);
+ processMission(missionData);
+ }
+
+ private void onPlayerClanCreate(OnPlayerClanCreate event)
+ {
+ final DailyMissionPlayerEntry missionData = getPlayerEntry(event.getPlayer().getObjectId(), true);
+ processMission(missionData);
+ }
+
+ private void processMission(DailyMissionPlayerEntry missionData)
+ {
+ if (missionData.getProgress() == 1)
+ {
+ missionData.setStatus(DailyMissionStatus.COMPLETED);
+ }
+ else
+ {
+ missionData.setProgress(1);
+ missionData.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(missionData);
+ }
+}
diff --git a/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java b/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
index 84462adcb8..0da9875cd5 100644
--- a/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
+++ b/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
@@ -49,30 +49,14 @@ public class LoginMonthDailyMissionHandler extends AbstractDailyMissionHandler
Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_LOGIN, (OnPlayerLogin event) -> onPlayerLogin(event), this));
}
- @Override
- public void reset()
- {
- // Monthly rewards do not reset daily.
- }
-
private void onPlayerLogin(OnPlayerLogin event)
{
final DailyMissionPlayerEntry entry = getPlayerEntry(event.getPlayer().getObjectId(), true);
- final long lastCompleted = entry.getLastCompleted();
- if (lastCompleted == 0) // Initial entry.
- {
- entry.setLastCompleted(System.currentTimeMillis());
- }
- else if ((System.currentTimeMillis() - lastCompleted) > 2506000000L) // 2506000000L (29 day) delay.
+ if (entry.getStatus() != DailyMissionStatus.COMPLETED)
{
entry.setProgress(1);
entry.setStatus(DailyMissionStatus.AVAILABLE);
}
- else
- {
- entry.setProgress(0);
- entry.setStatus(DailyMissionStatus.NOT_AVAILABLE);
- }
storePlayerEntry(entry);
}
}
diff --git a/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java b/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
index f7e5360c4e..18eaca0a48 100644
--- a/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
+++ b/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
@@ -51,27 +51,18 @@ public class LoginWeekendDailyMissionHandler extends AbstractDailyMissionHandler
Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_LOGIN, (OnPlayerLogin event) -> onPlayerLogin(event), this));
}
- @Override
- public void reset()
- {
- // Weekend rewards do not reset daily.
- }
-
private void onPlayerLogin(OnPlayerLogin event)
{
final DailyMissionPlayerEntry entry = getPlayerEntry(event.getPlayer().getObjectId(), true);
- final int currentDay = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
- final long lastCompleted = entry.getLastCompleted();
- if (((currentDay == Calendar.SATURDAY) || (currentDay == Calendar.SUNDAY)) // Reward only on weekend.
- && ((lastCompleted == 0) || ((System.currentTimeMillis() - lastCompleted) > 172800000))) // Initial entry or 172800000 (2 day) delay.
+ if (entry.getStatus() != DailyMissionStatus.COMPLETED)
{
- entry.setProgress(1);
- entry.setStatus(DailyMissionStatus.AVAILABLE);
- }
- else if (entry.getStatus() != DailyMissionStatus.AVAILABLE) // Not waiting to be rewarded.
- {
- entry.setProgress(0);
- entry.setStatus(DailyMissionStatus.NOT_AVAILABLE);
+ final int currentDay = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
+ if (((currentDay == Calendar.SATURDAY) || (currentDay == Calendar.SUNDAY) || (currentDay == Calendar.MONDAY)) //
+ && (Calendar.getInstance().get(Calendar.HOUR_OF_DAY) < 6) && (Calendar.getInstance().get(Calendar.MINUTE) < 30))
+ {
+ entry.setProgress(1);
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
}
storePlayerEntry(entry);
}
diff --git a/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java b/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java
index a60d57f8f4..fe55a18870 100644
--- a/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java
+++ b/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java
@@ -106,12 +106,9 @@ public class MonsterDailyMissionHandler extends AbstractDailyMissionHandler
final Player player = event.getAttacker();
final int monsterLevel = monster.getLevel();
- if (_minLevel > 0)
+ if ((_minLevel > 0) && ((monsterLevel < _minLevel) || (monsterLevel > _maxLevel) || ((player.getLevel() - monsterLevel) > 5)))
{
- if ((monsterLevel < _minLevel) || (monsterLevel > _maxLevel) || ((player.getLevel() - monsterLevel) > 5))
- {
- return;
- }
+ return;
}
final Party party = player.getParty();
diff --git a/L2J_Mobius_06.0_Fafurion/dist/game/data/xsd/DailyMission.xsd b/L2J_Mobius_06.0_Fafurion/dist/game/data/xsd/DailyMission.xsd
index 9da08900d0..35f2f6dc35 100644
--- a/L2J_Mobius_06.0_Fafurion/dist/game/data/xsd/DailyMission.xsd
+++ b/L2J_Mobius_06.0_Fafurion/dist/game/data/xsd/DailyMission.xsd
@@ -42,6 +42,7 @@
+
diff --git a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/enums/MissionResetType.java b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/enums/MissionResetType.java
new file mode 100644
index 0000000000..cb74a12d14
--- /dev/null
+++ b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/enums/MissionResetType.java
@@ -0,0 +1,28 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.l2jmobius.gameserver.enums;
+
+/**
+ * @author kamikadzz
+ */
+public enum MissionResetType
+{
+ DAY,
+ WEEK,
+ MONTH,
+ WEEKEND
+}
diff --git a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
index 6c55c9d65a..892f3b75df 100644
--- a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
+++ b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
@@ -16,11 +16,13 @@
*/
package org.l2jmobius.gameserver.model;
+import java.util.Calendar;
import java.util.List;
import java.util.function.Function;
import org.l2jmobius.gameserver.enums.ClassId;
import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.enums.MissionResetType;
import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
import org.l2jmobius.gameserver.handler.DailyMissionHandler;
import org.l2jmobius.gameserver.model.actor.Player;
@@ -42,6 +44,7 @@ public class DailyMissionDataHolder
private final boolean _isDualClassOnly;
private final boolean _isDisplayedWhenNotAvailable;
private final AbstractDailyMissionHandler _handler;
+ private final MissionResetType _missionResetSlot;
public DailyMissionDataHolder(StatSet set)
{
@@ -57,6 +60,7 @@ public class DailyMissionDataHolder
_isDualClassOnly = set.getBoolean("isDualClassOnly", false);
_isDisplayedWhenNotAvailable = set.getBoolean("isDisplayedWhenNotAvailable", true);
_handler = handler != null ? handler.apply(this) : null;
+ _missionResetSlot = set.getObject("duration", MissionResetType.class, MissionResetType.DAY);
}
public int getId()
@@ -171,7 +175,22 @@ public class DailyMissionDataHolder
{
if (_handler != null)
{
- _handler.reset();
+ if ((_missionResetSlot == MissionResetType.WEEK) && (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY))
+ {
+ _handler.reset();
+ }
+ else if ((_missionResetSlot == MissionResetType.MONTH) && (Calendar.getInstance().get(Calendar.DAY_OF_MONTH) == 1))
+ {
+ _handler.reset();
+ }
+ else if ((_missionResetSlot == MissionResetType.WEEKEND) && (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY))
+ {
+ _handler.reset();
+ }
+ else if (_dailyReset)
+ {
+ _handler.reset();
+ }
}
}
}
diff --git a/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java b/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
index 42f60f8499..b846e23668 100644
--- a/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
+++ b/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
@@ -23,6 +23,7 @@ import org.l2jmobius.gameserver.handler.DailyMissionHandler;
import handlers.dailymissionhandlers.BossDailyMissionHandler;
import handlers.dailymissionhandlers.CeremonyOfChaosDailyMissionHandler;
import handlers.dailymissionhandlers.FishingDailyMissionHandler;
+import handlers.dailymissionhandlers.JoinClanDailyMissionHandler;
import handlers.dailymissionhandlers.LevelDailyMissionHandler;
import handlers.dailymissionhandlers.LoginMonthDailyMissionHandler;
import handlers.dailymissionhandlers.LoginWeekendDailyMissionHandler;
@@ -50,6 +51,7 @@ public class DailyMissionMasterHandler
DailyMissionHandler.getInstance().registerHandler("boss", BossDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("monster", MonsterDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("fishing", FishingDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("joinclan", JoinClanDailyMissionHandler::new);
LOGGER.info(DailyMissionMasterHandler.class.getSimpleName() + ": Loaded " + DailyMissionHandler.getInstance().size() + " handlers.");
}
}
diff --git a/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java b/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
new file mode 100644
index 0000000000..7af0642f51
--- /dev/null
+++ b/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
@@ -0,0 +1,81 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package handlers.dailymissionhandlers;
+
+import java.util.function.Consumer;
+
+import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
+import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
+import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.Containers;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanCreate;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanJoin;
+import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
+
+/**
+ * @author kamikadzz
+ */
+public class JoinClanDailyMissionHandler extends AbstractDailyMissionHandler
+{
+ public JoinClanDailyMissionHandler(DailyMissionDataHolder holder)
+ {
+ super(holder);
+ }
+
+ @Override
+ public boolean isAvailable(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
+ return (entry != null) && (entry.getStatus() == DailyMissionStatus.AVAILABLE);
+ }
+
+ @Override
+ public void init()
+ {
+ Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_CLAN_JOIN, (Consumer) this::onPlayerClanJoin, this));
+ Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_CLAN_CREATE, (Consumer) this::onPlayerClanCreate, this));
+ }
+
+ private void onPlayerClanJoin(OnPlayerClanJoin event)
+ {
+ final DailyMissionPlayerEntry missionData = getPlayerEntry(event.getClanMember().getPlayer().getObjectId(), true);
+ processMission(missionData);
+ }
+
+ private void onPlayerClanCreate(OnPlayerClanCreate event)
+ {
+ final DailyMissionPlayerEntry missionData = getPlayerEntry(event.getPlayer().getObjectId(), true);
+ processMission(missionData);
+ }
+
+ private void processMission(DailyMissionPlayerEntry missionData)
+ {
+ if (missionData.getProgress() == 1)
+ {
+ missionData.setStatus(DailyMissionStatus.COMPLETED);
+ }
+ else
+ {
+ missionData.setProgress(1);
+ missionData.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(missionData);
+ }
+}
diff --git a/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java b/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
index 84462adcb8..0da9875cd5 100644
--- a/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
+++ b/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
@@ -49,30 +49,14 @@ public class LoginMonthDailyMissionHandler extends AbstractDailyMissionHandler
Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_LOGIN, (OnPlayerLogin event) -> onPlayerLogin(event), this));
}
- @Override
- public void reset()
- {
- // Monthly rewards do not reset daily.
- }
-
private void onPlayerLogin(OnPlayerLogin event)
{
final DailyMissionPlayerEntry entry = getPlayerEntry(event.getPlayer().getObjectId(), true);
- final long lastCompleted = entry.getLastCompleted();
- if (lastCompleted == 0) // Initial entry.
- {
- entry.setLastCompleted(System.currentTimeMillis());
- }
- else if ((System.currentTimeMillis() - lastCompleted) > 2506000000L) // 2506000000L (29 day) delay.
+ if (entry.getStatus() != DailyMissionStatus.COMPLETED)
{
entry.setProgress(1);
entry.setStatus(DailyMissionStatus.AVAILABLE);
}
- else
- {
- entry.setProgress(0);
- entry.setStatus(DailyMissionStatus.NOT_AVAILABLE);
- }
storePlayerEntry(entry);
}
}
diff --git a/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java b/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
index f7e5360c4e..18eaca0a48 100644
--- a/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
+++ b/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
@@ -51,27 +51,18 @@ public class LoginWeekendDailyMissionHandler extends AbstractDailyMissionHandler
Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_LOGIN, (OnPlayerLogin event) -> onPlayerLogin(event), this));
}
- @Override
- public void reset()
- {
- // Weekend rewards do not reset daily.
- }
-
private void onPlayerLogin(OnPlayerLogin event)
{
final DailyMissionPlayerEntry entry = getPlayerEntry(event.getPlayer().getObjectId(), true);
- final int currentDay = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
- final long lastCompleted = entry.getLastCompleted();
- if (((currentDay == Calendar.SATURDAY) || (currentDay == Calendar.SUNDAY)) // Reward only on weekend.
- && ((lastCompleted == 0) || ((System.currentTimeMillis() - lastCompleted) > 172800000))) // Initial entry or 172800000 (2 day) delay.
+ if (entry.getStatus() != DailyMissionStatus.COMPLETED)
{
- entry.setProgress(1);
- entry.setStatus(DailyMissionStatus.AVAILABLE);
- }
- else if (entry.getStatus() != DailyMissionStatus.AVAILABLE) // Not waiting to be rewarded.
- {
- entry.setProgress(0);
- entry.setStatus(DailyMissionStatus.NOT_AVAILABLE);
+ final int currentDay = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
+ if (((currentDay == Calendar.SATURDAY) || (currentDay == Calendar.SUNDAY) || (currentDay == Calendar.MONDAY)) //
+ && (Calendar.getInstance().get(Calendar.HOUR_OF_DAY) < 6) && (Calendar.getInstance().get(Calendar.MINUTE) < 30))
+ {
+ entry.setProgress(1);
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
}
storePlayerEntry(entry);
}
diff --git a/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java b/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java
index a60d57f8f4..fe55a18870 100644
--- a/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java
+++ b/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java
@@ -106,12 +106,9 @@ public class MonsterDailyMissionHandler extends AbstractDailyMissionHandler
final Player player = event.getAttacker();
final int monsterLevel = monster.getLevel();
- if (_minLevel > 0)
+ if ((_minLevel > 0) && ((monsterLevel < _minLevel) || (monsterLevel > _maxLevel) || ((player.getLevel() - monsterLevel) > 5)))
{
- if ((monsterLevel < _minLevel) || (monsterLevel > _maxLevel) || ((player.getLevel() - monsterLevel) > 5))
- {
- return;
- }
+ return;
}
final Party party = player.getParty();
diff --git a/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/xsd/DailyMission.xsd b/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/xsd/DailyMission.xsd
index 9da08900d0..35f2f6dc35 100644
--- a/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/xsd/DailyMission.xsd
+++ b/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/xsd/DailyMission.xsd
@@ -42,6 +42,7 @@
+
diff --git a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/enums/MissionResetType.java b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/enums/MissionResetType.java
new file mode 100644
index 0000000000..cb74a12d14
--- /dev/null
+++ b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/enums/MissionResetType.java
@@ -0,0 +1,28 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.l2jmobius.gameserver.enums;
+
+/**
+ * @author kamikadzz
+ */
+public enum MissionResetType
+{
+ DAY,
+ WEEK,
+ MONTH,
+ WEEKEND
+}
diff --git a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
index 6c55c9d65a..892f3b75df 100644
--- a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
+++ b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
@@ -16,11 +16,13 @@
*/
package org.l2jmobius.gameserver.model;
+import java.util.Calendar;
import java.util.List;
import java.util.function.Function;
import org.l2jmobius.gameserver.enums.ClassId;
import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.enums.MissionResetType;
import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
import org.l2jmobius.gameserver.handler.DailyMissionHandler;
import org.l2jmobius.gameserver.model.actor.Player;
@@ -42,6 +44,7 @@ public class DailyMissionDataHolder
private final boolean _isDualClassOnly;
private final boolean _isDisplayedWhenNotAvailable;
private final AbstractDailyMissionHandler _handler;
+ private final MissionResetType _missionResetSlot;
public DailyMissionDataHolder(StatSet set)
{
@@ -57,6 +60,7 @@ public class DailyMissionDataHolder
_isDualClassOnly = set.getBoolean("isDualClassOnly", false);
_isDisplayedWhenNotAvailable = set.getBoolean("isDisplayedWhenNotAvailable", true);
_handler = handler != null ? handler.apply(this) : null;
+ _missionResetSlot = set.getObject("duration", MissionResetType.class, MissionResetType.DAY);
}
public int getId()
@@ -171,7 +175,22 @@ public class DailyMissionDataHolder
{
if (_handler != null)
{
- _handler.reset();
+ if ((_missionResetSlot == MissionResetType.WEEK) && (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY))
+ {
+ _handler.reset();
+ }
+ else if ((_missionResetSlot == MissionResetType.MONTH) && (Calendar.getInstance().get(Calendar.DAY_OF_MONTH) == 1))
+ {
+ _handler.reset();
+ }
+ else if ((_missionResetSlot == MissionResetType.WEEKEND) && (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY))
+ {
+ _handler.reset();
+ }
+ else if (_dailyReset)
+ {
+ _handler.reset();
+ }
}
}
}
diff --git a/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java b/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
index 42f60f8499..b846e23668 100644
--- a/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
+++ b/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
@@ -23,6 +23,7 @@ import org.l2jmobius.gameserver.handler.DailyMissionHandler;
import handlers.dailymissionhandlers.BossDailyMissionHandler;
import handlers.dailymissionhandlers.CeremonyOfChaosDailyMissionHandler;
import handlers.dailymissionhandlers.FishingDailyMissionHandler;
+import handlers.dailymissionhandlers.JoinClanDailyMissionHandler;
import handlers.dailymissionhandlers.LevelDailyMissionHandler;
import handlers.dailymissionhandlers.LoginMonthDailyMissionHandler;
import handlers.dailymissionhandlers.LoginWeekendDailyMissionHandler;
@@ -50,6 +51,7 @@ public class DailyMissionMasterHandler
DailyMissionHandler.getInstance().registerHandler("boss", BossDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("monster", MonsterDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("fishing", FishingDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("joinclan", JoinClanDailyMissionHandler::new);
LOGGER.info(DailyMissionMasterHandler.class.getSimpleName() + ": Loaded " + DailyMissionHandler.getInstance().size() + " handlers.");
}
}
diff --git a/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java b/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
new file mode 100644
index 0000000000..7af0642f51
--- /dev/null
+++ b/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
@@ -0,0 +1,81 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package handlers.dailymissionhandlers;
+
+import java.util.function.Consumer;
+
+import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
+import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
+import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.Containers;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanCreate;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanJoin;
+import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
+
+/**
+ * @author kamikadzz
+ */
+public class JoinClanDailyMissionHandler extends AbstractDailyMissionHandler
+{
+ public JoinClanDailyMissionHandler(DailyMissionDataHolder holder)
+ {
+ super(holder);
+ }
+
+ @Override
+ public boolean isAvailable(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
+ return (entry != null) && (entry.getStatus() == DailyMissionStatus.AVAILABLE);
+ }
+
+ @Override
+ public void init()
+ {
+ Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_CLAN_JOIN, (Consumer) this::onPlayerClanJoin, this));
+ Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_CLAN_CREATE, (Consumer) this::onPlayerClanCreate, this));
+ }
+
+ private void onPlayerClanJoin(OnPlayerClanJoin event)
+ {
+ final DailyMissionPlayerEntry missionData = getPlayerEntry(event.getClanMember().getPlayer().getObjectId(), true);
+ processMission(missionData);
+ }
+
+ private void onPlayerClanCreate(OnPlayerClanCreate event)
+ {
+ final DailyMissionPlayerEntry missionData = getPlayerEntry(event.getPlayer().getObjectId(), true);
+ processMission(missionData);
+ }
+
+ private void processMission(DailyMissionPlayerEntry missionData)
+ {
+ if (missionData.getProgress() == 1)
+ {
+ missionData.setStatus(DailyMissionStatus.COMPLETED);
+ }
+ else
+ {
+ missionData.setProgress(1);
+ missionData.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(missionData);
+ }
+}
diff --git a/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java b/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
index 84462adcb8..0da9875cd5 100644
--- a/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
+++ b/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
@@ -49,30 +49,14 @@ public class LoginMonthDailyMissionHandler extends AbstractDailyMissionHandler
Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_LOGIN, (OnPlayerLogin event) -> onPlayerLogin(event), this));
}
- @Override
- public void reset()
- {
- // Monthly rewards do not reset daily.
- }
-
private void onPlayerLogin(OnPlayerLogin event)
{
final DailyMissionPlayerEntry entry = getPlayerEntry(event.getPlayer().getObjectId(), true);
- final long lastCompleted = entry.getLastCompleted();
- if (lastCompleted == 0) // Initial entry.
- {
- entry.setLastCompleted(System.currentTimeMillis());
- }
- else if ((System.currentTimeMillis() - lastCompleted) > 2506000000L) // 2506000000L (29 day) delay.
+ if (entry.getStatus() != DailyMissionStatus.COMPLETED)
{
entry.setProgress(1);
entry.setStatus(DailyMissionStatus.AVAILABLE);
}
- else
- {
- entry.setProgress(0);
- entry.setStatus(DailyMissionStatus.NOT_AVAILABLE);
- }
storePlayerEntry(entry);
}
}
diff --git a/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java b/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
index f7e5360c4e..18eaca0a48 100644
--- a/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
+++ b/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
@@ -51,27 +51,18 @@ public class LoginWeekendDailyMissionHandler extends AbstractDailyMissionHandler
Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_LOGIN, (OnPlayerLogin event) -> onPlayerLogin(event), this));
}
- @Override
- public void reset()
- {
- // Weekend rewards do not reset daily.
- }
-
private void onPlayerLogin(OnPlayerLogin event)
{
final DailyMissionPlayerEntry entry = getPlayerEntry(event.getPlayer().getObjectId(), true);
- final int currentDay = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
- final long lastCompleted = entry.getLastCompleted();
- if (((currentDay == Calendar.SATURDAY) || (currentDay == Calendar.SUNDAY)) // Reward only on weekend.
- && ((lastCompleted == 0) || ((System.currentTimeMillis() - lastCompleted) > 172800000))) // Initial entry or 172800000 (2 day) delay.
+ if (entry.getStatus() != DailyMissionStatus.COMPLETED)
{
- entry.setProgress(1);
- entry.setStatus(DailyMissionStatus.AVAILABLE);
- }
- else if (entry.getStatus() != DailyMissionStatus.AVAILABLE) // Not waiting to be rewarded.
- {
- entry.setProgress(0);
- entry.setStatus(DailyMissionStatus.NOT_AVAILABLE);
+ final int currentDay = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
+ if (((currentDay == Calendar.SATURDAY) || (currentDay == Calendar.SUNDAY) || (currentDay == Calendar.MONDAY)) //
+ && (Calendar.getInstance().get(Calendar.HOUR_OF_DAY) < 6) && (Calendar.getInstance().get(Calendar.MINUTE) < 30))
+ {
+ entry.setProgress(1);
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
}
storePlayerEntry(entry);
}
diff --git a/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java b/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java
index 6a96a47163..c1a738fe3c 100644
--- a/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java
+++ b/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java
@@ -105,13 +105,10 @@ public class MonsterDailyMissionHandler extends AbstractDailyMissionHandler
}
final Player player = event.getAttacker();
- if (_minLevel > 0)
+ final int monsterLevel = monster.getLevel();
+ if ((_minLevel > 0) && ((monsterLevel < _minLevel) || (monsterLevel > _maxLevel) || ((player.getLevel() - monsterLevel) > 5)))
{
- final int monsterLevel = monster.getLevel();
- if ((monsterLevel < _minLevel) || (monsterLevel > _maxLevel) || ((player.getLevel() - monsterLevel) > 5))
- {
- return;
- }
+ return;
}
final Party party = player.getParty();
@@ -119,7 +116,13 @@ public class MonsterDailyMissionHandler extends AbstractDailyMissionHandler
{
final CommandChannel channel = party.getCommandChannel();
final List members = channel != null ? channel.getMembers() : party.getMembers();
- members.stream().filter(member -> member.calculateDistance3D(monster) <= Config.ALT_PARTY_RANGE).forEach(this::processPlayerProgress);
+ for (Player member : members)
+ {
+ if ((member.getLevel() >= (monsterLevel - 5)) && (member.calculateDistance3D(monster) <= Config.ALT_PARTY_RANGE))
+ {
+ processPlayerProgress(member);
+ }
+ }
}
else
{
diff --git a/L2J_Mobius_08.2_Homunculus/dist/game/data/xsd/DailyMission.xsd b/L2J_Mobius_08.2_Homunculus/dist/game/data/xsd/DailyMission.xsd
index 9da08900d0..35f2f6dc35 100644
--- a/L2J_Mobius_08.2_Homunculus/dist/game/data/xsd/DailyMission.xsd
+++ b/L2J_Mobius_08.2_Homunculus/dist/game/data/xsd/DailyMission.xsd
@@ -42,6 +42,7 @@
+
diff --git a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/enums/MissionResetType.java b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/enums/MissionResetType.java
new file mode 100644
index 0000000000..cb74a12d14
--- /dev/null
+++ b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/enums/MissionResetType.java
@@ -0,0 +1,28 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.l2jmobius.gameserver.enums;
+
+/**
+ * @author kamikadzz
+ */
+public enum MissionResetType
+{
+ DAY,
+ WEEK,
+ MONTH,
+ WEEKEND
+}
diff --git a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
index 6c55c9d65a..892f3b75df 100644
--- a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
+++ b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
@@ -16,11 +16,13 @@
*/
package org.l2jmobius.gameserver.model;
+import java.util.Calendar;
import java.util.List;
import java.util.function.Function;
import org.l2jmobius.gameserver.enums.ClassId;
import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.enums.MissionResetType;
import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
import org.l2jmobius.gameserver.handler.DailyMissionHandler;
import org.l2jmobius.gameserver.model.actor.Player;
@@ -42,6 +44,7 @@ public class DailyMissionDataHolder
private final boolean _isDualClassOnly;
private final boolean _isDisplayedWhenNotAvailable;
private final AbstractDailyMissionHandler _handler;
+ private final MissionResetType _missionResetSlot;
public DailyMissionDataHolder(StatSet set)
{
@@ -57,6 +60,7 @@ public class DailyMissionDataHolder
_isDualClassOnly = set.getBoolean("isDualClassOnly", false);
_isDisplayedWhenNotAvailable = set.getBoolean("isDisplayedWhenNotAvailable", true);
_handler = handler != null ? handler.apply(this) : null;
+ _missionResetSlot = set.getObject("duration", MissionResetType.class, MissionResetType.DAY);
}
public int getId()
@@ -171,7 +175,22 @@ public class DailyMissionDataHolder
{
if (_handler != null)
{
- _handler.reset();
+ if ((_missionResetSlot == MissionResetType.WEEK) && (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY))
+ {
+ _handler.reset();
+ }
+ else if ((_missionResetSlot == MissionResetType.MONTH) && (Calendar.getInstance().get(Calendar.DAY_OF_MONTH) == 1))
+ {
+ _handler.reset();
+ }
+ else if ((_missionResetSlot == MissionResetType.WEEKEND) && (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY))
+ {
+ _handler.reset();
+ }
+ else if (_dailyReset)
+ {
+ _handler.reset();
+ }
}
}
}
diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
index 42f60f8499..b846e23668 100644
--- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
+++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
@@ -23,6 +23,7 @@ import org.l2jmobius.gameserver.handler.DailyMissionHandler;
import handlers.dailymissionhandlers.BossDailyMissionHandler;
import handlers.dailymissionhandlers.CeremonyOfChaosDailyMissionHandler;
import handlers.dailymissionhandlers.FishingDailyMissionHandler;
+import handlers.dailymissionhandlers.JoinClanDailyMissionHandler;
import handlers.dailymissionhandlers.LevelDailyMissionHandler;
import handlers.dailymissionhandlers.LoginMonthDailyMissionHandler;
import handlers.dailymissionhandlers.LoginWeekendDailyMissionHandler;
@@ -50,6 +51,7 @@ public class DailyMissionMasterHandler
DailyMissionHandler.getInstance().registerHandler("boss", BossDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("monster", MonsterDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("fishing", FishingDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("joinclan", JoinClanDailyMissionHandler::new);
LOGGER.info(DailyMissionMasterHandler.class.getSimpleName() + ": Loaded " + DailyMissionHandler.getInstance().size() + " handlers.");
}
}
diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
new file mode 100644
index 0000000000..7af0642f51
--- /dev/null
+++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
@@ -0,0 +1,81 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package handlers.dailymissionhandlers;
+
+import java.util.function.Consumer;
+
+import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
+import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
+import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.Containers;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanCreate;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanJoin;
+import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
+
+/**
+ * @author kamikadzz
+ */
+public class JoinClanDailyMissionHandler extends AbstractDailyMissionHandler
+{
+ public JoinClanDailyMissionHandler(DailyMissionDataHolder holder)
+ {
+ super(holder);
+ }
+
+ @Override
+ public boolean isAvailable(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
+ return (entry != null) && (entry.getStatus() == DailyMissionStatus.AVAILABLE);
+ }
+
+ @Override
+ public void init()
+ {
+ Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_CLAN_JOIN, (Consumer) this::onPlayerClanJoin, this));
+ Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_CLAN_CREATE, (Consumer) this::onPlayerClanCreate, this));
+ }
+
+ private void onPlayerClanJoin(OnPlayerClanJoin event)
+ {
+ final DailyMissionPlayerEntry missionData = getPlayerEntry(event.getClanMember().getPlayer().getObjectId(), true);
+ processMission(missionData);
+ }
+
+ private void onPlayerClanCreate(OnPlayerClanCreate event)
+ {
+ final DailyMissionPlayerEntry missionData = getPlayerEntry(event.getPlayer().getObjectId(), true);
+ processMission(missionData);
+ }
+
+ private void processMission(DailyMissionPlayerEntry missionData)
+ {
+ if (missionData.getProgress() == 1)
+ {
+ missionData.setStatus(DailyMissionStatus.COMPLETED);
+ }
+ else
+ {
+ missionData.setProgress(1);
+ missionData.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(missionData);
+ }
+}
diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
index 84462adcb8..0da9875cd5 100644
--- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
+++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
@@ -49,30 +49,14 @@ public class LoginMonthDailyMissionHandler extends AbstractDailyMissionHandler
Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_LOGIN, (OnPlayerLogin event) -> onPlayerLogin(event), this));
}
- @Override
- public void reset()
- {
- // Monthly rewards do not reset daily.
- }
-
private void onPlayerLogin(OnPlayerLogin event)
{
final DailyMissionPlayerEntry entry = getPlayerEntry(event.getPlayer().getObjectId(), true);
- final long lastCompleted = entry.getLastCompleted();
- if (lastCompleted == 0) // Initial entry.
- {
- entry.setLastCompleted(System.currentTimeMillis());
- }
- else if ((System.currentTimeMillis() - lastCompleted) > 2506000000L) // 2506000000L (29 day) delay.
+ if (entry.getStatus() != DailyMissionStatus.COMPLETED)
{
entry.setProgress(1);
entry.setStatus(DailyMissionStatus.AVAILABLE);
}
- else
- {
- entry.setProgress(0);
- entry.setStatus(DailyMissionStatus.NOT_AVAILABLE);
- }
storePlayerEntry(entry);
}
}
diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
index f7e5360c4e..18eaca0a48 100644
--- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
+++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
@@ -51,27 +51,18 @@ public class LoginWeekendDailyMissionHandler extends AbstractDailyMissionHandler
Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_LOGIN, (OnPlayerLogin event) -> onPlayerLogin(event), this));
}
- @Override
- public void reset()
- {
- // Weekend rewards do not reset daily.
- }
-
private void onPlayerLogin(OnPlayerLogin event)
{
final DailyMissionPlayerEntry entry = getPlayerEntry(event.getPlayer().getObjectId(), true);
- final int currentDay = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
- final long lastCompleted = entry.getLastCompleted();
- if (((currentDay == Calendar.SATURDAY) || (currentDay == Calendar.SUNDAY)) // Reward only on weekend.
- && ((lastCompleted == 0) || ((System.currentTimeMillis() - lastCompleted) > 172800000))) // Initial entry or 172800000 (2 day) delay.
+ if (entry.getStatus() != DailyMissionStatus.COMPLETED)
{
- entry.setProgress(1);
- entry.setStatus(DailyMissionStatus.AVAILABLE);
- }
- else if (entry.getStatus() != DailyMissionStatus.AVAILABLE) // Not waiting to be rewarded.
- {
- entry.setProgress(0);
- entry.setStatus(DailyMissionStatus.NOT_AVAILABLE);
+ final int currentDay = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
+ if (((currentDay == Calendar.SATURDAY) || (currentDay == Calendar.SUNDAY) || (currentDay == Calendar.MONDAY)) //
+ && (Calendar.getInstance().get(Calendar.HOUR_OF_DAY) < 6) && (Calendar.getInstance().get(Calendar.MINUTE) < 30))
+ {
+ entry.setProgress(1);
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
}
storePlayerEntry(entry);
}
diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java
index 6a96a47163..c1a738fe3c 100644
--- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java
+++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java
@@ -105,13 +105,10 @@ public class MonsterDailyMissionHandler extends AbstractDailyMissionHandler
}
final Player player = event.getAttacker();
- if (_minLevel > 0)
+ final int monsterLevel = monster.getLevel();
+ if ((_minLevel > 0) && ((monsterLevel < _minLevel) || (monsterLevel > _maxLevel) || ((player.getLevel() - monsterLevel) > 5)))
{
- final int monsterLevel = monster.getLevel();
- if ((monsterLevel < _minLevel) || (monsterLevel > _maxLevel) || ((player.getLevel() - monsterLevel) > 5))
- {
- return;
- }
+ return;
}
final Party party = player.getParty();
@@ -119,7 +116,13 @@ public class MonsterDailyMissionHandler extends AbstractDailyMissionHandler
{
final CommandChannel channel = party.getCommandChannel();
final List members = channel != null ? channel.getMembers() : party.getMembers();
- members.stream().filter(member -> member.calculateDistance3D(monster) <= Config.ALT_PARTY_RANGE).forEach(this::processPlayerProgress);
+ for (Player member : members)
+ {
+ if ((member.getLevel() >= (monsterLevel - 5)) && (member.calculateDistance3D(monster) <= Config.ALT_PARTY_RANGE))
+ {
+ processPlayerProgress(member);
+ }
+ }
}
else
{
diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/xsd/DailyMission.xsd b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/xsd/DailyMission.xsd
index 9da08900d0..35f2f6dc35 100644
--- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/xsd/DailyMission.xsd
+++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/xsd/DailyMission.xsd
@@ -42,6 +42,7 @@
+
diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/enums/MissionResetType.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/enums/MissionResetType.java
new file mode 100644
index 0000000000..cb74a12d14
--- /dev/null
+++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/enums/MissionResetType.java
@@ -0,0 +1,28 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.l2jmobius.gameserver.enums;
+
+/**
+ * @author kamikadzz
+ */
+public enum MissionResetType
+{
+ DAY,
+ WEEK,
+ MONTH,
+ WEEKEND
+}
diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
index 6c55c9d65a..892f3b75df 100644
--- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
+++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
@@ -16,11 +16,13 @@
*/
package org.l2jmobius.gameserver.model;
+import java.util.Calendar;
import java.util.List;
import java.util.function.Function;
import org.l2jmobius.gameserver.enums.ClassId;
import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.enums.MissionResetType;
import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
import org.l2jmobius.gameserver.handler.DailyMissionHandler;
import org.l2jmobius.gameserver.model.actor.Player;
@@ -42,6 +44,7 @@ public class DailyMissionDataHolder
private final boolean _isDualClassOnly;
private final boolean _isDisplayedWhenNotAvailable;
private final AbstractDailyMissionHandler _handler;
+ private final MissionResetType _missionResetSlot;
public DailyMissionDataHolder(StatSet set)
{
@@ -57,6 +60,7 @@ public class DailyMissionDataHolder
_isDualClassOnly = set.getBoolean("isDualClassOnly", false);
_isDisplayedWhenNotAvailable = set.getBoolean("isDisplayedWhenNotAvailable", true);
_handler = handler != null ? handler.apply(this) : null;
+ _missionResetSlot = set.getObject("duration", MissionResetType.class, MissionResetType.DAY);
}
public int getId()
@@ -171,7 +175,22 @@ public class DailyMissionDataHolder
{
if (_handler != null)
{
- _handler.reset();
+ if ((_missionResetSlot == MissionResetType.WEEK) && (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY))
+ {
+ _handler.reset();
+ }
+ else if ((_missionResetSlot == MissionResetType.MONTH) && (Calendar.getInstance().get(Calendar.DAY_OF_MONTH) == 1))
+ {
+ _handler.reset();
+ }
+ else if ((_missionResetSlot == MissionResetType.WEEKEND) && (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY))
+ {
+ _handler.reset();
+ }
+ else if (_dailyReset)
+ {
+ _handler.reset();
+ }
}
}
}
diff --git a/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
index 42f60f8499..b846e23668 100644
--- a/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
+++ b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
@@ -23,6 +23,7 @@ import org.l2jmobius.gameserver.handler.DailyMissionHandler;
import handlers.dailymissionhandlers.BossDailyMissionHandler;
import handlers.dailymissionhandlers.CeremonyOfChaosDailyMissionHandler;
import handlers.dailymissionhandlers.FishingDailyMissionHandler;
+import handlers.dailymissionhandlers.JoinClanDailyMissionHandler;
import handlers.dailymissionhandlers.LevelDailyMissionHandler;
import handlers.dailymissionhandlers.LoginMonthDailyMissionHandler;
import handlers.dailymissionhandlers.LoginWeekendDailyMissionHandler;
@@ -50,6 +51,7 @@ public class DailyMissionMasterHandler
DailyMissionHandler.getInstance().registerHandler("boss", BossDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("monster", MonsterDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("fishing", FishingDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("joinclan", JoinClanDailyMissionHandler::new);
LOGGER.info(DailyMissionMasterHandler.class.getSimpleName() + ": Loaded " + DailyMissionHandler.getInstance().size() + " handlers.");
}
}
diff --git a/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
new file mode 100644
index 0000000000..7af0642f51
--- /dev/null
+++ b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
@@ -0,0 +1,81 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package handlers.dailymissionhandlers;
+
+import java.util.function.Consumer;
+
+import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
+import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
+import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.Containers;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanCreate;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanJoin;
+import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
+
+/**
+ * @author kamikadzz
+ */
+public class JoinClanDailyMissionHandler extends AbstractDailyMissionHandler
+{
+ public JoinClanDailyMissionHandler(DailyMissionDataHolder holder)
+ {
+ super(holder);
+ }
+
+ @Override
+ public boolean isAvailable(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
+ return (entry != null) && (entry.getStatus() == DailyMissionStatus.AVAILABLE);
+ }
+
+ @Override
+ public void init()
+ {
+ Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_CLAN_JOIN, (Consumer) this::onPlayerClanJoin, this));
+ Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_CLAN_CREATE, (Consumer) this::onPlayerClanCreate, this));
+ }
+
+ private void onPlayerClanJoin(OnPlayerClanJoin event)
+ {
+ final DailyMissionPlayerEntry missionData = getPlayerEntry(event.getClanMember().getPlayer().getObjectId(), true);
+ processMission(missionData);
+ }
+
+ private void onPlayerClanCreate(OnPlayerClanCreate event)
+ {
+ final DailyMissionPlayerEntry missionData = getPlayerEntry(event.getPlayer().getObjectId(), true);
+ processMission(missionData);
+ }
+
+ private void processMission(DailyMissionPlayerEntry missionData)
+ {
+ if (missionData.getProgress() == 1)
+ {
+ missionData.setStatus(DailyMissionStatus.COMPLETED);
+ }
+ else
+ {
+ missionData.setProgress(1);
+ missionData.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(missionData);
+ }
+}
diff --git a/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
index 84462adcb8..0da9875cd5 100644
--- a/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
+++ b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
@@ -49,30 +49,14 @@ public class LoginMonthDailyMissionHandler extends AbstractDailyMissionHandler
Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_LOGIN, (OnPlayerLogin event) -> onPlayerLogin(event), this));
}
- @Override
- public void reset()
- {
- // Monthly rewards do not reset daily.
- }
-
private void onPlayerLogin(OnPlayerLogin event)
{
final DailyMissionPlayerEntry entry = getPlayerEntry(event.getPlayer().getObjectId(), true);
- final long lastCompleted = entry.getLastCompleted();
- if (lastCompleted == 0) // Initial entry.
- {
- entry.setLastCompleted(System.currentTimeMillis());
- }
- else if ((System.currentTimeMillis() - lastCompleted) > 2506000000L) // 2506000000L (29 day) delay.
+ if (entry.getStatus() != DailyMissionStatus.COMPLETED)
{
entry.setProgress(1);
entry.setStatus(DailyMissionStatus.AVAILABLE);
}
- else
- {
- entry.setProgress(0);
- entry.setStatus(DailyMissionStatus.NOT_AVAILABLE);
- }
storePlayerEntry(entry);
}
}
diff --git a/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
index f7e5360c4e..18eaca0a48 100644
--- a/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
+++ b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
@@ -51,27 +51,18 @@ public class LoginWeekendDailyMissionHandler extends AbstractDailyMissionHandler
Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_LOGIN, (OnPlayerLogin event) -> onPlayerLogin(event), this));
}
- @Override
- public void reset()
- {
- // Weekend rewards do not reset daily.
- }
-
private void onPlayerLogin(OnPlayerLogin event)
{
final DailyMissionPlayerEntry entry = getPlayerEntry(event.getPlayer().getObjectId(), true);
- final int currentDay = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
- final long lastCompleted = entry.getLastCompleted();
- if (((currentDay == Calendar.SATURDAY) || (currentDay == Calendar.SUNDAY)) // Reward only on weekend.
- && ((lastCompleted == 0) || ((System.currentTimeMillis() - lastCompleted) > 172800000))) // Initial entry or 172800000 (2 day) delay.
+ if (entry.getStatus() != DailyMissionStatus.COMPLETED)
{
- entry.setProgress(1);
- entry.setStatus(DailyMissionStatus.AVAILABLE);
- }
- else if (entry.getStatus() != DailyMissionStatus.AVAILABLE) // Not waiting to be rewarded.
- {
- entry.setProgress(0);
- entry.setStatus(DailyMissionStatus.NOT_AVAILABLE);
+ final int currentDay = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
+ if (((currentDay == Calendar.SATURDAY) || (currentDay == Calendar.SUNDAY) || (currentDay == Calendar.MONDAY)) //
+ && (Calendar.getInstance().get(Calendar.HOUR_OF_DAY) < 6) && (Calendar.getInstance().get(Calendar.MINUTE) < 30))
+ {
+ entry.setProgress(1);
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
}
storePlayerEntry(entry);
}
diff --git a/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java
index 6a96a47163..c1a738fe3c 100644
--- a/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java
+++ b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java
@@ -105,13 +105,10 @@ public class MonsterDailyMissionHandler extends AbstractDailyMissionHandler
}
final Player player = event.getAttacker();
- if (_minLevel > 0)
+ final int monsterLevel = monster.getLevel();
+ if ((_minLevel > 0) && ((monsterLevel < _minLevel) || (monsterLevel > _maxLevel) || ((player.getLevel() - monsterLevel) > 5)))
{
- final int monsterLevel = monster.getLevel();
- if ((monsterLevel < _minLevel) || (monsterLevel > _maxLevel) || ((player.getLevel() - monsterLevel) > 5))
- {
- return;
- }
+ return;
}
final Party party = player.getParty();
@@ -119,7 +116,13 @@ public class MonsterDailyMissionHandler extends AbstractDailyMissionHandler
{
final CommandChannel channel = party.getCommandChannel();
final List members = channel != null ? channel.getMembers() : party.getMembers();
- members.stream().filter(member -> member.calculateDistance3D(monster) <= Config.ALT_PARTY_RANGE).forEach(this::processPlayerProgress);
+ for (Player member : members)
+ {
+ if ((member.getLevel() >= (monsterLevel - 5)) && (member.calculateDistance3D(monster) <= Config.ALT_PARTY_RANGE))
+ {
+ processPlayerProgress(member);
+ }
+ }
}
else
{
diff --git a/L2J_Mobius_10.2_MasterClass/dist/game/data/xsd/DailyMission.xsd b/L2J_Mobius_10.2_MasterClass/dist/game/data/xsd/DailyMission.xsd
index 9da08900d0..35f2f6dc35 100644
--- a/L2J_Mobius_10.2_MasterClass/dist/game/data/xsd/DailyMission.xsd
+++ b/L2J_Mobius_10.2_MasterClass/dist/game/data/xsd/DailyMission.xsd
@@ -42,6 +42,7 @@
+
diff --git a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/enums/MissionResetType.java b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/enums/MissionResetType.java
new file mode 100644
index 0000000000..cb74a12d14
--- /dev/null
+++ b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/enums/MissionResetType.java
@@ -0,0 +1,28 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.l2jmobius.gameserver.enums;
+
+/**
+ * @author kamikadzz
+ */
+public enum MissionResetType
+{
+ DAY,
+ WEEK,
+ MONTH,
+ WEEKEND
+}
diff --git a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
index 6c55c9d65a..892f3b75df 100644
--- a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
+++ b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
@@ -16,11 +16,13 @@
*/
package org.l2jmobius.gameserver.model;
+import java.util.Calendar;
import java.util.List;
import java.util.function.Function;
import org.l2jmobius.gameserver.enums.ClassId;
import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.enums.MissionResetType;
import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
import org.l2jmobius.gameserver.handler.DailyMissionHandler;
import org.l2jmobius.gameserver.model.actor.Player;
@@ -42,6 +44,7 @@ public class DailyMissionDataHolder
private final boolean _isDualClassOnly;
private final boolean _isDisplayedWhenNotAvailable;
private final AbstractDailyMissionHandler _handler;
+ private final MissionResetType _missionResetSlot;
public DailyMissionDataHolder(StatSet set)
{
@@ -57,6 +60,7 @@ public class DailyMissionDataHolder
_isDualClassOnly = set.getBoolean("isDualClassOnly", false);
_isDisplayedWhenNotAvailable = set.getBoolean("isDisplayedWhenNotAvailable", true);
_handler = handler != null ? handler.apply(this) : null;
+ _missionResetSlot = set.getObject("duration", MissionResetType.class, MissionResetType.DAY);
}
public int getId()
@@ -171,7 +175,22 @@ public class DailyMissionDataHolder
{
if (_handler != null)
{
- _handler.reset();
+ if ((_missionResetSlot == MissionResetType.WEEK) && (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY))
+ {
+ _handler.reset();
+ }
+ else if ((_missionResetSlot == MissionResetType.MONTH) && (Calendar.getInstance().get(Calendar.DAY_OF_MONTH) == 1))
+ {
+ _handler.reset();
+ }
+ else if ((_missionResetSlot == MissionResetType.WEEKEND) && (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY))
+ {
+ _handler.reset();
+ }
+ else if (_dailyReset)
+ {
+ _handler.reset();
+ }
}
}
}
diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/DailyMission.xml b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/DailyMission.xml
index a9f6e051a2..0521495d4b 100644
--- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/DailyMission.xml
+++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/DailyMission.xml
@@ -1174,13 +1174,13 @@
-
+
-
+
@@ -1198,14 +1198,12 @@
-
diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
index 70bd0e70c2..2568d12ae3 100644
--- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
+++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
@@ -22,6 +22,7 @@ import org.l2jmobius.gameserver.handler.DailyMissionHandler;
import handlers.dailymissionhandlers.BossDailyMissionHandler;
import handlers.dailymissionhandlers.FishingDailyMissionHandler;
+import handlers.dailymissionhandlers.JoinClanDailyMissionHandler;
import handlers.dailymissionhandlers.LevelDailyMissionHandler;
import handlers.dailymissionhandlers.LoginMonthDailyMissionHandler;
import handlers.dailymissionhandlers.LoginWeekendDailyMissionHandler;
@@ -46,6 +47,7 @@ public class DailyMissionMasterHandler
DailyMissionHandler.getInstance().registerHandler("siege", SiegeDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("boss", BossDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("fishing", FishingDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("joinclan", JoinClanDailyMissionHandler::new);
LOGGER.info(DailyMissionMasterHandler.class.getSimpleName() + ": Loaded " + DailyMissionHandler.getInstance().size() + " handlers.");
}
}
diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
new file mode 100644
index 0000000000..7af0642f51
--- /dev/null
+++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
@@ -0,0 +1,81 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package handlers.dailymissionhandlers;
+
+import java.util.function.Consumer;
+
+import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
+import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
+import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.Containers;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanCreate;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanJoin;
+import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
+
+/**
+ * @author kamikadzz
+ */
+public class JoinClanDailyMissionHandler extends AbstractDailyMissionHandler
+{
+ public JoinClanDailyMissionHandler(DailyMissionDataHolder holder)
+ {
+ super(holder);
+ }
+
+ @Override
+ public boolean isAvailable(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
+ return (entry != null) && (entry.getStatus() == DailyMissionStatus.AVAILABLE);
+ }
+
+ @Override
+ public void init()
+ {
+ Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_CLAN_JOIN, (Consumer) this::onPlayerClanJoin, this));
+ Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_CLAN_CREATE, (Consumer) this::onPlayerClanCreate, this));
+ }
+
+ private void onPlayerClanJoin(OnPlayerClanJoin event)
+ {
+ final DailyMissionPlayerEntry missionData = getPlayerEntry(event.getClanMember().getPlayer().getObjectId(), true);
+ processMission(missionData);
+ }
+
+ private void onPlayerClanCreate(OnPlayerClanCreate event)
+ {
+ final DailyMissionPlayerEntry missionData = getPlayerEntry(event.getPlayer().getObjectId(), true);
+ processMission(missionData);
+ }
+
+ private void processMission(DailyMissionPlayerEntry missionData)
+ {
+ if (missionData.getProgress() == 1)
+ {
+ missionData.setStatus(DailyMissionStatus.COMPLETED);
+ }
+ else
+ {
+ missionData.setProgress(1);
+ missionData.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(missionData);
+ }
+}
diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
index 84462adcb8..0da9875cd5 100644
--- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
+++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
@@ -49,30 +49,14 @@ public class LoginMonthDailyMissionHandler extends AbstractDailyMissionHandler
Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_LOGIN, (OnPlayerLogin event) -> onPlayerLogin(event), this));
}
- @Override
- public void reset()
- {
- // Monthly rewards do not reset daily.
- }
-
private void onPlayerLogin(OnPlayerLogin event)
{
final DailyMissionPlayerEntry entry = getPlayerEntry(event.getPlayer().getObjectId(), true);
- final long lastCompleted = entry.getLastCompleted();
- if (lastCompleted == 0) // Initial entry.
- {
- entry.setLastCompleted(System.currentTimeMillis());
- }
- else if ((System.currentTimeMillis() - lastCompleted) > 2506000000L) // 2506000000L (29 day) delay.
+ if (entry.getStatus() != DailyMissionStatus.COMPLETED)
{
entry.setProgress(1);
entry.setStatus(DailyMissionStatus.AVAILABLE);
}
- else
- {
- entry.setProgress(0);
- entry.setStatus(DailyMissionStatus.NOT_AVAILABLE);
- }
storePlayerEntry(entry);
}
}
diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
index f7e5360c4e..18eaca0a48 100644
--- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
+++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
@@ -51,27 +51,18 @@ public class LoginWeekendDailyMissionHandler extends AbstractDailyMissionHandler
Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_LOGIN, (OnPlayerLogin event) -> onPlayerLogin(event), this));
}
- @Override
- public void reset()
- {
- // Weekend rewards do not reset daily.
- }
-
private void onPlayerLogin(OnPlayerLogin event)
{
final DailyMissionPlayerEntry entry = getPlayerEntry(event.getPlayer().getObjectId(), true);
- final int currentDay = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
- final long lastCompleted = entry.getLastCompleted();
- if (((currentDay == Calendar.SATURDAY) || (currentDay == Calendar.SUNDAY)) // Reward only on weekend.
- && ((lastCompleted == 0) || ((System.currentTimeMillis() - lastCompleted) > 172800000))) // Initial entry or 172800000 (2 day) delay.
+ if (entry.getStatus() != DailyMissionStatus.COMPLETED)
{
- entry.setProgress(1);
- entry.setStatus(DailyMissionStatus.AVAILABLE);
- }
- else if (entry.getStatus() != DailyMissionStatus.AVAILABLE) // Not waiting to be rewarded.
- {
- entry.setProgress(0);
- entry.setStatus(DailyMissionStatus.NOT_AVAILABLE);
+ final int currentDay = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
+ if (((currentDay == Calendar.SATURDAY) || (currentDay == Calendar.SUNDAY) || (currentDay == Calendar.MONDAY)) //
+ && (Calendar.getInstance().get(Calendar.HOUR_OF_DAY) < 6) && (Calendar.getInstance().get(Calendar.MINUTE) < 30))
+ {
+ entry.setProgress(1);
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
}
storePlayerEntry(entry);
}
diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/xsd/DailyMission.xsd b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/xsd/DailyMission.xsd
index d8e4390d3c..6411a3a90d 100644
--- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/xsd/DailyMission.xsd
+++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/xsd/DailyMission.xsd
@@ -39,6 +39,7 @@
+
diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/enums/MissionResetType.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/enums/MissionResetType.java
new file mode 100644
index 0000000000..cb74a12d14
--- /dev/null
+++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/enums/MissionResetType.java
@@ -0,0 +1,28 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.l2jmobius.gameserver.enums;
+
+/**
+ * @author kamikadzz
+ */
+public enum MissionResetType
+{
+ DAY,
+ WEEK,
+ MONTH,
+ WEEKEND
+}
diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
index 5582fdde0b..2b7d43f215 100644
--- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
+++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
@@ -16,11 +16,13 @@
*/
package org.l2jmobius.gameserver.model;
+import java.util.Calendar;
import java.util.List;
import java.util.function.Function;
import org.l2jmobius.gameserver.enums.ClassId;
import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.enums.MissionResetType;
import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
import org.l2jmobius.gameserver.handler.DailyMissionHandler;
import org.l2jmobius.gameserver.model.actor.Player;
@@ -39,6 +41,7 @@ public class DailyMissionDataHolder
private final boolean _dailyReset;
private final boolean _isOneTime;
private final AbstractDailyMissionHandler _handler;
+ private final MissionResetType _missionResetSlot;
public DailyMissionDataHolder(StatSet set)
{
@@ -51,6 +54,7 @@ public class DailyMissionDataHolder
_dailyReset = set.getBoolean("dailyReset", true);
_isOneTime = set.getBoolean("isOneTime", true);
_handler = handler != null ? handler.apply(this) : null;
+ _missionResetSlot = set.getObject("duration", MissionResetType.class, MissionResetType.DAY);
}
public int getId()
@@ -115,7 +119,22 @@ public class DailyMissionDataHolder
{
if (_handler != null)
{
- _handler.reset();
+ if ((_missionResetSlot == MissionResetType.WEEK) && (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY))
+ {
+ _handler.reset();
+ }
+ else if ((_missionResetSlot == MissionResetType.MONTH) && (Calendar.getInstance().get(Calendar.DAY_OF_MONTH) == 1))
+ {
+ _handler.reset();
+ }
+ else if ((_missionResetSlot == MissionResetType.WEEKEND) && (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY))
+ {
+ _handler.reset();
+ }
+ else if (_dailyReset)
+ {
+ _handler.reset();
+ }
}
}
}
diff --git a/L2J_Mobius_Classic_2.5_Zaken/dist/game/data/DailyMission.xml b/L2J_Mobius_Classic_2.5_Zaken/dist/game/data/DailyMission.xml
index 8654d5e335..37a3979fd7 100644
--- a/L2J_Mobius_Classic_2.5_Zaken/dist/game/data/DailyMission.xml
+++ b/L2J_Mobius_Classic_2.5_Zaken/dist/game/data/DailyMission.xml
@@ -1633,20 +1633,18 @@
-
@@ -1659,14 +1657,12 @@
-
diff --git a/L2J_Mobius_Classic_2.5_Zaken/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java b/L2J_Mobius_Classic_2.5_Zaken/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
index 70bd0e70c2..2568d12ae3 100644
--- a/L2J_Mobius_Classic_2.5_Zaken/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
+++ b/L2J_Mobius_Classic_2.5_Zaken/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
@@ -22,6 +22,7 @@ import org.l2jmobius.gameserver.handler.DailyMissionHandler;
import handlers.dailymissionhandlers.BossDailyMissionHandler;
import handlers.dailymissionhandlers.FishingDailyMissionHandler;
+import handlers.dailymissionhandlers.JoinClanDailyMissionHandler;
import handlers.dailymissionhandlers.LevelDailyMissionHandler;
import handlers.dailymissionhandlers.LoginMonthDailyMissionHandler;
import handlers.dailymissionhandlers.LoginWeekendDailyMissionHandler;
@@ -46,6 +47,7 @@ public class DailyMissionMasterHandler
DailyMissionHandler.getInstance().registerHandler("siege", SiegeDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("boss", BossDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("fishing", FishingDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("joinclan", JoinClanDailyMissionHandler::new);
LOGGER.info(DailyMissionMasterHandler.class.getSimpleName() + ": Loaded " + DailyMissionHandler.getInstance().size() + " handlers.");
}
}
diff --git a/L2J_Mobius_Classic_2.5_Zaken/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java b/L2J_Mobius_Classic_2.5_Zaken/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
new file mode 100644
index 0000000000..7af0642f51
--- /dev/null
+++ b/L2J_Mobius_Classic_2.5_Zaken/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
@@ -0,0 +1,81 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package handlers.dailymissionhandlers;
+
+import java.util.function.Consumer;
+
+import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
+import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
+import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.Containers;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanCreate;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanJoin;
+import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
+
+/**
+ * @author kamikadzz
+ */
+public class JoinClanDailyMissionHandler extends AbstractDailyMissionHandler
+{
+ public JoinClanDailyMissionHandler(DailyMissionDataHolder holder)
+ {
+ super(holder);
+ }
+
+ @Override
+ public boolean isAvailable(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
+ return (entry != null) && (entry.getStatus() == DailyMissionStatus.AVAILABLE);
+ }
+
+ @Override
+ public void init()
+ {
+ Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_CLAN_JOIN, (Consumer) this::onPlayerClanJoin, this));
+ Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_CLAN_CREATE, (Consumer) this::onPlayerClanCreate, this));
+ }
+
+ private void onPlayerClanJoin(OnPlayerClanJoin event)
+ {
+ final DailyMissionPlayerEntry missionData = getPlayerEntry(event.getClanMember().getPlayer().getObjectId(), true);
+ processMission(missionData);
+ }
+
+ private void onPlayerClanCreate(OnPlayerClanCreate event)
+ {
+ final DailyMissionPlayerEntry missionData = getPlayerEntry(event.getPlayer().getObjectId(), true);
+ processMission(missionData);
+ }
+
+ private void processMission(DailyMissionPlayerEntry missionData)
+ {
+ if (missionData.getProgress() == 1)
+ {
+ missionData.setStatus(DailyMissionStatus.COMPLETED);
+ }
+ else
+ {
+ missionData.setProgress(1);
+ missionData.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(missionData);
+ }
+}
diff --git a/L2J_Mobius_Classic_2.5_Zaken/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java b/L2J_Mobius_Classic_2.5_Zaken/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
index 84462adcb8..0da9875cd5 100644
--- a/L2J_Mobius_Classic_2.5_Zaken/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
+++ b/L2J_Mobius_Classic_2.5_Zaken/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
@@ -49,30 +49,14 @@ public class LoginMonthDailyMissionHandler extends AbstractDailyMissionHandler
Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_LOGIN, (OnPlayerLogin event) -> onPlayerLogin(event), this));
}
- @Override
- public void reset()
- {
- // Monthly rewards do not reset daily.
- }
-
private void onPlayerLogin(OnPlayerLogin event)
{
final DailyMissionPlayerEntry entry = getPlayerEntry(event.getPlayer().getObjectId(), true);
- final long lastCompleted = entry.getLastCompleted();
- if (lastCompleted == 0) // Initial entry.
- {
- entry.setLastCompleted(System.currentTimeMillis());
- }
- else if ((System.currentTimeMillis() - lastCompleted) > 2506000000L) // 2506000000L (29 day) delay.
+ if (entry.getStatus() != DailyMissionStatus.COMPLETED)
{
entry.setProgress(1);
entry.setStatus(DailyMissionStatus.AVAILABLE);
}
- else
- {
- entry.setProgress(0);
- entry.setStatus(DailyMissionStatus.NOT_AVAILABLE);
- }
storePlayerEntry(entry);
}
}
diff --git a/L2J_Mobius_Classic_2.5_Zaken/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java b/L2J_Mobius_Classic_2.5_Zaken/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
index f7e5360c4e..18eaca0a48 100644
--- a/L2J_Mobius_Classic_2.5_Zaken/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
+++ b/L2J_Mobius_Classic_2.5_Zaken/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
@@ -51,27 +51,18 @@ public class LoginWeekendDailyMissionHandler extends AbstractDailyMissionHandler
Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_LOGIN, (OnPlayerLogin event) -> onPlayerLogin(event), this));
}
- @Override
- public void reset()
- {
- // Weekend rewards do not reset daily.
- }
-
private void onPlayerLogin(OnPlayerLogin event)
{
final DailyMissionPlayerEntry entry = getPlayerEntry(event.getPlayer().getObjectId(), true);
- final int currentDay = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
- final long lastCompleted = entry.getLastCompleted();
- if (((currentDay == Calendar.SATURDAY) || (currentDay == Calendar.SUNDAY)) // Reward only on weekend.
- && ((lastCompleted == 0) || ((System.currentTimeMillis() - lastCompleted) > 172800000))) // Initial entry or 172800000 (2 day) delay.
+ if (entry.getStatus() != DailyMissionStatus.COMPLETED)
{
- entry.setProgress(1);
- entry.setStatus(DailyMissionStatus.AVAILABLE);
- }
- else if (entry.getStatus() != DailyMissionStatus.AVAILABLE) // Not waiting to be rewarded.
- {
- entry.setProgress(0);
- entry.setStatus(DailyMissionStatus.NOT_AVAILABLE);
+ final int currentDay = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
+ if (((currentDay == Calendar.SATURDAY) || (currentDay == Calendar.SUNDAY) || (currentDay == Calendar.MONDAY)) //
+ && (Calendar.getInstance().get(Calendar.HOUR_OF_DAY) < 6) && (Calendar.getInstance().get(Calendar.MINUTE) < 30))
+ {
+ entry.setProgress(1);
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
}
storePlayerEntry(entry);
}
diff --git a/L2J_Mobius_Classic_2.5_Zaken/dist/game/data/xsd/DailyMission.xsd b/L2J_Mobius_Classic_2.5_Zaken/dist/game/data/xsd/DailyMission.xsd
index 9da08900d0..35f2f6dc35 100644
--- a/L2J_Mobius_Classic_2.5_Zaken/dist/game/data/xsd/DailyMission.xsd
+++ b/L2J_Mobius_Classic_2.5_Zaken/dist/game/data/xsd/DailyMission.xsd
@@ -42,6 +42,7 @@
+
diff --git a/L2J_Mobius_Classic_2.5_Zaken/java/org/l2jmobius/gameserver/enums/MissionResetType.java b/L2J_Mobius_Classic_2.5_Zaken/java/org/l2jmobius/gameserver/enums/MissionResetType.java
new file mode 100644
index 0000000000..cb74a12d14
--- /dev/null
+++ b/L2J_Mobius_Classic_2.5_Zaken/java/org/l2jmobius/gameserver/enums/MissionResetType.java
@@ -0,0 +1,28 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.l2jmobius.gameserver.enums;
+
+/**
+ * @author kamikadzz
+ */
+public enum MissionResetType
+{
+ DAY,
+ WEEK,
+ MONTH,
+ WEEKEND
+}
diff --git a/L2J_Mobius_Classic_2.5_Zaken/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java b/L2J_Mobius_Classic_2.5_Zaken/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
index 30674c7646..11c6c718d4 100644
--- a/L2J_Mobius_Classic_2.5_Zaken/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
+++ b/L2J_Mobius_Classic_2.5_Zaken/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
@@ -16,11 +16,13 @@
*/
package org.l2jmobius.gameserver.model;
+import java.util.Calendar;
import java.util.List;
import java.util.function.Function;
import org.l2jmobius.gameserver.enums.ClassId;
import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.enums.MissionResetType;
import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
import org.l2jmobius.gameserver.handler.DailyMissionHandler;
import org.l2jmobius.gameserver.model.actor.Player;
@@ -42,6 +44,7 @@ public class DailyMissionDataHolder
private final boolean _isDualClassOnly;
private final boolean _isDisplayedWhenNotAvailable;
private final AbstractDailyMissionHandler _handler;
+ private final MissionResetType _missionResetSlot;
public DailyMissionDataHolder(StatSet set)
{
@@ -57,6 +60,7 @@ public class DailyMissionDataHolder
_isDualClassOnly = set.getBoolean("isDualClassOnly", false);
_isDisplayedWhenNotAvailable = set.getBoolean("isDisplayedWhenNotAvailable", true);
_handler = handler != null ? handler.apply(this) : null;
+ _missionResetSlot = set.getObject("duration", MissionResetType.class, MissionResetType.DAY);
}
public int getId()
@@ -166,7 +170,22 @@ public class DailyMissionDataHolder
{
if (_handler != null)
{
- _handler.reset();
+ if ((_missionResetSlot == MissionResetType.WEEK) && (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY))
+ {
+ _handler.reset();
+ }
+ else if ((_missionResetSlot == MissionResetType.MONTH) && (Calendar.getInstance().get(Calendar.DAY_OF_MONTH) == 1))
+ {
+ _handler.reset();
+ }
+ else if ((_missionResetSlot == MissionResetType.WEEKEND) && (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY))
+ {
+ _handler.reset();
+ }
+ else if (_dailyReset)
+ {
+ _handler.reset();
+ }
}
}
}
diff --git a/L2J_Mobius_Classic_2.7_Antharas/dist/game/data/DailyMission.xml b/L2J_Mobius_Classic_2.7_Antharas/dist/game/data/DailyMission.xml
index f85b348acb..99f30f9dff 100644
--- a/L2J_Mobius_Classic_2.7_Antharas/dist/game/data/DailyMission.xml
+++ b/L2J_Mobius_Classic_2.7_Antharas/dist/game/data/DailyMission.xml
@@ -1632,13 +1632,13 @@
-
+
-
+
@@ -1656,14 +1656,12 @@
-
diff --git a/L2J_Mobius_Classic_2.7_Antharas/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java b/L2J_Mobius_Classic_2.7_Antharas/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
index 70bd0e70c2..2568d12ae3 100644
--- a/L2J_Mobius_Classic_2.7_Antharas/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
+++ b/L2J_Mobius_Classic_2.7_Antharas/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
@@ -22,6 +22,7 @@ import org.l2jmobius.gameserver.handler.DailyMissionHandler;
import handlers.dailymissionhandlers.BossDailyMissionHandler;
import handlers.dailymissionhandlers.FishingDailyMissionHandler;
+import handlers.dailymissionhandlers.JoinClanDailyMissionHandler;
import handlers.dailymissionhandlers.LevelDailyMissionHandler;
import handlers.dailymissionhandlers.LoginMonthDailyMissionHandler;
import handlers.dailymissionhandlers.LoginWeekendDailyMissionHandler;
@@ -46,6 +47,7 @@ public class DailyMissionMasterHandler
DailyMissionHandler.getInstance().registerHandler("siege", SiegeDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("boss", BossDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("fishing", FishingDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("joinclan", JoinClanDailyMissionHandler::new);
LOGGER.info(DailyMissionMasterHandler.class.getSimpleName() + ": Loaded " + DailyMissionHandler.getInstance().size() + " handlers.");
}
}
diff --git a/L2J_Mobius_Classic_2.7_Antharas/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java b/L2J_Mobius_Classic_2.7_Antharas/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
new file mode 100644
index 0000000000..7af0642f51
--- /dev/null
+++ b/L2J_Mobius_Classic_2.7_Antharas/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
@@ -0,0 +1,81 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package handlers.dailymissionhandlers;
+
+import java.util.function.Consumer;
+
+import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
+import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
+import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.Containers;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanCreate;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanJoin;
+import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
+
+/**
+ * @author kamikadzz
+ */
+public class JoinClanDailyMissionHandler extends AbstractDailyMissionHandler
+{
+ public JoinClanDailyMissionHandler(DailyMissionDataHolder holder)
+ {
+ super(holder);
+ }
+
+ @Override
+ public boolean isAvailable(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
+ return (entry != null) && (entry.getStatus() == DailyMissionStatus.AVAILABLE);
+ }
+
+ @Override
+ public void init()
+ {
+ Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_CLAN_JOIN, (Consumer) this::onPlayerClanJoin, this));
+ Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_CLAN_CREATE, (Consumer) this::onPlayerClanCreate, this));
+ }
+
+ private void onPlayerClanJoin(OnPlayerClanJoin event)
+ {
+ final DailyMissionPlayerEntry missionData = getPlayerEntry(event.getClanMember().getPlayer().getObjectId(), true);
+ processMission(missionData);
+ }
+
+ private void onPlayerClanCreate(OnPlayerClanCreate event)
+ {
+ final DailyMissionPlayerEntry missionData = getPlayerEntry(event.getPlayer().getObjectId(), true);
+ processMission(missionData);
+ }
+
+ private void processMission(DailyMissionPlayerEntry missionData)
+ {
+ if (missionData.getProgress() == 1)
+ {
+ missionData.setStatus(DailyMissionStatus.COMPLETED);
+ }
+ else
+ {
+ missionData.setProgress(1);
+ missionData.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(missionData);
+ }
+}
diff --git a/L2J_Mobius_Classic_2.7_Antharas/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java b/L2J_Mobius_Classic_2.7_Antharas/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
index 84462adcb8..0da9875cd5 100644
--- a/L2J_Mobius_Classic_2.7_Antharas/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
+++ b/L2J_Mobius_Classic_2.7_Antharas/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
@@ -49,30 +49,14 @@ public class LoginMonthDailyMissionHandler extends AbstractDailyMissionHandler
Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_LOGIN, (OnPlayerLogin event) -> onPlayerLogin(event), this));
}
- @Override
- public void reset()
- {
- // Monthly rewards do not reset daily.
- }
-
private void onPlayerLogin(OnPlayerLogin event)
{
final DailyMissionPlayerEntry entry = getPlayerEntry(event.getPlayer().getObjectId(), true);
- final long lastCompleted = entry.getLastCompleted();
- if (lastCompleted == 0) // Initial entry.
- {
- entry.setLastCompleted(System.currentTimeMillis());
- }
- else if ((System.currentTimeMillis() - lastCompleted) > 2506000000L) // 2506000000L (29 day) delay.
+ if (entry.getStatus() != DailyMissionStatus.COMPLETED)
{
entry.setProgress(1);
entry.setStatus(DailyMissionStatus.AVAILABLE);
}
- else
- {
- entry.setProgress(0);
- entry.setStatus(DailyMissionStatus.NOT_AVAILABLE);
- }
storePlayerEntry(entry);
}
}
diff --git a/L2J_Mobius_Classic_2.7_Antharas/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java b/L2J_Mobius_Classic_2.7_Antharas/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
index f7e5360c4e..18eaca0a48 100644
--- a/L2J_Mobius_Classic_2.7_Antharas/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
+++ b/L2J_Mobius_Classic_2.7_Antharas/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
@@ -51,27 +51,18 @@ public class LoginWeekendDailyMissionHandler extends AbstractDailyMissionHandler
Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_LOGIN, (OnPlayerLogin event) -> onPlayerLogin(event), this));
}
- @Override
- public void reset()
- {
- // Weekend rewards do not reset daily.
- }
-
private void onPlayerLogin(OnPlayerLogin event)
{
final DailyMissionPlayerEntry entry = getPlayerEntry(event.getPlayer().getObjectId(), true);
- final int currentDay = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
- final long lastCompleted = entry.getLastCompleted();
- if (((currentDay == Calendar.SATURDAY) || (currentDay == Calendar.SUNDAY)) // Reward only on weekend.
- && ((lastCompleted == 0) || ((System.currentTimeMillis() - lastCompleted) > 172800000))) // Initial entry or 172800000 (2 day) delay.
+ if (entry.getStatus() != DailyMissionStatus.COMPLETED)
{
- entry.setProgress(1);
- entry.setStatus(DailyMissionStatus.AVAILABLE);
- }
- else if (entry.getStatus() != DailyMissionStatus.AVAILABLE) // Not waiting to be rewarded.
- {
- entry.setProgress(0);
- entry.setStatus(DailyMissionStatus.NOT_AVAILABLE);
+ final int currentDay = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
+ if (((currentDay == Calendar.SATURDAY) || (currentDay == Calendar.SUNDAY) || (currentDay == Calendar.MONDAY)) //
+ && (Calendar.getInstance().get(Calendar.HOUR_OF_DAY) < 6) && (Calendar.getInstance().get(Calendar.MINUTE) < 30))
+ {
+ entry.setProgress(1);
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
}
storePlayerEntry(entry);
}
diff --git a/L2J_Mobius_Classic_2.7_Antharas/dist/game/data/xsd/DailyMission.xsd b/L2J_Mobius_Classic_2.7_Antharas/dist/game/data/xsd/DailyMission.xsd
index 9da08900d0..35f2f6dc35 100644
--- a/L2J_Mobius_Classic_2.7_Antharas/dist/game/data/xsd/DailyMission.xsd
+++ b/L2J_Mobius_Classic_2.7_Antharas/dist/game/data/xsd/DailyMission.xsd
@@ -42,6 +42,7 @@
+
diff --git a/L2J_Mobius_Classic_2.7_Antharas/java/org/l2jmobius/gameserver/enums/MissionResetType.java b/L2J_Mobius_Classic_2.7_Antharas/java/org/l2jmobius/gameserver/enums/MissionResetType.java
new file mode 100644
index 0000000000..cb74a12d14
--- /dev/null
+++ b/L2J_Mobius_Classic_2.7_Antharas/java/org/l2jmobius/gameserver/enums/MissionResetType.java
@@ -0,0 +1,28 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.l2jmobius.gameserver.enums;
+
+/**
+ * @author kamikadzz
+ */
+public enum MissionResetType
+{
+ DAY,
+ WEEK,
+ MONTH,
+ WEEKEND
+}
diff --git a/L2J_Mobius_Classic_2.7_Antharas/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java b/L2J_Mobius_Classic_2.7_Antharas/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
index 30674c7646..11c6c718d4 100644
--- a/L2J_Mobius_Classic_2.7_Antharas/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
+++ b/L2J_Mobius_Classic_2.7_Antharas/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
@@ -16,11 +16,13 @@
*/
package org.l2jmobius.gameserver.model;
+import java.util.Calendar;
import java.util.List;
import java.util.function.Function;
import org.l2jmobius.gameserver.enums.ClassId;
import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.enums.MissionResetType;
import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
import org.l2jmobius.gameserver.handler.DailyMissionHandler;
import org.l2jmobius.gameserver.model.actor.Player;
@@ -42,6 +44,7 @@ public class DailyMissionDataHolder
private final boolean _isDualClassOnly;
private final boolean _isDisplayedWhenNotAvailable;
private final AbstractDailyMissionHandler _handler;
+ private final MissionResetType _missionResetSlot;
public DailyMissionDataHolder(StatSet set)
{
@@ -57,6 +60,7 @@ public class DailyMissionDataHolder
_isDualClassOnly = set.getBoolean("isDualClassOnly", false);
_isDisplayedWhenNotAvailable = set.getBoolean("isDisplayedWhenNotAvailable", true);
_handler = handler != null ? handler.apply(this) : null;
+ _missionResetSlot = set.getObject("duration", MissionResetType.class, MissionResetType.DAY);
}
public int getId()
@@ -166,7 +170,22 @@ public class DailyMissionDataHolder
{
if (_handler != null)
{
- _handler.reset();
+ if ((_missionResetSlot == MissionResetType.WEEK) && (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY))
+ {
+ _handler.reset();
+ }
+ else if ((_missionResetSlot == MissionResetType.MONTH) && (Calendar.getInstance().get(Calendar.DAY_OF_MONTH) == 1))
+ {
+ _handler.reset();
+ }
+ else if ((_missionResetSlot == MissionResetType.WEEKEND) && (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY))
+ {
+ _handler.reset();
+ }
+ else if (_dailyReset)
+ {
+ _handler.reset();
+ }
}
}
}
diff --git a/L2J_Mobius_Classic_2.8_SevenSigns/dist/game/data/DailyMission.xml b/L2J_Mobius_Classic_2.8_SevenSigns/dist/game/data/DailyMission.xml
index f85b348acb..99f30f9dff 100644
--- a/L2J_Mobius_Classic_2.8_SevenSigns/dist/game/data/DailyMission.xml
+++ b/L2J_Mobius_Classic_2.8_SevenSigns/dist/game/data/DailyMission.xml
@@ -1632,13 +1632,13 @@
-
+
-
+
@@ -1656,14 +1656,12 @@
-
diff --git a/L2J_Mobius_Classic_2.8_SevenSigns/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java b/L2J_Mobius_Classic_2.8_SevenSigns/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
index 9bb3842474..ac59e9a95f 100644
--- a/L2J_Mobius_Classic_2.8_SevenSigns/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
+++ b/L2J_Mobius_Classic_2.8_SevenSigns/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
@@ -22,6 +22,7 @@ import org.l2jmobius.gameserver.handler.DailyMissionHandler;
import handlers.dailymissionhandlers.BossDailyMissionHandler;
import handlers.dailymissionhandlers.FishingDailyMissionHandler;
+import handlers.dailymissionhandlers.JoinClanDailyMissionHandler;
import handlers.dailymissionhandlers.LevelDailyMissionHandler;
import handlers.dailymissionhandlers.LoginMonthDailyMissionHandler;
import handlers.dailymissionhandlers.LoginWeekendDailyMissionHandler;
@@ -48,6 +49,7 @@ public class DailyMissionMasterHandler
DailyMissionHandler.getInstance().registerHandler("boss", BossDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("fishing", FishingDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("spirit", SpiritDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("joinclan", JoinClanDailyMissionHandler::new);
LOGGER.info(DailyMissionMasterHandler.class.getSimpleName() + ": Loaded " + DailyMissionHandler.getInstance().size() + " handlers.");
}
}
diff --git a/L2J_Mobius_Classic_2.8_SevenSigns/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java b/L2J_Mobius_Classic_2.8_SevenSigns/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
new file mode 100644
index 0000000000..7af0642f51
--- /dev/null
+++ b/L2J_Mobius_Classic_2.8_SevenSigns/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
@@ -0,0 +1,81 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package handlers.dailymissionhandlers;
+
+import java.util.function.Consumer;
+
+import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
+import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
+import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.Containers;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanCreate;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanJoin;
+import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
+
+/**
+ * @author kamikadzz
+ */
+public class JoinClanDailyMissionHandler extends AbstractDailyMissionHandler
+{
+ public JoinClanDailyMissionHandler(DailyMissionDataHolder holder)
+ {
+ super(holder);
+ }
+
+ @Override
+ public boolean isAvailable(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
+ return (entry != null) && (entry.getStatus() == DailyMissionStatus.AVAILABLE);
+ }
+
+ @Override
+ public void init()
+ {
+ Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_CLAN_JOIN, (Consumer) this::onPlayerClanJoin, this));
+ Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_CLAN_CREATE, (Consumer) this::onPlayerClanCreate, this));
+ }
+
+ private void onPlayerClanJoin(OnPlayerClanJoin event)
+ {
+ final DailyMissionPlayerEntry missionData = getPlayerEntry(event.getClanMember().getPlayer().getObjectId(), true);
+ processMission(missionData);
+ }
+
+ private void onPlayerClanCreate(OnPlayerClanCreate event)
+ {
+ final DailyMissionPlayerEntry missionData = getPlayerEntry(event.getPlayer().getObjectId(), true);
+ processMission(missionData);
+ }
+
+ private void processMission(DailyMissionPlayerEntry missionData)
+ {
+ if (missionData.getProgress() == 1)
+ {
+ missionData.setStatus(DailyMissionStatus.COMPLETED);
+ }
+ else
+ {
+ missionData.setProgress(1);
+ missionData.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(missionData);
+ }
+}
diff --git a/L2J_Mobius_Classic_2.8_SevenSigns/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java b/L2J_Mobius_Classic_2.8_SevenSigns/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
index 84462adcb8..0da9875cd5 100644
--- a/L2J_Mobius_Classic_2.8_SevenSigns/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
+++ b/L2J_Mobius_Classic_2.8_SevenSigns/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
@@ -49,30 +49,14 @@ public class LoginMonthDailyMissionHandler extends AbstractDailyMissionHandler
Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_LOGIN, (OnPlayerLogin event) -> onPlayerLogin(event), this));
}
- @Override
- public void reset()
- {
- // Monthly rewards do not reset daily.
- }
-
private void onPlayerLogin(OnPlayerLogin event)
{
final DailyMissionPlayerEntry entry = getPlayerEntry(event.getPlayer().getObjectId(), true);
- final long lastCompleted = entry.getLastCompleted();
- if (lastCompleted == 0) // Initial entry.
- {
- entry.setLastCompleted(System.currentTimeMillis());
- }
- else if ((System.currentTimeMillis() - lastCompleted) > 2506000000L) // 2506000000L (29 day) delay.
+ if (entry.getStatus() != DailyMissionStatus.COMPLETED)
{
entry.setProgress(1);
entry.setStatus(DailyMissionStatus.AVAILABLE);
}
- else
- {
- entry.setProgress(0);
- entry.setStatus(DailyMissionStatus.NOT_AVAILABLE);
- }
storePlayerEntry(entry);
}
}
diff --git a/L2J_Mobius_Classic_2.8_SevenSigns/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java b/L2J_Mobius_Classic_2.8_SevenSigns/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
index f7e5360c4e..18eaca0a48 100644
--- a/L2J_Mobius_Classic_2.8_SevenSigns/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
+++ b/L2J_Mobius_Classic_2.8_SevenSigns/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
@@ -51,27 +51,18 @@ public class LoginWeekendDailyMissionHandler extends AbstractDailyMissionHandler
Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_LOGIN, (OnPlayerLogin event) -> onPlayerLogin(event), this));
}
- @Override
- public void reset()
- {
- // Weekend rewards do not reset daily.
- }
-
private void onPlayerLogin(OnPlayerLogin event)
{
final DailyMissionPlayerEntry entry = getPlayerEntry(event.getPlayer().getObjectId(), true);
- final int currentDay = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
- final long lastCompleted = entry.getLastCompleted();
- if (((currentDay == Calendar.SATURDAY) || (currentDay == Calendar.SUNDAY)) // Reward only on weekend.
- && ((lastCompleted == 0) || ((System.currentTimeMillis() - lastCompleted) > 172800000))) // Initial entry or 172800000 (2 day) delay.
+ if (entry.getStatus() != DailyMissionStatus.COMPLETED)
{
- entry.setProgress(1);
- entry.setStatus(DailyMissionStatus.AVAILABLE);
- }
- else if (entry.getStatus() != DailyMissionStatus.AVAILABLE) // Not waiting to be rewarded.
- {
- entry.setProgress(0);
- entry.setStatus(DailyMissionStatus.NOT_AVAILABLE);
+ final int currentDay = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
+ if (((currentDay == Calendar.SATURDAY) || (currentDay == Calendar.SUNDAY) || (currentDay == Calendar.MONDAY)) //
+ && (Calendar.getInstance().get(Calendar.HOUR_OF_DAY) < 6) && (Calendar.getInstance().get(Calendar.MINUTE) < 30))
+ {
+ entry.setProgress(1);
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
}
storePlayerEntry(entry);
}
diff --git a/L2J_Mobius_Classic_2.8_SevenSigns/dist/game/data/xsd/DailyMission.xsd b/L2J_Mobius_Classic_2.8_SevenSigns/dist/game/data/xsd/DailyMission.xsd
index 9da08900d0..35f2f6dc35 100644
--- a/L2J_Mobius_Classic_2.8_SevenSigns/dist/game/data/xsd/DailyMission.xsd
+++ b/L2J_Mobius_Classic_2.8_SevenSigns/dist/game/data/xsd/DailyMission.xsd
@@ -42,6 +42,7 @@
+
diff --git a/L2J_Mobius_Classic_2.8_SevenSigns/java/org/l2jmobius/gameserver/enums/MissionResetType.java b/L2J_Mobius_Classic_2.8_SevenSigns/java/org/l2jmobius/gameserver/enums/MissionResetType.java
new file mode 100644
index 0000000000..cb74a12d14
--- /dev/null
+++ b/L2J_Mobius_Classic_2.8_SevenSigns/java/org/l2jmobius/gameserver/enums/MissionResetType.java
@@ -0,0 +1,28 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.l2jmobius.gameserver.enums;
+
+/**
+ * @author kamikadzz
+ */
+public enum MissionResetType
+{
+ DAY,
+ WEEK,
+ MONTH,
+ WEEKEND
+}
diff --git a/L2J_Mobius_Classic_2.8_SevenSigns/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java b/L2J_Mobius_Classic_2.8_SevenSigns/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
index 30674c7646..11c6c718d4 100644
--- a/L2J_Mobius_Classic_2.8_SevenSigns/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
+++ b/L2J_Mobius_Classic_2.8_SevenSigns/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
@@ -16,11 +16,13 @@
*/
package org.l2jmobius.gameserver.model;
+import java.util.Calendar;
import java.util.List;
import java.util.function.Function;
import org.l2jmobius.gameserver.enums.ClassId;
import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.enums.MissionResetType;
import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
import org.l2jmobius.gameserver.handler.DailyMissionHandler;
import org.l2jmobius.gameserver.model.actor.Player;
@@ -42,6 +44,7 @@ public class DailyMissionDataHolder
private final boolean _isDualClassOnly;
private final boolean _isDisplayedWhenNotAvailable;
private final AbstractDailyMissionHandler _handler;
+ private final MissionResetType _missionResetSlot;
public DailyMissionDataHolder(StatSet set)
{
@@ -57,6 +60,7 @@ public class DailyMissionDataHolder
_isDualClassOnly = set.getBoolean("isDualClassOnly", false);
_isDisplayedWhenNotAvailable = set.getBoolean("isDisplayedWhenNotAvailable", true);
_handler = handler != null ? handler.apply(this) : null;
+ _missionResetSlot = set.getObject("duration", MissionResetType.class, MissionResetType.DAY);
}
public int getId()
@@ -166,7 +170,22 @@ public class DailyMissionDataHolder
{
if (_handler != null)
{
- _handler.reset();
+ if ((_missionResetSlot == MissionResetType.WEEK) && (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY))
+ {
+ _handler.reset();
+ }
+ else if ((_missionResetSlot == MissionResetType.MONTH) && (Calendar.getInstance().get(Calendar.DAY_OF_MONTH) == 1))
+ {
+ _handler.reset();
+ }
+ else if ((_missionResetSlot == MissionResetType.WEEKEND) && (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY))
+ {
+ _handler.reset();
+ }
+ else if (_dailyReset)
+ {
+ _handler.reset();
+ }
}
}
}
diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/DailyMission.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/DailyMission.xml
index de82cfb806..c355b9bcc7 100644
--- a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/DailyMission.xml
+++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/DailyMission.xml
@@ -33,7 +33,7 @@
5
-
+
@@ -42,7 +42,7 @@
6
-
+
@@ -51,7 +51,7 @@
7
-
+
@@ -73,128 +73,6 @@
-
-
- 0
- 18
- 31
- 44
- 53
- 1
- 4
- 19
- 32
- 45
- 56
- 2
- 3
- 5
- 6
- 20
- 21
- 33
- 34
- 46
- 57
- 88
- 89
- 90
- 91
- 99
- 100
- 106
- 107
- 113
- 117
- 118
-
- 10
-
-
-
-
-
-
-
-
-
- 7
- 22
- 35
- 47
- 8
- 9
- 23
- 24
- 36
- 37
- 54
- 55
- 48
- 92
- 93
- 101
- 102
- 108
- 109
- 114
- 115
- 116
-
- 10
-
-
-
-
-
-
-
-
-
- 10
- 25
- 38
- 11
- 15
- 26
- 29
- 39
- 42
- 12
- 13
- 14
- 16
- 17
- 27
- 28
- 30
- 40
- 41
- 43
- 49
- 50
- 51
- 52
- 94
- 95
- 96
- 97
- 98
- 103
- 104
- 105
- 110
- 111
- 112
-
- 10
-
-
-
-
-
-
-
@@ -202,6 +80,7 @@
+
@@ -210,7 +89,7 @@
12
-
+
@@ -219,7 +98,7 @@
13
-
+
@@ -237,7 +116,7 @@
15
-
+
@@ -246,7 +125,7 @@
16
-
+
@@ -255,123 +134,7 @@
17
-
-
-
-
-
- 0
- 18
- 31
- 44
- 53
- 1
- 4
- 19
- 32
- 45
- 56
- 2
- 3
- 5
- 6
- 20
- 21
- 33
- 34
- 46
- 57
- 88
- 89
- 90
- 91
- 99
- 100
- 106
- 107
- 113
- 117
- 118
-
- 18
-
-
-
-
-
-
-
- 7
- 22
- 35
- 47
- 8
- 9
- 23
- 24
- 36
- 37
- 54
- 55
- 48
- 92
- 93
- 101
- 102
- 108
- 109
- 114
- 115
- 116
-
- 18
-
-
-
-
-
-
-
- 10
- 25
- 38
- 11
- 15
- 26
- 29
- 39
- 42
- 12
- 13
- 14
- 16
- 17
- 27
- 28
- 30
- 40
- 41
- 43
- 49
- 50
- 51
- 52
- 94
- 95
- 96
- 97
- 98
- 103
- 104
- 105
- 110
- 111
- 112
-
- 18
-
-
-
+
@@ -389,9 +152,6 @@
20
-
-
-
@@ -401,7 +161,7 @@
21
-
+
@@ -410,123 +170,7 @@
22
-
-
-
-
-
- 0
- 18
- 31
- 44
- 53
- 1
- 4
- 19
- 32
- 45
- 56
- 2
- 3
- 5
- 6
- 20
- 21
- 33
- 34
- 46
- 57
- 88
- 89
- 90
- 91
- 99
- 100
- 106
- 107
- 113
- 117
- 118
-
- 23
-
-
-
-
-
-
-
- 7
- 22
- 35
- 47
- 8
- 9
- 23
- 24
- 36
- 37
- 54
- 55
- 48
- 92
- 93
- 101
- 102
- 108
- 109
- 114
- 115
- 116
-
- 23
-
-
-
-
-
-
-
- 10
- 25
- 38
- 11
- 15
- 26
- 29
- 39
- 42
- 12
- 13
- 14
- 16
- 17
- 27
- 28
- 30
- 40
- 41
- 43
- 49
- 50
- 51
- 52
- 94
- 95
- 96
- 97
- 98
- 103
- 104
- 105
- 110
- 111
- 112
-
- 23
-
-
-
+
@@ -535,7 +179,8 @@
24
-
+
+
@@ -544,8 +189,7 @@
25
-
-
+
@@ -554,7 +198,7 @@
26
-
+
@@ -563,123 +207,7 @@
27
-
-
-
-
-
- 0
- 18
- 31
- 44
- 53
- 1
- 4
- 19
- 32
- 45
- 56
- 2
- 3
- 5
- 6
- 20
- 21
- 33
- 34
- 46
- 57
- 88
- 89
- 90
- 91
- 99
- 100
- 106
- 107
- 113
- 117
- 118
-
- 28
-
-
-
-
-
-
-
- 7
- 22
- 35
- 47
- 8
- 9
- 23
- 24
- 36
- 37
- 54
- 55
- 48
- 92
- 93
- 101
- 102
- 108
- 109
- 114
- 115
- 116
-
- 28
-
-
-
-
-
-
-
- 10
- 25
- 38
- 11
- 15
- 26
- 29
- 39
- 42
- 12
- 13
- 14
- 16
- 17
- 27
- 28
- 30
- 40
- 41
- 43
- 49
- 50
- 51
- 52
- 94
- 95
- 96
- 97
- 98
- 103
- 104
- 105
- 110
- 111
- 112
-
- 28
-
-
-
+
@@ -688,7 +216,7 @@
29
-
+
@@ -697,7 +225,7 @@
30
-
+
@@ -706,7 +234,7 @@
31
-
+
@@ -715,7 +243,7 @@
32
-
+
@@ -733,7 +261,7 @@
34
-
+
@@ -742,7 +270,7 @@
35
-
+
@@ -751,7 +279,7 @@
36
-
+
@@ -763,129 +291,13 @@
-
-
- 0
- 18
- 31
- 44
- 53
- 1
- 4
- 19
- 32
- 45
- 56
- 2
- 3
- 5
- 6
- 20
- 21
- 33
- 34
- 46
- 57
- 88
- 89
- 90
- 91
- 99
- 100
- 106
- 107
- 113
- 117
- 118
-
- 38
-
-
-
-
-
-
-
- 7
- 22
- 35
- 47
- 8
- 9
- 23
- 24
- 36
- 37
- 54
- 55
- 48
- 92
- 93
- 101
- 102
- 108
- 109
- 114
- 115
- 116
-
- 38
-
-
-
-
-
-
-
- 10
- 25
- 38
- 11
- 15
- 26
- 29
- 39
- 42
- 12
- 13
- 14
- 16
- 17
- 27
- 28
- 30
- 40
- 41
- 43
- 49
- 50
- 51
- 52
- 94
- 95
- 96
- 97
- 98
- 103
- 104
- 105
- 110
- 111
- 112
-
- 38
-
-
-
-
-
39
-
+
@@ -903,7 +315,7 @@
41
-
+
@@ -912,123 +324,8 @@
42
-
-
-
-
-
- 0
- 18
- 31
- 44
- 53
- 1
- 4
- 19
- 32
- 45
- 56
- 2
- 3
- 5
- 6
- 20
- 21
- 33
- 34
- 46
- 57
- 88
- 89
- 90
- 91
- 99
- 100
- 106
- 107
- 113
- 117
- 118
-
- 43
-
-
-
-
-
-
-
- 7
- 22
- 35
- 47
- 8
- 9
- 23
- 24
- 36
- 37
- 54
- 55
- 48
- 92
- 93
- 101
- 102
- 108
- 109
- 114
- 115
- 116
-
- 43
-
-
-
-
-
-
-
- 10
- 25
- 38
- 11
- 15
- 26
- 29
- 39
- 42
- 12
- 13
- 14
- 16
- 17
- 27
- 28
- 30
- 40
- 41
- 43
- 49
- 50
- 51
- 52
- 94
- 95
- 96
- 97
- 98
- 103
- 104
- 105
- 110
- 111
- 112
-
- 43
-
-
-
+
+
@@ -1037,7 +334,7 @@
44
-
+
@@ -1046,7 +343,7 @@
45
-
+
@@ -1055,7 +352,7 @@
46
-
+
@@ -1064,124 +361,7 @@
47
-
-
-
-
-
- 0
- 9
- 18
- 31
- 44
- 53
- 1
- 4
- 19
- 32
- 45
- 56
- 2
- 3
- 5
- 6
- 20
- 21
- 33
- 34
- 46
- 57
- 88
- 89
- 90
- 91
- 99
- 100
- 106
- 107
- 113
- 117
- 118
-
- 48
-
-
-
-
-
-
-
- 7
- 22
- 35
- 47
- 8
- 9
- 23
- 24
- 36
- 37
- 54
- 55
- 48
- 92
- 93
- 101
- 102
- 108
- 109
- 114
- 115
- 116
-
- 48
-
-
-
-
-
-
-
- 10
- 25
- 38
- 11
- 15
- 26
- 29
- 39
- 42
- 12
- 13
- 14
- 16
- 17
- 27
- 28
- 30
- 40
- 41
- 43
- 49
- 50
- 51
- 52
- 94
- 95
- 96
- 97
- 98
- 103
- 104
- 105
- 110
- 111
- 112
-
- 48
-
-
-
+
@@ -1190,7 +370,7 @@
49
-
+
@@ -1199,9 +379,7 @@
50
-
-
-
+
@@ -1210,135 +388,18 @@
51
-
-
-
+
-
+
- 0
- 18
- 31
- 44
- 53
- 1
- 4
- 19
- 32
- 45
- 56
- 2
- 3
- 5
- 6
- 20
- 21
- 33
- 34
- 46
- 57
- 88
- 89
- 90
- 91
- 99
- 100
- 106
- 107
- 113
- 117
- 118
52
-
-
-
-
-
-
-
- 7
- 22
- 35
- 47
- 8
- 9
- 23
- 24
- 36
- 37
- 54
- 55
- 48
- 92
- 93
- 101
- 102
- 108
- 109
- 114
- 115
- 116
-
- 52
-
-
-
-
-
-
-
-
-
- 10
- 25
- 38
- 11
- 15
- 26
- 29
- 39
- 42
- 12
- 13
- 14
- 16
- 17
- 27
- 28
- 30
- 40
- 41
- 43
- 49
- 50
- 51
- 52
- 94
- 95
- 96
- 97
- 98
- 103
- 104
- 105
- 110
- 111
- 112
-
- 52
-
-
-
-
-
-
@@ -1347,9 +408,8 @@
53
-
-
+
@@ -1358,9 +418,8 @@
54
-
-
+
@@ -1369,10 +428,9 @@
55
-
+
-
-
+
@@ -1381,9 +439,8 @@
56
-
+
-
@@ -1392,9 +449,8 @@
57
-
+
-
@@ -1403,9 +459,8 @@
58
-
+
-
@@ -1414,9 +469,8 @@
59
-
+
-
@@ -1425,135 +479,19 @@
60
-
+
-
-
+
-
-
- 0
- 18
- 31
- 44
- 53
- 1
- 4
- 19
- 32
- 45
- 56
- 2
- 3
- 5
- 6
- 20
- 21
- 33
- 34
- 46
- 57
- 88
- 89
- 90
- 91
- 99
- 100
- 106
- 107
- 113
- 117
- 118
+
+
61
-
+
-
-
-
-
-
-
- 7
- 22
- 35
- 47
- 8
- 9
- 23
- 24
- 36
- 37
- 54
- 55
- 48
- 92
- 93
- 101
- 102
- 108
- 109
- 114
- 115
- 116
-
- 61
-
-
-
-
-
-
-
-
-
-
- 10
- 25
- 38
- 11
- 15
- 26
- 29
- 39
- 42
- 12
- 13
- 14
- 16
- 17
- 27
- 28
- 30
- 40
- 41
- 43
- 49
- 50
- 51
- 52
- 94
- 95
- 96
- 97
- 98
- 103
- 104
- 105
- 110
- 111
- 112
-
- 61
-
-
-
-
-
-
@@ -1562,9 +500,8 @@
62
-
+
-
@@ -1573,9 +510,8 @@
63
-
+
-
@@ -1584,9 +520,8 @@
64
-
+
-
@@ -1595,10 +530,9 @@
65
-
+
-
-
+
@@ -1607,9 +541,8 @@
66
-
+
-
@@ -1618,9 +551,8 @@
67
-
+
-
@@ -1629,9 +561,8 @@
68
-
+
-
@@ -1640,9 +571,8 @@
69
-
+
-
@@ -1651,10 +581,12 @@
70
-
-
-
+
+
+
+
+
@@ -1663,9 +595,9 @@
71
-
-
+
+
@@ -1674,9 +606,9 @@
72
-
-
+
+
@@ -1685,9 +617,9 @@
73
-
-
+
+
@@ -1696,9 +628,9 @@
74
-
-
+
+
@@ -1707,135 +639,25 @@
75
-
-
-
+
+
+
+
+
-
-
- 0
- 18
- 31
- 44
- 53
- 1
- 4
- 19
- 32
- 45
- 56
- 2
- 3
- 5
- 6
- 20
- 21
- 33
- 34
- 46
- 57
- 88
- 89
- 90
- 91
- 99
- 100
- 106
- 107
- 113
- 117
- 118
+
+
76
-
-
-
-
-
-
-
-
- 7
- 22
- 35
- 47
- 8
- 9
- 23
- 24
- 36
- 37
- 54
- 55
- 48
- 92
- 93
- 101
- 102
- 108
- 109
- 114
- 115
- 116
-
- 76
-
-
-
-
-
-
-
-
-
-
- 10
- 25
- 38
- 11
- 15
- 26
- 29
- 39
- 42
- 12
- 13
- 14
- 16
- 17
- 27
- 28
- 30
- 40
- 41
- 43
- 49
- 50
- 51
- 52
- 94
- 95
- 96
- 97
- 98
- 103
- 104
- 105
- 110
- 111
- 112
-
- 76
-
-
-
-
-
-
+
+
+
+
+
@@ -1844,10 +666,10 @@
77
-
-
+
+
+
-
@@ -1856,10 +678,10 @@
78
-
-
+
+
+
-
@@ -1868,10 +690,13 @@
79
-
-
+
+
+
-
+
+
+
@@ -1880,10 +705,7 @@
80
-
-
-
-
+
@@ -1892,10 +714,10 @@
81
-
-
-
+
+
+
@@ -1904,9 +726,9 @@
82
-
-
+
+
@@ -1915,9 +737,9 @@
83
-
-
+
+
@@ -1926,70 +748,61 @@
84
-
-
+
+
-
+
-
+
-
+
-
-
-
-
-
-
-
-
+
-
+
-
- -->
-
+
-
+
-
+
-
+
true
@@ -1998,7 +811,7 @@
-
+
24025,24026,24027,24028,24029,24030,24031,24032,24033,24035,24039,24040
@@ -2007,7 +820,7 @@
-
+
29022
@@ -2016,165 +829,161 @@
-
+
-
-
+
1
20
-
+
-
+
21
40
-
+
-
+
41
50
-
+
-
+
51
60
-
+
-
+
61
70
-
+
-
+
71
75
-
+
-
+
76
99
-
+
-
1
20
+ WEEK
-
- Receive it when you kill any 150 monsters. Monsters that are level 6 or lower than the character are not counted.
+
+
21
40
+ WEEK
-
- Receive it when you kill any 200 monsters. Monsters that are level 6 or lower than the character are not counted.
+
+
41
50
+ WEEK
-
+
-
- Receive it when you kill any 250 monsters. Monsters that are level 6 or lower than the character are not counted.
+
+
51
60
+ WEEK
-
+
-
- Receive it when you kill any 300 monsters. Monsters that are level 6 or lower than the character are not counted.
+
+
61
70
+ WEEK
-
+
-
- Receive it when you kill any 400 monsters. Monsters that are level 6 or lower than the character are not counted.
+
+
71
75
+ WEEK
-
+
-
- Receive it when you kill any 500 monsters. Monsters that are level 6 or lower than the character are not counted.
+
+
76
99
+ WEEK
-
+
- -->
-
+
25794,25795,25796,25797,25798,25799,25800,25801,25802,25803,25804,25805,25806,25807,25808,25809,25810,25811,25812,25813
@@ -2205,19 +1014,18 @@
-
35
50
+ 20793
- -->
-
+
21658
@@ -2228,7 +1036,7 @@
-
+
21660
@@ -2236,10 +1044,10 @@
70
-
+
-
+
21021
@@ -2247,10 +1055,10 @@
75
-
+
-
+
21839,21834,21834
@@ -2261,101 +1069,102 @@
-
+
+ LEARN
- -->
-
76
99
+ WIND
-
- Go to the Earth Attribute Hinting Ground and attack monsters with Wind Attribute to deal them more damage. (Earth Attribute Hinting Ground: Wall of Argos) After completion, the Hunting Guide will continue.
+
+
76
99
+ EARTH
-
- Go to the Water Attribute Hinting Ground and attack monsters with Earth Attribute to deal them more damage. (Water Attribute Hinting Ground: Garden of Eva) After completion, the Hunting Guide will continue.
+
+
76
99
+ WATER
-
- Go to the Fire Attribute Hinting Ground and attack monsters with water Attribute to deal them more damage. (Fire Attribute Hinting Ground: Forge of Gods) After completion, the Hunting Guide will continue.
+
+
76
99
+ FIRE
- -->
-
+
FIRE
+ EVOLVE
- You can get a reward for evolving Water Spirit. Evolve Water Spirit up to Lv. 3. You can get a reward only once.
-
+
+
WATER
+ EVOLVE
- You can get a reward for evolving Wind Spirit. Evolve Wind Spirit up to Lv. 3. You can get a reward only once.
-
+
+
WIND
+ EVOLVE
- You can get a reward for evolving Earth Spirit. Evolve Earth Spirit up to Lv. 3. You can get a reward only once.
-
+
+
EARTH
+ EVOLVE
- -->
-
20792,20794,20795,20796,20797,20798,20799,20800,20801,20802,20803,20849,20995,21661,21662,21663,21664,21665,21666,21667,21668,21669,21670,21671,21672,21673,21674,21675,21676,21678,21685,21686,21761,21762,21763,21764,21765,21766,21767,21768,21769,21770,21771,21772,21773,21774,21775,21776,21777,21778,21779,21780,21781,21782,21783,21784,21785,21786,21787,21788,21789,21790,21791,21792,21793,21813,21814,21815,21816,21817,21818,21819,21820,21821,21822,21823,21824,21825,21826,21827,21828,21829,21830,21831,21832
76
@@ -2365,8 +1174,7 @@
- -->
-
+
20651,20652,20654,20656,20657,20658,24015,24016,24021,24022,20655,20771
@@ -2378,7 +1186,7 @@
-
+
21737,21738,21739,21740,21741,21746,21747,21748,21749,21750,21752,21753
@@ -2390,7 +1198,7 @@
-
+
21869,21870,21871,21876,21877,21878,21879,21888
@@ -2402,7 +1210,7 @@
-
+
21854,21855,81856,21857,21866,21867
@@ -2468,6 +1276,7 @@
+
@@ -2480,9 +1289,11 @@
+
+
-
+
21396,21397,21398,21399,21400,21401,21402,21403,21404,21405,21406,21407,21408,21409,21410,21411,21412,21413,21414,21415,21416,21417,21418,21419,21420,21421,21422,21423,21424,21425,21426,21427,21428,21429,21430,21431,21432,21433,21434,21435,21436,21437,21438,21439,21440
@@ -2490,7 +1301,51 @@
99
-
+
+
+
+
+
+
+ 20030,20310,20027,20024,20017,20038,20043,20050,20026,20029,20035,20042,20045,20051,20054,20060,20062,20064,20782,20053,20437,20058,20061,20436,20063,20439,20066,20438,20076
+ 20
+ 30
+
+
+
+
+
+
+
+
+ 20171,20197,20160,20198,20199,20200,20201,20083,20202,20144,21654,20225,20226,20227,20228,20157,20229,20230,20231,20232,20233,20234,20075,20079,20080,20081,20082,20084,20086,20087,20088,20089,20090,20248,20145,20249,20158,20176,20550,20551,20552,20553,20554
+ 31
+ 40
+
+
+
+
+
+
+
+
+ 20563,20564,20565,20566,20567,20235,20555,20556,20557,20558,20559,20560,21657,20561,20562,20675,20996,20997,20666,20998,20678,20999,20668,21000,20669,20589,20590,20591,20592,20593,20594,20595,20596,20597,20598,20599,21001,21002,21003,21004,21005,21006,21007,20976,21008,20975,21009,21010,20674,20974
+ 41
+ 60
+
+
+
+
+
+
+
+
+ 20681,20682,20683,20684,20685,20686,24014,20659,20660,20661,20662,20663,20664,20665,20667,20965,20970,20966,20971,20967,20968,20969,20972,20973,21620,21621,21622,21623,21624,21625,21626,21627,21628,21629,21630,21631,21632,21633,21634,21635,21636,21637
+ 61
+ 99
+
+
+
@@ -2498,7 +1353,7 @@
80
-
+
@@ -2507,7 +1362,7 @@
81
-
+
@@ -2516,7 +1371,7 @@
82
-
+
@@ -2525,7 +1380,7 @@
83
-
+
@@ -2534,7 +1389,7 @@
84
-
+
@@ -2543,7 +1398,7 @@
85
-
+
@@ -2552,7 +1407,7 @@
86
-
+
diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
index fcedb44015..d82ced4060 100644
--- a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
+++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
@@ -22,6 +22,7 @@ import org.l2jmobius.gameserver.handler.DailyMissionHandler;
import handlers.dailymissionhandlers.BossDailyMissionHandler;
import handlers.dailymissionhandlers.FishingDailyMissionHandler;
+import handlers.dailymissionhandlers.JoinClanDailyMissionHandler;
import handlers.dailymissionhandlers.LevelDailyMissionHandler;
import handlers.dailymissionhandlers.LoginMonthDailyMissionHandler;
import handlers.dailymissionhandlers.LoginWeekendDailyMissionHandler;
@@ -50,6 +51,7 @@ public class DailyMissionMasterHandler
DailyMissionHandler.getInstance().registerHandler("monster", MonsterDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("fishing", FishingDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("spirit", SpiritDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("joinclan", JoinClanDailyMissionHandler::new);
LOGGER.info(DailyMissionMasterHandler.class.getSimpleName() + ": Loaded " + DailyMissionHandler.getInstance().size() + " handlers.");
}
}
diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
new file mode 100644
index 0000000000..7af0642f51
--- /dev/null
+++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
@@ -0,0 +1,81 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package handlers.dailymissionhandlers;
+
+import java.util.function.Consumer;
+
+import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
+import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
+import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.Containers;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanCreate;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanJoin;
+import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
+
+/**
+ * @author kamikadzz
+ */
+public class JoinClanDailyMissionHandler extends AbstractDailyMissionHandler
+{
+ public JoinClanDailyMissionHandler(DailyMissionDataHolder holder)
+ {
+ super(holder);
+ }
+
+ @Override
+ public boolean isAvailable(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
+ return (entry != null) && (entry.getStatus() == DailyMissionStatus.AVAILABLE);
+ }
+
+ @Override
+ public void init()
+ {
+ Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_CLAN_JOIN, (Consumer) this::onPlayerClanJoin, this));
+ Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_CLAN_CREATE, (Consumer) this::onPlayerClanCreate, this));
+ }
+
+ private void onPlayerClanJoin(OnPlayerClanJoin event)
+ {
+ final DailyMissionPlayerEntry missionData = getPlayerEntry(event.getClanMember().getPlayer().getObjectId(), true);
+ processMission(missionData);
+ }
+
+ private void onPlayerClanCreate(OnPlayerClanCreate event)
+ {
+ final DailyMissionPlayerEntry missionData = getPlayerEntry(event.getPlayer().getObjectId(), true);
+ processMission(missionData);
+ }
+
+ private void processMission(DailyMissionPlayerEntry missionData)
+ {
+ if (missionData.getProgress() == 1)
+ {
+ missionData.setStatus(DailyMissionStatus.COMPLETED);
+ }
+ else
+ {
+ missionData.setProgress(1);
+ missionData.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(missionData);
+ }
+}
diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
index 84462adcb8..0da9875cd5 100644
--- a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
+++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
@@ -49,30 +49,14 @@ public class LoginMonthDailyMissionHandler extends AbstractDailyMissionHandler
Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_LOGIN, (OnPlayerLogin event) -> onPlayerLogin(event), this));
}
- @Override
- public void reset()
- {
- // Monthly rewards do not reset daily.
- }
-
private void onPlayerLogin(OnPlayerLogin event)
{
final DailyMissionPlayerEntry entry = getPlayerEntry(event.getPlayer().getObjectId(), true);
- final long lastCompleted = entry.getLastCompleted();
- if (lastCompleted == 0) // Initial entry.
- {
- entry.setLastCompleted(System.currentTimeMillis());
- }
- else if ((System.currentTimeMillis() - lastCompleted) > 2506000000L) // 2506000000L (29 day) delay.
+ if (entry.getStatus() != DailyMissionStatus.COMPLETED)
{
entry.setProgress(1);
entry.setStatus(DailyMissionStatus.AVAILABLE);
}
- else
- {
- entry.setProgress(0);
- entry.setStatus(DailyMissionStatus.NOT_AVAILABLE);
- }
storePlayerEntry(entry);
}
}
diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
index f7e5360c4e..18eaca0a48 100644
--- a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
+++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
@@ -51,27 +51,18 @@ public class LoginWeekendDailyMissionHandler extends AbstractDailyMissionHandler
Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_LOGIN, (OnPlayerLogin event) -> onPlayerLogin(event), this));
}
- @Override
- public void reset()
- {
- // Weekend rewards do not reset daily.
- }
-
private void onPlayerLogin(OnPlayerLogin event)
{
final DailyMissionPlayerEntry entry = getPlayerEntry(event.getPlayer().getObjectId(), true);
- final int currentDay = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
- final long lastCompleted = entry.getLastCompleted();
- if (((currentDay == Calendar.SATURDAY) || (currentDay == Calendar.SUNDAY)) // Reward only on weekend.
- && ((lastCompleted == 0) || ((System.currentTimeMillis() - lastCompleted) > 172800000))) // Initial entry or 172800000 (2 day) delay.
+ if (entry.getStatus() != DailyMissionStatus.COMPLETED)
{
- entry.setProgress(1);
- entry.setStatus(DailyMissionStatus.AVAILABLE);
- }
- else if (entry.getStatus() != DailyMissionStatus.AVAILABLE) // Not waiting to be rewarded.
- {
- entry.setProgress(0);
- entry.setStatus(DailyMissionStatus.NOT_AVAILABLE);
+ final int currentDay = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
+ if (((currentDay == Calendar.SATURDAY) || (currentDay == Calendar.SUNDAY) || (currentDay == Calendar.MONDAY)) //
+ && (Calendar.getInstance().get(Calendar.HOUR_OF_DAY) < 6) && (Calendar.getInstance().get(Calendar.MINUTE) < 30))
+ {
+ entry.setProgress(1);
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
}
storePlayerEntry(entry);
}
diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java
index a60d57f8f4..df04c9136c 100644
--- a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java
+++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java
@@ -22,6 +22,7 @@ import java.util.Set;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.enums.ElementalType;
import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
import org.l2jmobius.gameserver.model.CommandChannel;
import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
@@ -43,6 +44,7 @@ public class MonsterDailyMissionHandler extends AbstractDailyMissionHandler
private final int _minLevel;
private final int _maxLevel;
private final Set _ids = new HashSet<>();
+ private final ElementalType _element;
public MonsterDailyMissionHandler(DailyMissionDataHolder holder)
{
@@ -50,6 +52,7 @@ public class MonsterDailyMissionHandler extends AbstractDailyMissionHandler
_amount = holder.getRequiredCompletions();
_minLevel = holder.getParams().getInt("minLevel", 0);
_maxLevel = holder.getParams().getInt("maxLevel", Byte.MAX_VALUE);
+ _element = holder.getParams().getEnum("element", ElementalType.class, ElementalType.NONE);
final String ids = holder.getParams().getString("ids", "");
if (!ids.isEmpty())
{
@@ -106,12 +109,14 @@ public class MonsterDailyMissionHandler extends AbstractDailyMissionHandler
final Player player = event.getAttacker();
final int monsterLevel = monster.getLevel();
- if (_minLevel > 0)
+ if ((_minLevel > 0) && ((monsterLevel < _minLevel) || (monsterLevel > _maxLevel) || ((player.getLevel() - monsterLevel) > 5)))
{
- if ((monsterLevel < _minLevel) || (monsterLevel > _maxLevel) || ((player.getLevel() - monsterLevel) > 5))
- {
- return;
- }
+ return;
+ }
+
+ if ((_element != ElementalType.NONE) && (monster.getElementalSpiritType() != _element))
+ {
+ return;
}
final Party party = player.getParty();
diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/xsd/DailyMission.xsd b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/xsd/DailyMission.xsd
index 9da08900d0..35f2f6dc35 100644
--- a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/xsd/DailyMission.xsd
+++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/xsd/DailyMission.xsd
@@ -42,6 +42,7 @@
+
diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/enums/MissionResetType.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/enums/MissionResetType.java
new file mode 100644
index 0000000000..cb74a12d14
--- /dev/null
+++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/enums/MissionResetType.java
@@ -0,0 +1,28 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.l2jmobius.gameserver.enums;
+
+/**
+ * @author kamikadzz
+ */
+public enum MissionResetType
+{
+ DAY,
+ WEEK,
+ MONTH,
+ WEEKEND
+}
diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
index 30674c7646..11c6c718d4 100644
--- a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
+++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
@@ -16,11 +16,13 @@
*/
package org.l2jmobius.gameserver.model;
+import java.util.Calendar;
import java.util.List;
import java.util.function.Function;
import org.l2jmobius.gameserver.enums.ClassId;
import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.enums.MissionResetType;
import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
import org.l2jmobius.gameserver.handler.DailyMissionHandler;
import org.l2jmobius.gameserver.model.actor.Player;
@@ -42,6 +44,7 @@ public class DailyMissionDataHolder
private final boolean _isDualClassOnly;
private final boolean _isDisplayedWhenNotAvailable;
private final AbstractDailyMissionHandler _handler;
+ private final MissionResetType _missionResetSlot;
public DailyMissionDataHolder(StatSet set)
{
@@ -57,6 +60,7 @@ public class DailyMissionDataHolder
_isDualClassOnly = set.getBoolean("isDualClassOnly", false);
_isDisplayedWhenNotAvailable = set.getBoolean("isDisplayedWhenNotAvailable", true);
_handler = handler != null ? handler.apply(this) : null;
+ _missionResetSlot = set.getObject("duration", MissionResetType.class, MissionResetType.DAY);
}
public int getId()
@@ -166,7 +170,22 @@ public class DailyMissionDataHolder
{
if (_handler != null)
{
- _handler.reset();
+ if ((_missionResetSlot == MissionResetType.WEEK) && (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY))
+ {
+ _handler.reset();
+ }
+ else if ((_missionResetSlot == MissionResetType.MONTH) && (Calendar.getInstance().get(Calendar.DAY_OF_MONTH) == 1))
+ {
+ _handler.reset();
+ }
+ else if ((_missionResetSlot == MissionResetType.WEEKEND) && (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY))
+ {
+ _handler.reset();
+ }
+ else if (_dailyReset)
+ {
+ _handler.reset();
+ }
}
}
}
diff --git a/L2J_Mobius_Classic_2.9_SecretOfEmpire/dist/game/data/DailyMission.xml b/L2J_Mobius_Classic_2.9_SecretOfEmpire/dist/game/data/DailyMission.xml
index 107ec58f3d..feb350b25f 100644
--- a/L2J_Mobius_Classic_2.9_SecretOfEmpire/dist/game/data/DailyMission.xml
+++ b/L2J_Mobius_Classic_2.9_SecretOfEmpire/dist/game/data/DailyMission.xml
@@ -1931,14 +1931,14 @@
-
+
-
+
@@ -1959,15 +1959,13 @@
-
- -->
@@ -2102,79 +2100,84 @@
-
1
20
+ WEEK
-
- Receive it when you kill any 150 monsters. Monsters that are level 6 or lower than the character are not counted.
+
+
21
40
+ WEEK
-
- Receive it when you kill any 200 monsters. Monsters that are level 6 or lower than the character are not counted.
+
+
41
50
+ WEEK
-
+
-
- Receive it when you kill any 250 monsters. Monsters that are level 6 or lower than the character are not counted.
+
+
51
60
+ WEEK
-
+
-
- Receive it when you kill any 300 monsters. Monsters that are level 6 or lower than the character are not counted.
+
+
61
70
+ WEEK
-
+
-
- Receive it when you kill any 400 monsters. Monsters that are level 6 or lower than the character are not counted.
+
+
71
75
+ WEEK
-
+
-
- Receive it when you kill any 500 monsters. Monsters that are level 6 or lower than the character are not counted.
+
+
76
99
+ WEEK
-
+
- -->
-
+
25794,25795,25796,25797,25798,25799,25800,25801,25802,25803,25804,25805,25806,25807,25808,25809,25810,25811,25812,25813
@@ -2205,18 +2208,17 @@
-
35
50
+ 20793
- -->
@@ -2261,101 +2263,102 @@
-
+
+ LEARN
- -->
-
76
99
+ WIND
-
- Go to the Earth Attribute Hinting Ground and attack monsters with Wind Attribute to deal them more damage. (Earth Attribute Hinting Ground: Wall of Argos) After completion, the Hunting Guide will continue.
+
+
76
99
+ EARTH
-
- Go to the Water Attribute Hinting Ground and attack monsters with Earth Attribute to deal them more damage. (Water Attribute Hinting Ground: Garden of Eva) After completion, the Hunting Guide will continue.
+
+
76
99
+ WATER
-
- Go to the Fire Attribute Hinting Ground and attack monsters with water Attribute to deal them more damage. (Fire Attribute Hinting Ground: Forge of Gods) After completion, the Hunting Guide will continue.
+
+
76
99
+ FIRE
- -->
-
+
FIRE
+ EVOLVE
- You can get a reward for evolving Water Spirit. Evolve Water Spirit up to Lv. 3. You can get a reward only once.
-
+
+
WATER
+ EVOLVE
- You can get a reward for evolving Wind Spirit. Evolve Wind Spirit up to Lv. 3. You can get a reward only once.
-
+
+
WIND
+ EVOLVE
- You can get a reward for evolving Earth Spirit. Evolve Earth Spirit up to Lv. 3. You can get a reward only once.
-
+
+
EARTH
+ EVOLVE
- -->
-
20792,20794,20795,20796,20797,20798,20799,20800,20801,20802,20803,20849,20995,21661,21662,21663,21664,21665,21666,21667,21668,21669,21670,21671,21672,21673,21674,21675,21676,21678,21685,21686,21761,21762,21763,21764,21765,21766,21767,21768,21769,21770,21771,21772,21773,21774,21775,21776,21777,21778,21779,21780,21781,21782,21783,21784,21785,21786,21787,21788,21789,21790,21791,21792,21793,21813,21814,21815,21816,21817,21818,21819,21820,21821,21822,21823,21824,21825,21826,21827,21828,21829,21830,21831,21832
76
@@ -2365,8 +2368,7 @@
- -->
-
+
20651,20652,20654,20656,20657,20658,24015,24016,24021,24022,20655,20771
@@ -2493,69 +2495,66 @@
-
- When you reach Lv. 81, you will get 1 special token for learning certification skill.
-
+
+
81
-
+
- When you reach Lv. 82, you will get 1 special token for learning certification skill.
-
+
+
82
-
+
- When you reach Lv. 83, you will get 1 special token for learning certification skill.
-
+
+
83
-
+
- When you reach Lv. 84, you will get 1 special token for learning certification skill.
-
+
+
84
-
+
- When you reach Lv. 85, you will get 1 special token for learning certification skill.
-
+
+
85
-
+
- When you reach Lv. 86, you will get 1 special token for learning certification skill.
-
+
+
86
-
+
- -->
diff --git a/L2J_Mobius_Classic_2.9_SecretOfEmpire/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java b/L2J_Mobius_Classic_2.9_SecretOfEmpire/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
index fcedb44015..d82ced4060 100644
--- a/L2J_Mobius_Classic_2.9_SecretOfEmpire/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
+++ b/L2J_Mobius_Classic_2.9_SecretOfEmpire/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
@@ -22,6 +22,7 @@ import org.l2jmobius.gameserver.handler.DailyMissionHandler;
import handlers.dailymissionhandlers.BossDailyMissionHandler;
import handlers.dailymissionhandlers.FishingDailyMissionHandler;
+import handlers.dailymissionhandlers.JoinClanDailyMissionHandler;
import handlers.dailymissionhandlers.LevelDailyMissionHandler;
import handlers.dailymissionhandlers.LoginMonthDailyMissionHandler;
import handlers.dailymissionhandlers.LoginWeekendDailyMissionHandler;
@@ -50,6 +51,7 @@ public class DailyMissionMasterHandler
DailyMissionHandler.getInstance().registerHandler("monster", MonsterDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("fishing", FishingDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("spirit", SpiritDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("joinclan", JoinClanDailyMissionHandler::new);
LOGGER.info(DailyMissionMasterHandler.class.getSimpleName() + ": Loaded " + DailyMissionHandler.getInstance().size() + " handlers.");
}
}
diff --git a/L2J_Mobius_Classic_2.9_SecretOfEmpire/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java b/L2J_Mobius_Classic_2.9_SecretOfEmpire/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
new file mode 100644
index 0000000000..7af0642f51
--- /dev/null
+++ b/L2J_Mobius_Classic_2.9_SecretOfEmpire/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
@@ -0,0 +1,81 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package handlers.dailymissionhandlers;
+
+import java.util.function.Consumer;
+
+import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
+import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
+import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.Containers;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanCreate;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanJoin;
+import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
+
+/**
+ * @author kamikadzz
+ */
+public class JoinClanDailyMissionHandler extends AbstractDailyMissionHandler
+{
+ public JoinClanDailyMissionHandler(DailyMissionDataHolder holder)
+ {
+ super(holder);
+ }
+
+ @Override
+ public boolean isAvailable(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
+ return (entry != null) && (entry.getStatus() == DailyMissionStatus.AVAILABLE);
+ }
+
+ @Override
+ public void init()
+ {
+ Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_CLAN_JOIN, (Consumer) this::onPlayerClanJoin, this));
+ Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_CLAN_CREATE, (Consumer) this::onPlayerClanCreate, this));
+ }
+
+ private void onPlayerClanJoin(OnPlayerClanJoin event)
+ {
+ final DailyMissionPlayerEntry missionData = getPlayerEntry(event.getClanMember().getPlayer().getObjectId(), true);
+ processMission(missionData);
+ }
+
+ private void onPlayerClanCreate(OnPlayerClanCreate event)
+ {
+ final DailyMissionPlayerEntry missionData = getPlayerEntry(event.getPlayer().getObjectId(), true);
+ processMission(missionData);
+ }
+
+ private void processMission(DailyMissionPlayerEntry missionData)
+ {
+ if (missionData.getProgress() == 1)
+ {
+ missionData.setStatus(DailyMissionStatus.COMPLETED);
+ }
+ else
+ {
+ missionData.setProgress(1);
+ missionData.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(missionData);
+ }
+}
diff --git a/L2J_Mobius_Classic_2.9_SecretOfEmpire/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java b/L2J_Mobius_Classic_2.9_SecretOfEmpire/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
index 84462adcb8..0da9875cd5 100644
--- a/L2J_Mobius_Classic_2.9_SecretOfEmpire/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
+++ b/L2J_Mobius_Classic_2.9_SecretOfEmpire/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
@@ -49,30 +49,14 @@ public class LoginMonthDailyMissionHandler extends AbstractDailyMissionHandler
Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_LOGIN, (OnPlayerLogin event) -> onPlayerLogin(event), this));
}
- @Override
- public void reset()
- {
- // Monthly rewards do not reset daily.
- }
-
private void onPlayerLogin(OnPlayerLogin event)
{
final DailyMissionPlayerEntry entry = getPlayerEntry(event.getPlayer().getObjectId(), true);
- final long lastCompleted = entry.getLastCompleted();
- if (lastCompleted == 0) // Initial entry.
- {
- entry.setLastCompleted(System.currentTimeMillis());
- }
- else if ((System.currentTimeMillis() - lastCompleted) > 2506000000L) // 2506000000L (29 day) delay.
+ if (entry.getStatus() != DailyMissionStatus.COMPLETED)
{
entry.setProgress(1);
entry.setStatus(DailyMissionStatus.AVAILABLE);
}
- else
- {
- entry.setProgress(0);
- entry.setStatus(DailyMissionStatus.NOT_AVAILABLE);
- }
storePlayerEntry(entry);
}
}
diff --git a/L2J_Mobius_Classic_2.9_SecretOfEmpire/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java b/L2J_Mobius_Classic_2.9_SecretOfEmpire/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
index f7e5360c4e..18eaca0a48 100644
--- a/L2J_Mobius_Classic_2.9_SecretOfEmpire/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
+++ b/L2J_Mobius_Classic_2.9_SecretOfEmpire/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
@@ -51,27 +51,18 @@ public class LoginWeekendDailyMissionHandler extends AbstractDailyMissionHandler
Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_LOGIN, (OnPlayerLogin event) -> onPlayerLogin(event), this));
}
- @Override
- public void reset()
- {
- // Weekend rewards do not reset daily.
- }
-
private void onPlayerLogin(OnPlayerLogin event)
{
final DailyMissionPlayerEntry entry = getPlayerEntry(event.getPlayer().getObjectId(), true);
- final int currentDay = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
- final long lastCompleted = entry.getLastCompleted();
- if (((currentDay == Calendar.SATURDAY) || (currentDay == Calendar.SUNDAY)) // Reward only on weekend.
- && ((lastCompleted == 0) || ((System.currentTimeMillis() - lastCompleted) > 172800000))) // Initial entry or 172800000 (2 day) delay.
+ if (entry.getStatus() != DailyMissionStatus.COMPLETED)
{
- entry.setProgress(1);
- entry.setStatus(DailyMissionStatus.AVAILABLE);
- }
- else if (entry.getStatus() != DailyMissionStatus.AVAILABLE) // Not waiting to be rewarded.
- {
- entry.setProgress(0);
- entry.setStatus(DailyMissionStatus.NOT_AVAILABLE);
+ final int currentDay = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
+ if (((currentDay == Calendar.SATURDAY) || (currentDay == Calendar.SUNDAY) || (currentDay == Calendar.MONDAY)) //
+ && (Calendar.getInstance().get(Calendar.HOUR_OF_DAY) < 6) && (Calendar.getInstance().get(Calendar.MINUTE) < 30))
+ {
+ entry.setProgress(1);
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
}
storePlayerEntry(entry);
}
diff --git a/L2J_Mobius_Classic_2.9_SecretOfEmpire/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java b/L2J_Mobius_Classic_2.9_SecretOfEmpire/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java
index a60d57f8f4..df04c9136c 100644
--- a/L2J_Mobius_Classic_2.9_SecretOfEmpire/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java
+++ b/L2J_Mobius_Classic_2.9_SecretOfEmpire/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java
@@ -22,6 +22,7 @@ import java.util.Set;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.enums.ElementalType;
import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
import org.l2jmobius.gameserver.model.CommandChannel;
import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
@@ -43,6 +44,7 @@ public class MonsterDailyMissionHandler extends AbstractDailyMissionHandler
private final int _minLevel;
private final int _maxLevel;
private final Set _ids = new HashSet<>();
+ private final ElementalType _element;
public MonsterDailyMissionHandler(DailyMissionDataHolder holder)
{
@@ -50,6 +52,7 @@ public class MonsterDailyMissionHandler extends AbstractDailyMissionHandler
_amount = holder.getRequiredCompletions();
_minLevel = holder.getParams().getInt("minLevel", 0);
_maxLevel = holder.getParams().getInt("maxLevel", Byte.MAX_VALUE);
+ _element = holder.getParams().getEnum("element", ElementalType.class, ElementalType.NONE);
final String ids = holder.getParams().getString("ids", "");
if (!ids.isEmpty())
{
@@ -106,12 +109,14 @@ public class MonsterDailyMissionHandler extends AbstractDailyMissionHandler
final Player player = event.getAttacker();
final int monsterLevel = monster.getLevel();
- if (_minLevel > 0)
+ if ((_minLevel > 0) && ((monsterLevel < _minLevel) || (monsterLevel > _maxLevel) || ((player.getLevel() - monsterLevel) > 5)))
{
- if ((monsterLevel < _minLevel) || (monsterLevel > _maxLevel) || ((player.getLevel() - monsterLevel) > 5))
- {
- return;
- }
+ return;
+ }
+
+ if ((_element != ElementalType.NONE) && (monster.getElementalSpiritType() != _element))
+ {
+ return;
}
final Party party = player.getParty();
diff --git a/L2J_Mobius_Classic_2.9_SecretOfEmpire/dist/game/data/xsd/DailyMission.xsd b/L2J_Mobius_Classic_2.9_SecretOfEmpire/dist/game/data/xsd/DailyMission.xsd
index 9da08900d0..35f2f6dc35 100644
--- a/L2J_Mobius_Classic_2.9_SecretOfEmpire/dist/game/data/xsd/DailyMission.xsd
+++ b/L2J_Mobius_Classic_2.9_SecretOfEmpire/dist/game/data/xsd/DailyMission.xsd
@@ -42,6 +42,7 @@
+
diff --git a/L2J_Mobius_Classic_2.9_SecretOfEmpire/java/org/l2jmobius/gameserver/enums/MissionResetType.java b/L2J_Mobius_Classic_2.9_SecretOfEmpire/java/org/l2jmobius/gameserver/enums/MissionResetType.java
new file mode 100644
index 0000000000..cb74a12d14
--- /dev/null
+++ b/L2J_Mobius_Classic_2.9_SecretOfEmpire/java/org/l2jmobius/gameserver/enums/MissionResetType.java
@@ -0,0 +1,28 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.l2jmobius.gameserver.enums;
+
+/**
+ * @author kamikadzz
+ */
+public enum MissionResetType
+{
+ DAY,
+ WEEK,
+ MONTH,
+ WEEKEND
+}
diff --git a/L2J_Mobius_Classic_2.9_SecretOfEmpire/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java b/L2J_Mobius_Classic_2.9_SecretOfEmpire/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
index 30674c7646..11c6c718d4 100644
--- a/L2J_Mobius_Classic_2.9_SecretOfEmpire/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
+++ b/L2J_Mobius_Classic_2.9_SecretOfEmpire/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
@@ -16,11 +16,13 @@
*/
package org.l2jmobius.gameserver.model;
+import java.util.Calendar;
import java.util.List;
import java.util.function.Function;
import org.l2jmobius.gameserver.enums.ClassId;
import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.enums.MissionResetType;
import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
import org.l2jmobius.gameserver.handler.DailyMissionHandler;
import org.l2jmobius.gameserver.model.actor.Player;
@@ -42,6 +44,7 @@ public class DailyMissionDataHolder
private final boolean _isDualClassOnly;
private final boolean _isDisplayedWhenNotAvailable;
private final AbstractDailyMissionHandler _handler;
+ private final MissionResetType _missionResetSlot;
public DailyMissionDataHolder(StatSet set)
{
@@ -57,6 +60,7 @@ public class DailyMissionDataHolder
_isDualClassOnly = set.getBoolean("isDualClassOnly", false);
_isDisplayedWhenNotAvailable = set.getBoolean("isDisplayedWhenNotAvailable", true);
_handler = handler != null ? handler.apply(this) : null;
+ _missionResetSlot = set.getObject("duration", MissionResetType.class, MissionResetType.DAY);
}
public int getId()
@@ -166,7 +170,22 @@ public class DailyMissionDataHolder
{
if (_handler != null)
{
- _handler.reset();
+ if ((_missionResetSlot == MissionResetType.WEEK) && (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY))
+ {
+ _handler.reset();
+ }
+ else if ((_missionResetSlot == MissionResetType.MONTH) && (Calendar.getInstance().get(Calendar.DAY_OF_MONTH) == 1))
+ {
+ _handler.reset();
+ }
+ else if ((_missionResetSlot == MissionResetType.WEEKEND) && (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY))
+ {
+ _handler.reset();
+ }
+ else if (_dailyReset)
+ {
+ _handler.reset();
+ }
}
}
}
diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/DailyMission.xml b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/DailyMission.xml
index b3b3f5ddd4..217d7cbe6c 100644
--- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/DailyMission.xml
+++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/DailyMission.xml
@@ -91,7 +91,7 @@
-->
-
+
@@ -108,18 +108,13 @@
-
+
- -->
@@ -838,6 +833,68 @@
+
+
+ 80
+
+
+
+
+
+
+
+
+ 81
+
+
+
+
+
+
+
+
+ 82
+
+
+
+
+
+
+
+
+ 83
+
+
+
+
+
+
+
+
+ 84
+
+
+
+
+
+
+
+
+ 85
+
+
+
+
+
+
+
+
+ 86
+
+
+
+
+
diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
index fcedb44015..d82ced4060 100644
--- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
+++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
@@ -22,6 +22,7 @@ import org.l2jmobius.gameserver.handler.DailyMissionHandler;
import handlers.dailymissionhandlers.BossDailyMissionHandler;
import handlers.dailymissionhandlers.FishingDailyMissionHandler;
+import handlers.dailymissionhandlers.JoinClanDailyMissionHandler;
import handlers.dailymissionhandlers.LevelDailyMissionHandler;
import handlers.dailymissionhandlers.LoginMonthDailyMissionHandler;
import handlers.dailymissionhandlers.LoginWeekendDailyMissionHandler;
@@ -50,6 +51,7 @@ public class DailyMissionMasterHandler
DailyMissionHandler.getInstance().registerHandler("monster", MonsterDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("fishing", FishingDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("spirit", SpiritDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("joinclan", JoinClanDailyMissionHandler::new);
LOGGER.info(DailyMissionMasterHandler.class.getSimpleName() + ": Loaded " + DailyMissionHandler.getInstance().size() + " handlers.");
}
}
diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
new file mode 100644
index 0000000000..7af0642f51
--- /dev/null
+++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
@@ -0,0 +1,81 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package handlers.dailymissionhandlers;
+
+import java.util.function.Consumer;
+
+import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
+import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
+import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.Containers;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanCreate;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanJoin;
+import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
+
+/**
+ * @author kamikadzz
+ */
+public class JoinClanDailyMissionHandler extends AbstractDailyMissionHandler
+{
+ public JoinClanDailyMissionHandler(DailyMissionDataHolder holder)
+ {
+ super(holder);
+ }
+
+ @Override
+ public boolean isAvailable(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
+ return (entry != null) && (entry.getStatus() == DailyMissionStatus.AVAILABLE);
+ }
+
+ @Override
+ public void init()
+ {
+ Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_CLAN_JOIN, (Consumer) this::onPlayerClanJoin, this));
+ Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_CLAN_CREATE, (Consumer) this::onPlayerClanCreate, this));
+ }
+
+ private void onPlayerClanJoin(OnPlayerClanJoin event)
+ {
+ final DailyMissionPlayerEntry missionData = getPlayerEntry(event.getClanMember().getPlayer().getObjectId(), true);
+ processMission(missionData);
+ }
+
+ private void onPlayerClanCreate(OnPlayerClanCreate event)
+ {
+ final DailyMissionPlayerEntry missionData = getPlayerEntry(event.getPlayer().getObjectId(), true);
+ processMission(missionData);
+ }
+
+ private void processMission(DailyMissionPlayerEntry missionData)
+ {
+ if (missionData.getProgress() == 1)
+ {
+ missionData.setStatus(DailyMissionStatus.COMPLETED);
+ }
+ else
+ {
+ missionData.setProgress(1);
+ missionData.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(missionData);
+ }
+}
diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
index 84462adcb8..0da9875cd5 100644
--- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
+++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
@@ -49,30 +49,14 @@ public class LoginMonthDailyMissionHandler extends AbstractDailyMissionHandler
Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_LOGIN, (OnPlayerLogin event) -> onPlayerLogin(event), this));
}
- @Override
- public void reset()
- {
- // Monthly rewards do not reset daily.
- }
-
private void onPlayerLogin(OnPlayerLogin event)
{
final DailyMissionPlayerEntry entry = getPlayerEntry(event.getPlayer().getObjectId(), true);
- final long lastCompleted = entry.getLastCompleted();
- if (lastCompleted == 0) // Initial entry.
- {
- entry.setLastCompleted(System.currentTimeMillis());
- }
- else if ((System.currentTimeMillis() - lastCompleted) > 2506000000L) // 2506000000L (29 day) delay.
+ if (entry.getStatus() != DailyMissionStatus.COMPLETED)
{
entry.setProgress(1);
entry.setStatus(DailyMissionStatus.AVAILABLE);
}
- else
- {
- entry.setProgress(0);
- entry.setStatus(DailyMissionStatus.NOT_AVAILABLE);
- }
storePlayerEntry(entry);
}
}
diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
index f7e5360c4e..18eaca0a48 100644
--- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
+++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
@@ -51,27 +51,18 @@ public class LoginWeekendDailyMissionHandler extends AbstractDailyMissionHandler
Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_LOGIN, (OnPlayerLogin event) -> onPlayerLogin(event), this));
}
- @Override
- public void reset()
- {
- // Weekend rewards do not reset daily.
- }
-
private void onPlayerLogin(OnPlayerLogin event)
{
final DailyMissionPlayerEntry entry = getPlayerEntry(event.getPlayer().getObjectId(), true);
- final int currentDay = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
- final long lastCompleted = entry.getLastCompleted();
- if (((currentDay == Calendar.SATURDAY) || (currentDay == Calendar.SUNDAY)) // Reward only on weekend.
- && ((lastCompleted == 0) || ((System.currentTimeMillis() - lastCompleted) > 172800000))) // Initial entry or 172800000 (2 day) delay.
+ if (entry.getStatus() != DailyMissionStatus.COMPLETED)
{
- entry.setProgress(1);
- entry.setStatus(DailyMissionStatus.AVAILABLE);
- }
- else if (entry.getStatus() != DailyMissionStatus.AVAILABLE) // Not waiting to be rewarded.
- {
- entry.setProgress(0);
- entry.setStatus(DailyMissionStatus.NOT_AVAILABLE);
+ final int currentDay = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
+ if (((currentDay == Calendar.SATURDAY) || (currentDay == Calendar.SUNDAY) || (currentDay == Calendar.MONDAY)) //
+ && (Calendar.getInstance().get(Calendar.HOUR_OF_DAY) < 6) && (Calendar.getInstance().get(Calendar.MINUTE) < 30))
+ {
+ entry.setProgress(1);
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
}
storePlayerEntry(entry);
}
diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java
index a60d57f8f4..df04c9136c 100644
--- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java
+++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java
@@ -22,6 +22,7 @@ import java.util.Set;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.enums.ElementalType;
import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
import org.l2jmobius.gameserver.model.CommandChannel;
import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
@@ -43,6 +44,7 @@ public class MonsterDailyMissionHandler extends AbstractDailyMissionHandler
private final int _minLevel;
private final int _maxLevel;
private final Set _ids = new HashSet<>();
+ private final ElementalType _element;
public MonsterDailyMissionHandler(DailyMissionDataHolder holder)
{
@@ -50,6 +52,7 @@ public class MonsterDailyMissionHandler extends AbstractDailyMissionHandler
_amount = holder.getRequiredCompletions();
_minLevel = holder.getParams().getInt("minLevel", 0);
_maxLevel = holder.getParams().getInt("maxLevel", Byte.MAX_VALUE);
+ _element = holder.getParams().getEnum("element", ElementalType.class, ElementalType.NONE);
final String ids = holder.getParams().getString("ids", "");
if (!ids.isEmpty())
{
@@ -106,12 +109,14 @@ public class MonsterDailyMissionHandler extends AbstractDailyMissionHandler
final Player player = event.getAttacker();
final int monsterLevel = monster.getLevel();
- if (_minLevel > 0)
+ if ((_minLevel > 0) && ((monsterLevel < _minLevel) || (monsterLevel > _maxLevel) || ((player.getLevel() - monsterLevel) > 5)))
{
- if ((monsterLevel < _minLevel) || (monsterLevel > _maxLevel) || ((player.getLevel() - monsterLevel) > 5))
- {
- return;
- }
+ return;
+ }
+
+ if ((_element != ElementalType.NONE) && (monster.getElementalSpiritType() != _element))
+ {
+ return;
}
final Party party = player.getParty();
diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/xsd/DailyMission.xsd b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/xsd/DailyMission.xsd
index 9da08900d0..35f2f6dc35 100644
--- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/xsd/DailyMission.xsd
+++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/xsd/DailyMission.xsd
@@ -42,6 +42,7 @@
+
diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/enums/MissionResetType.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/enums/MissionResetType.java
new file mode 100644
index 0000000000..cb74a12d14
--- /dev/null
+++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/enums/MissionResetType.java
@@ -0,0 +1,28 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.l2jmobius.gameserver.enums;
+
+/**
+ * @author kamikadzz
+ */
+public enum MissionResetType
+{
+ DAY,
+ WEEK,
+ MONTH,
+ WEEKEND
+}
diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
index 30674c7646..11c6c718d4 100644
--- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
+++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
@@ -16,11 +16,13 @@
*/
package org.l2jmobius.gameserver.model;
+import java.util.Calendar;
import java.util.List;
import java.util.function.Function;
import org.l2jmobius.gameserver.enums.ClassId;
import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.enums.MissionResetType;
import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
import org.l2jmobius.gameserver.handler.DailyMissionHandler;
import org.l2jmobius.gameserver.model.actor.Player;
@@ -42,6 +44,7 @@ public class DailyMissionDataHolder
private final boolean _isDualClassOnly;
private final boolean _isDisplayedWhenNotAvailable;
private final AbstractDailyMissionHandler _handler;
+ private final MissionResetType _missionResetSlot;
public DailyMissionDataHolder(StatSet set)
{
@@ -57,6 +60,7 @@ public class DailyMissionDataHolder
_isDualClassOnly = set.getBoolean("isDualClassOnly", false);
_isDisplayedWhenNotAvailable = set.getBoolean("isDisplayedWhenNotAvailable", true);
_handler = handler != null ? handler.apply(this) : null;
+ _missionResetSlot = set.getObject("duration", MissionResetType.class, MissionResetType.DAY);
}
public int getId()
@@ -166,7 +170,22 @@ public class DailyMissionDataHolder
{
if (_handler != null)
{
- _handler.reset();
+ if ((_missionResetSlot == MissionResetType.WEEK) && (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY))
+ {
+ _handler.reset();
+ }
+ else if ((_missionResetSlot == MissionResetType.MONTH) && (Calendar.getInstance().get(Calendar.DAY_OF_MONTH) == 1))
+ {
+ _handler.reset();
+ }
+ else if ((_missionResetSlot == MissionResetType.WEEKEND) && (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY))
+ {
+ _handler.reset();
+ }
+ else if (_dailyReset)
+ {
+ _handler.reset();
+ }
}
}
}
diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
index 70bd0e70c2..2568d12ae3 100644
--- a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
+++ b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
@@ -22,6 +22,7 @@ import org.l2jmobius.gameserver.handler.DailyMissionHandler;
import handlers.dailymissionhandlers.BossDailyMissionHandler;
import handlers.dailymissionhandlers.FishingDailyMissionHandler;
+import handlers.dailymissionhandlers.JoinClanDailyMissionHandler;
import handlers.dailymissionhandlers.LevelDailyMissionHandler;
import handlers.dailymissionhandlers.LoginMonthDailyMissionHandler;
import handlers.dailymissionhandlers.LoginWeekendDailyMissionHandler;
@@ -46,6 +47,7 @@ public class DailyMissionMasterHandler
DailyMissionHandler.getInstance().registerHandler("siege", SiegeDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("boss", BossDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("fishing", FishingDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("joinclan", JoinClanDailyMissionHandler::new);
LOGGER.info(DailyMissionMasterHandler.class.getSimpleName() + ": Loaded " + DailyMissionHandler.getInstance().size() + " handlers.");
}
}
diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
new file mode 100644
index 0000000000..7af0642f51
--- /dev/null
+++ b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
@@ -0,0 +1,81 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package handlers.dailymissionhandlers;
+
+import java.util.function.Consumer;
+
+import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
+import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
+import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.Containers;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanCreate;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanJoin;
+import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
+
+/**
+ * @author kamikadzz
+ */
+public class JoinClanDailyMissionHandler extends AbstractDailyMissionHandler
+{
+ public JoinClanDailyMissionHandler(DailyMissionDataHolder holder)
+ {
+ super(holder);
+ }
+
+ @Override
+ public boolean isAvailable(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
+ return (entry != null) && (entry.getStatus() == DailyMissionStatus.AVAILABLE);
+ }
+
+ @Override
+ public void init()
+ {
+ Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_CLAN_JOIN, (Consumer) this::onPlayerClanJoin, this));
+ Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_CLAN_CREATE, (Consumer) this::onPlayerClanCreate, this));
+ }
+
+ private void onPlayerClanJoin(OnPlayerClanJoin event)
+ {
+ final DailyMissionPlayerEntry missionData = getPlayerEntry(event.getClanMember().getPlayer().getObjectId(), true);
+ processMission(missionData);
+ }
+
+ private void onPlayerClanCreate(OnPlayerClanCreate event)
+ {
+ final DailyMissionPlayerEntry missionData = getPlayerEntry(event.getPlayer().getObjectId(), true);
+ processMission(missionData);
+ }
+
+ private void processMission(DailyMissionPlayerEntry missionData)
+ {
+ if (missionData.getProgress() == 1)
+ {
+ missionData.setStatus(DailyMissionStatus.COMPLETED);
+ }
+ else
+ {
+ missionData.setProgress(1);
+ missionData.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(missionData);
+ }
+}
diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
index 84462adcb8..0da9875cd5 100644
--- a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
+++ b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
@@ -49,30 +49,14 @@ public class LoginMonthDailyMissionHandler extends AbstractDailyMissionHandler
Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_LOGIN, (OnPlayerLogin event) -> onPlayerLogin(event), this));
}
- @Override
- public void reset()
- {
- // Monthly rewards do not reset daily.
- }
-
private void onPlayerLogin(OnPlayerLogin event)
{
final DailyMissionPlayerEntry entry = getPlayerEntry(event.getPlayer().getObjectId(), true);
- final long lastCompleted = entry.getLastCompleted();
- if (lastCompleted == 0) // Initial entry.
- {
- entry.setLastCompleted(System.currentTimeMillis());
- }
- else if ((System.currentTimeMillis() - lastCompleted) > 2506000000L) // 2506000000L (29 day) delay.
+ if (entry.getStatus() != DailyMissionStatus.COMPLETED)
{
entry.setProgress(1);
entry.setStatus(DailyMissionStatus.AVAILABLE);
}
- else
- {
- entry.setProgress(0);
- entry.setStatus(DailyMissionStatus.NOT_AVAILABLE);
- }
storePlayerEntry(entry);
}
}
diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
index f7e5360c4e..18eaca0a48 100644
--- a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
+++ b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
@@ -51,27 +51,18 @@ public class LoginWeekendDailyMissionHandler extends AbstractDailyMissionHandler
Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_LOGIN, (OnPlayerLogin event) -> onPlayerLogin(event), this));
}
- @Override
- public void reset()
- {
- // Weekend rewards do not reset daily.
- }
-
private void onPlayerLogin(OnPlayerLogin event)
{
final DailyMissionPlayerEntry entry = getPlayerEntry(event.getPlayer().getObjectId(), true);
- final int currentDay = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
- final long lastCompleted = entry.getLastCompleted();
- if (((currentDay == Calendar.SATURDAY) || (currentDay == Calendar.SUNDAY)) // Reward only on weekend.
- && ((lastCompleted == 0) || ((System.currentTimeMillis() - lastCompleted) > 172800000))) // Initial entry or 172800000 (2 day) delay.
+ if (entry.getStatus() != DailyMissionStatus.COMPLETED)
{
- entry.setProgress(1);
- entry.setStatus(DailyMissionStatus.AVAILABLE);
- }
- else if (entry.getStatus() != DailyMissionStatus.AVAILABLE) // Not waiting to be rewarded.
- {
- entry.setProgress(0);
- entry.setStatus(DailyMissionStatus.NOT_AVAILABLE);
+ final int currentDay = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
+ if (((currentDay == Calendar.SATURDAY) || (currentDay == Calendar.SUNDAY) || (currentDay == Calendar.MONDAY)) //
+ && (Calendar.getInstance().get(Calendar.HOUR_OF_DAY) < 6) && (Calendar.getInstance().get(Calendar.MINUTE) < 30))
+ {
+ entry.setProgress(1);
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
}
storePlayerEntry(entry);
}
diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/xsd/DailyMission.xsd b/L2J_Mobius_Classic_Interlude/dist/game/data/xsd/DailyMission.xsd
index 9da08900d0..35f2f6dc35 100644
--- a/L2J_Mobius_Classic_Interlude/dist/game/data/xsd/DailyMission.xsd
+++ b/L2J_Mobius_Classic_Interlude/dist/game/data/xsd/DailyMission.xsd
@@ -42,6 +42,7 @@
+
diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/enums/MissionResetType.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/enums/MissionResetType.java
new file mode 100644
index 0000000000..cb74a12d14
--- /dev/null
+++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/enums/MissionResetType.java
@@ -0,0 +1,28 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.l2jmobius.gameserver.enums;
+
+/**
+ * @author kamikadzz
+ */
+public enum MissionResetType
+{
+ DAY,
+ WEEK,
+ MONTH,
+ WEEKEND
+}
diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
index 30674c7646..11c6c718d4 100644
--- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
+++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
@@ -16,11 +16,13 @@
*/
package org.l2jmobius.gameserver.model;
+import java.util.Calendar;
import java.util.List;
import java.util.function.Function;
import org.l2jmobius.gameserver.enums.ClassId;
import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.enums.MissionResetType;
import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
import org.l2jmobius.gameserver.handler.DailyMissionHandler;
import org.l2jmobius.gameserver.model.actor.Player;
@@ -42,6 +44,7 @@ public class DailyMissionDataHolder
private final boolean _isDualClassOnly;
private final boolean _isDisplayedWhenNotAvailable;
private final AbstractDailyMissionHandler _handler;
+ private final MissionResetType _missionResetSlot;
public DailyMissionDataHolder(StatSet set)
{
@@ -57,6 +60,7 @@ public class DailyMissionDataHolder
_isDualClassOnly = set.getBoolean("isDualClassOnly", false);
_isDisplayedWhenNotAvailable = set.getBoolean("isDisplayedWhenNotAvailable", true);
_handler = handler != null ? handler.apply(this) : null;
+ _missionResetSlot = set.getObject("duration", MissionResetType.class, MissionResetType.DAY);
}
public int getId()
@@ -166,7 +170,22 @@ public class DailyMissionDataHolder
{
if (_handler != null)
{
- _handler.reset();
+ if ((_missionResetSlot == MissionResetType.WEEK) && (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY))
+ {
+ _handler.reset();
+ }
+ else if ((_missionResetSlot == MissionResetType.MONTH) && (Calendar.getInstance().get(Calendar.DAY_OF_MONTH) == 1))
+ {
+ _handler.reset();
+ }
+ else if ((_missionResetSlot == MissionResetType.WEEKEND) && (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY))
+ {
+ _handler.reset();
+ }
+ else if (_dailyReset)
+ {
+ _handler.reset();
+ }
}
}
}
diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/DailyMission.xml b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/DailyMission.xml
index a5568da03b..b16335fc65 100644
--- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/DailyMission.xml
+++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/DailyMission.xml
@@ -72,7 +72,7 @@
-
+
diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
index fcedb44015..d82ced4060 100644
--- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
+++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
@@ -22,6 +22,7 @@ import org.l2jmobius.gameserver.handler.DailyMissionHandler;
import handlers.dailymissionhandlers.BossDailyMissionHandler;
import handlers.dailymissionhandlers.FishingDailyMissionHandler;
+import handlers.dailymissionhandlers.JoinClanDailyMissionHandler;
import handlers.dailymissionhandlers.LevelDailyMissionHandler;
import handlers.dailymissionhandlers.LoginMonthDailyMissionHandler;
import handlers.dailymissionhandlers.LoginWeekendDailyMissionHandler;
@@ -50,6 +51,7 @@ public class DailyMissionMasterHandler
DailyMissionHandler.getInstance().registerHandler("monster", MonsterDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("fishing", FishingDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("spirit", SpiritDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("joinclan", JoinClanDailyMissionHandler::new);
LOGGER.info(DailyMissionMasterHandler.class.getSimpleName() + ": Loaded " + DailyMissionHandler.getInstance().size() + " handlers.");
}
}
diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
new file mode 100644
index 0000000000..7af0642f51
--- /dev/null
+++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/handlers/dailymissionhandlers/JoinClanDailyMissionHandler.java
@@ -0,0 +1,81 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package handlers.dailymissionhandlers;
+
+import java.util.function.Consumer;
+
+import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
+import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
+import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.Containers;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanCreate;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerClanJoin;
+import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
+
+/**
+ * @author kamikadzz
+ */
+public class JoinClanDailyMissionHandler extends AbstractDailyMissionHandler
+{
+ public JoinClanDailyMissionHandler(DailyMissionDataHolder holder)
+ {
+ super(holder);
+ }
+
+ @Override
+ public boolean isAvailable(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
+ return (entry != null) && (entry.getStatus() == DailyMissionStatus.AVAILABLE);
+ }
+
+ @Override
+ public void init()
+ {
+ Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_CLAN_JOIN, (Consumer) this::onPlayerClanJoin, this));
+ Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_CLAN_CREATE, (Consumer) this::onPlayerClanCreate, this));
+ }
+
+ private void onPlayerClanJoin(OnPlayerClanJoin event)
+ {
+ final DailyMissionPlayerEntry missionData = getPlayerEntry(event.getClanMember().getPlayer().getObjectId(), true);
+ processMission(missionData);
+ }
+
+ private void onPlayerClanCreate(OnPlayerClanCreate event)
+ {
+ final DailyMissionPlayerEntry missionData = getPlayerEntry(event.getPlayer().getObjectId(), true);
+ processMission(missionData);
+ }
+
+ private void processMission(DailyMissionPlayerEntry missionData)
+ {
+ if (missionData.getProgress() == 1)
+ {
+ missionData.setStatus(DailyMissionStatus.COMPLETED);
+ }
+ else
+ {
+ missionData.setProgress(1);
+ missionData.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(missionData);
+ }
+}
diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
index 84462adcb8..0da9875cd5 100644
--- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
+++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/handlers/dailymissionhandlers/LoginMonthDailyMissionHandler.java
@@ -49,30 +49,14 @@ public class LoginMonthDailyMissionHandler extends AbstractDailyMissionHandler
Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_LOGIN, (OnPlayerLogin event) -> onPlayerLogin(event), this));
}
- @Override
- public void reset()
- {
- // Monthly rewards do not reset daily.
- }
-
private void onPlayerLogin(OnPlayerLogin event)
{
final DailyMissionPlayerEntry entry = getPlayerEntry(event.getPlayer().getObjectId(), true);
- final long lastCompleted = entry.getLastCompleted();
- if (lastCompleted == 0) // Initial entry.
- {
- entry.setLastCompleted(System.currentTimeMillis());
- }
- else if ((System.currentTimeMillis() - lastCompleted) > 2506000000L) // 2506000000L (29 day) delay.
+ if (entry.getStatus() != DailyMissionStatus.COMPLETED)
{
entry.setProgress(1);
entry.setStatus(DailyMissionStatus.AVAILABLE);
}
- else
- {
- entry.setProgress(0);
- entry.setStatus(DailyMissionStatus.NOT_AVAILABLE);
- }
storePlayerEntry(entry);
}
}
diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
index f7e5360c4e..18eaca0a48 100644
--- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
+++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/handlers/dailymissionhandlers/LoginWeekendDailyMissionHandler.java
@@ -51,27 +51,18 @@ public class LoginWeekendDailyMissionHandler extends AbstractDailyMissionHandler
Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_LOGIN, (OnPlayerLogin event) -> onPlayerLogin(event), this));
}
- @Override
- public void reset()
- {
- // Weekend rewards do not reset daily.
- }
-
private void onPlayerLogin(OnPlayerLogin event)
{
final DailyMissionPlayerEntry entry = getPlayerEntry(event.getPlayer().getObjectId(), true);
- final int currentDay = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
- final long lastCompleted = entry.getLastCompleted();
- if (((currentDay == Calendar.SATURDAY) || (currentDay == Calendar.SUNDAY)) // Reward only on weekend.
- && ((lastCompleted == 0) || ((System.currentTimeMillis() - lastCompleted) > 172800000))) // Initial entry or 172800000 (2 day) delay.
+ if (entry.getStatus() != DailyMissionStatus.COMPLETED)
{
- entry.setProgress(1);
- entry.setStatus(DailyMissionStatus.AVAILABLE);
- }
- else if (entry.getStatus() != DailyMissionStatus.AVAILABLE) // Not waiting to be rewarded.
- {
- entry.setProgress(0);
- entry.setStatus(DailyMissionStatus.NOT_AVAILABLE);
+ final int currentDay = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
+ if (((currentDay == Calendar.SATURDAY) || (currentDay == Calendar.SUNDAY) || (currentDay == Calendar.MONDAY)) //
+ && (Calendar.getInstance().get(Calendar.HOUR_OF_DAY) < 6) && (Calendar.getInstance().get(Calendar.MINUTE) < 30))
+ {
+ entry.setProgress(1);
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
}
storePlayerEntry(entry);
}
diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java
index 171c3003dd..0e39893808 100644
--- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java
+++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java
@@ -22,6 +22,7 @@ import java.util.Set;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.enums.ElementalType;
import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
import org.l2jmobius.gameserver.model.CommandChannel;
import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
@@ -43,6 +44,7 @@ public class MonsterDailyMissionHandler extends AbstractDailyMissionHandler
private final int _minLevel;
private final int _maxLevel;
private final Set _ids = new HashSet<>();
+ private final ElementalType _element;
public MonsterDailyMissionHandler(DailyMissionDataHolder holder)
{
@@ -50,6 +52,7 @@ public class MonsterDailyMissionHandler extends AbstractDailyMissionHandler
_amount = holder.getRequiredCompletions();
_minLevel = holder.getParams().getInt("minLevel", 0);
_maxLevel = holder.getParams().getInt("maxLevel", Integer.MAX_VALUE);
+ _element = holder.getParams().getEnum("element", ElementalType.class, ElementalType.NONE);
final String ids = holder.getParams().getString("ids", "");
if (!ids.isEmpty())
{
@@ -106,12 +109,14 @@ public class MonsterDailyMissionHandler extends AbstractDailyMissionHandler
final Player player = event.getAttacker();
final int monsterLevel = monster.getLevel();
- if (_minLevel > 0)
+ if ((_minLevel > 0) && ((monsterLevel < _minLevel) || (monsterLevel > _maxLevel) || ((player.getLevel() - monsterLevel) > 5)))
{
- if ((monsterLevel < _minLevel) || (monsterLevel > _maxLevel) || ((player.getLevel() - monsterLevel) > 5))
- {
- return;
- }
+ return;
+ }
+
+ if ((_element != ElementalType.NONE) && (monster.getElementalSpiritType() != _element))
+ {
+ return;
}
final Party party = player.getParty();
diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/xsd/DailyMission.xsd b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/xsd/DailyMission.xsd
index 9da08900d0..35f2f6dc35 100644
--- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/xsd/DailyMission.xsd
+++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/xsd/DailyMission.xsd
@@ -42,6 +42,7 @@
+
diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/enums/MissionResetType.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/enums/MissionResetType.java
new file mode 100644
index 0000000000..cb74a12d14
--- /dev/null
+++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/enums/MissionResetType.java
@@ -0,0 +1,28 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.l2jmobius.gameserver.enums;
+
+/**
+ * @author kamikadzz
+ */
+public enum MissionResetType
+{
+ DAY,
+ WEEK,
+ MONTH,
+ WEEKEND
+}
diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
index 30674c7646..11c6c718d4 100644
--- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
+++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
@@ -16,11 +16,13 @@
*/
package org.l2jmobius.gameserver.model;
+import java.util.Calendar;
import java.util.List;
import java.util.function.Function;
import org.l2jmobius.gameserver.enums.ClassId;
import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.enums.MissionResetType;
import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
import org.l2jmobius.gameserver.handler.DailyMissionHandler;
import org.l2jmobius.gameserver.model.actor.Player;
@@ -42,6 +44,7 @@ public class DailyMissionDataHolder
private final boolean _isDualClassOnly;
private final boolean _isDisplayedWhenNotAvailable;
private final AbstractDailyMissionHandler _handler;
+ private final MissionResetType _missionResetSlot;
public DailyMissionDataHolder(StatSet set)
{
@@ -57,6 +60,7 @@ public class DailyMissionDataHolder
_isDualClassOnly = set.getBoolean("isDualClassOnly", false);
_isDisplayedWhenNotAvailable = set.getBoolean("isDisplayedWhenNotAvailable", true);
_handler = handler != null ? handler.apply(this) : null;
+ _missionResetSlot = set.getObject("duration", MissionResetType.class, MissionResetType.DAY);
}
public int getId()
@@ -166,7 +170,22 @@ public class DailyMissionDataHolder
{
if (_handler != null)
{
- _handler.reset();
+ if ((_missionResetSlot == MissionResetType.WEEK) && (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY))
+ {
+ _handler.reset();
+ }
+ else if ((_missionResetSlot == MissionResetType.MONTH) && (Calendar.getInstance().get(Calendar.DAY_OF_MONTH) == 1))
+ {
+ _handler.reset();
+ }
+ else if ((_missionResetSlot == MissionResetType.WEEKEND) && (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY))
+ {
+ _handler.reset();
+ }
+ else if (_dailyReset)
+ {
+ _handler.reset();
+ }
}
}
}
diff --git a/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/DailyMission.xml b/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/DailyMission.xml
index 77f26f0995..fa3e1b7805 100644
--- a/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/DailyMission.xml
+++ b/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/DailyMission.xml
@@ -732,19 +732,13 @@
-
-
+
- Hair Accessory Coupon
+
- -->