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 + - -->