Daily Mission changes.
Contributed by kamikadzz.
This commit is contained in:
		@@ -2613,14 +2613,14 @@
 | 
			
		||||
			<item id="35987" count="10" />
 | 
			
		||||
		</items>
 | 
			
		||||
	</reward>
 | 
			
		||||
	<reward id="224" reward_id="604" name="Login All Weekend" isOneTime="false">
 | 
			
		||||
	<reward id="224" reward_id="604" name="Login All Weekend" requiredCompletion="1" isOneTime="false" duration="WEEKEND">
 | 
			
		||||
		<handler name="loginweekend" />
 | 
			
		||||
		<items>
 | 
			
		||||
			<item id="27593" count="4" />
 | 
			
		||||
			<item id="27603" count="1" />
 | 
			
		||||
		</items>
 | 
			
		||||
	</reward>
 | 
			
		||||
	<reward id="225" reward_id="605" name="Login All Month" isOneTime="false">
 | 
			
		||||
	<reward id="225" reward_id="605" name="Login All Month" requiredCompletion="1" isOneTime="false" duration="MONTH">
 | 
			
		||||
		<handler name="loginmonth" />
 | 
			
		||||
		<items>
 | 
			
		||||
			<item id="27593" count="15" />
 | 
			
		||||
 
 | 
			
		||||
@@ -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.");
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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 <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
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<OnPlayerClanJoin>) this::onPlayerClanJoin, this));
 | 
			
		||||
		Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_CLAN_CREATE, (Consumer<OnPlayerClanCreate>) 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);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -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);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -39,6 +39,7 @@
 | 
			
		||||
		<xs:attribute type="xs:int" name="requiredCompletion" />
 | 
			
		||||
		<xs:attribute type="xs:boolean" name="dailyReset" />
 | 
			
		||||
		<xs:attribute type="xs:boolean" name="isOneTime" />
 | 
			
		||||
		<xs:attribute type="xs:string" name="duration" />
 | 
			
		||||
	</xs:complexType>
 | 
			
		||||
	<xs:complexType name="listType">
 | 
			
		||||
		<xs:sequence>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user