Completed the Daily Mission refactoring.
This commit is contained in:
112
trunk/dist/game/data/scripts/handlers/dailymissionhandlers/BossDailyMissionHandler.java
vendored
Normal file
112
trunk/dist/game/data/scripts/handlers/dailymissionhandlers/BossDailyMissionHandler.java
vendored
Normal file
@@ -0,0 +1,112 @@
|
||||
/*
|
||||
* 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.List;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
import com.l2jmobius.gameserver.enums.DailyMissionStatus;
|
||||
import com.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
|
||||
import com.l2jmobius.gameserver.model.DailyMissionDataHolder;
|
||||
import com.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
|
||||
import com.l2jmobius.gameserver.model.L2CommandChannel;
|
||||
import com.l2jmobius.gameserver.model.L2Party;
|
||||
import com.l2jmobius.gameserver.model.actor.L2Attackable;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jmobius.gameserver.model.events.Containers;
|
||||
import com.l2jmobius.gameserver.model.events.EventType;
|
||||
import com.l2jmobius.gameserver.model.events.impl.character.npc.OnAttackableKill;
|
||||
import com.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
|
||||
|
||||
/**
|
||||
* @author UnAfraid
|
||||
*/
|
||||
public class BossDailyMissionHandler extends AbstractDailyMissionHandler
|
||||
{
|
||||
private final int _amount;
|
||||
|
||||
public BossDailyMissionHandler(DailyMissionDataHolder holder)
|
||||
{
|
||||
super(holder);
|
||||
_amount = holder.getRequiredCompletions();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init()
|
||||
{
|
||||
Containers.Monsters().addListener(new ConsumerEventListener(this, EventType.ON_ATTACKABLE_KILL, (OnAttackableKill event) -> onAttackableKill(event), this));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAvailable(L2PcInstance player)
|
||||
{
|
||||
final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
|
||||
if (entry != null)
|
||||
{
|
||||
switch (entry.getStatus())
|
||||
{
|
||||
case NOT_AVAILABLE: // Initial state
|
||||
{
|
||||
if (entry.getProgress() >= _amount)
|
||||
{
|
||||
entry.setStatus(DailyMissionStatus.AVAILABLE);
|
||||
storePlayerEntry(entry);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case AVAILABLE:
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void onAttackableKill(OnAttackableKill event)
|
||||
{
|
||||
final L2Attackable monster = event.getTarget();
|
||||
final L2PcInstance player = event.getAttacker();
|
||||
if (monster.isRaid() && (monster.getInstanceId() > 0) && (player != null))
|
||||
{
|
||||
final L2Party party = player.getParty();
|
||||
if (party != null)
|
||||
{
|
||||
final L2CommandChannel channel = party.getCommandChannel();
|
||||
final List<L2PcInstance> members = channel != null ? channel.getMembers() : party.getMembers();
|
||||
members.stream().filter(member -> member.calculateDistance(monster, true, false) <= Config.ALT_PARTY_RANGE).forEach(this::processPlayerProgress);
|
||||
}
|
||||
else
|
||||
{
|
||||
processPlayerProgress(player);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void processPlayerProgress(L2PcInstance player)
|
||||
{
|
||||
final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), true);
|
||||
if (entry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
|
||||
{
|
||||
if (entry.increaseProgress() >= _amount)
|
||||
{
|
||||
entry.setStatus(DailyMissionStatus.AVAILABLE);
|
||||
}
|
||||
storePlayerEntry(entry);
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,89 @@
|
||||
/*
|
||||
* 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 com.l2jmobius.gameserver.enums.DailyMissionStatus;
|
||||
import com.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
|
||||
import com.l2jmobius.gameserver.model.DailyMissionDataHolder;
|
||||
import com.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jmobius.gameserver.model.events.Containers;
|
||||
import com.l2jmobius.gameserver.model.events.EventType;
|
||||
import com.l2jmobius.gameserver.model.events.impl.ceremonyofchaos.OnCeremonyOfChaosMatchResult;
|
||||
import com.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
|
||||
|
||||
/**
|
||||
* @author UnAfraid
|
||||
*/
|
||||
public class CeremonyOfChaosDailyMissionHandler extends AbstractDailyMissionHandler
|
||||
{
|
||||
private final int _amount;
|
||||
|
||||
public CeremonyOfChaosDailyMissionHandler(DailyMissionDataHolder holder)
|
||||
{
|
||||
super(holder);
|
||||
_amount = holder.getRequiredCompletions();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init()
|
||||
{
|
||||
Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_CEREMONY_OF_CHAOS_MATCH_RESULT, (OnCeremonyOfChaosMatchResult event) -> onCeremonyOfChaosMatchResult(event), this));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAvailable(L2PcInstance player)
|
||||
{
|
||||
final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
|
||||
if (entry != null)
|
||||
{
|
||||
switch (entry.getStatus())
|
||||
{
|
||||
case NOT_AVAILABLE: // Initial state
|
||||
{
|
||||
if (entry.getProgress() >= _amount)
|
||||
{
|
||||
entry.setStatus(DailyMissionStatus.AVAILABLE);
|
||||
storePlayerEntry(entry);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case AVAILABLE:
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void onCeremonyOfChaosMatchResult(OnCeremonyOfChaosMatchResult event)
|
||||
{
|
||||
event.getMembers().forEach(member ->
|
||||
{
|
||||
final DailyMissionPlayerEntry entry = getPlayerEntry(member.getObjectId(), true);
|
||||
if (entry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
|
||||
{
|
||||
if (entry.increaseProgress() >= _amount)
|
||||
{
|
||||
entry.setStatus(DailyMissionStatus.AVAILABLE);
|
||||
}
|
||||
storePlayerEntry(entry);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
91
trunk/dist/game/data/scripts/handlers/dailymissionhandlers/FishingDailyMissionHandler.java
vendored
Normal file
91
trunk/dist/game/data/scripts/handlers/dailymissionhandlers/FishingDailyMissionHandler.java
vendored
Normal file
@@ -0,0 +1,91 @@
|
||||
/*
|
||||
* 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 com.l2jmobius.gameserver.enums.DailyMissionStatus;
|
||||
import com.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
|
||||
import com.l2jmobius.gameserver.model.DailyMissionDataHolder;
|
||||
import com.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jmobius.gameserver.model.events.Containers;
|
||||
import com.l2jmobius.gameserver.model.events.EventType;
|
||||
import com.l2jmobius.gameserver.model.events.impl.character.player.OnPlayerFishing;
|
||||
import com.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
|
||||
import com.l2jmobius.gameserver.network.serverpackets.fishing.ExFishingEnd.FishingEndReason;
|
||||
|
||||
/**
|
||||
* @author UnAfraid
|
||||
*/
|
||||
public class FishingDailyMissionHandler extends AbstractDailyMissionHandler
|
||||
{
|
||||
private final int _amount;
|
||||
|
||||
public FishingDailyMissionHandler(DailyMissionDataHolder holder)
|
||||
{
|
||||
super(holder);
|
||||
_amount = holder.getRequiredCompletions();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init()
|
||||
{
|
||||
Containers.Players().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_FISHING, (OnPlayerFishing event) -> onPlayerFishing(event), this));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAvailable(L2PcInstance player)
|
||||
{
|
||||
final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
|
||||
if (entry != null)
|
||||
{
|
||||
switch (entry.getStatus())
|
||||
{
|
||||
case NOT_AVAILABLE: // Initial state
|
||||
{
|
||||
if (entry.getProgress() >= _amount)
|
||||
{
|
||||
entry.setStatus(DailyMissionStatus.AVAILABLE);
|
||||
storePlayerEntry(entry);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case AVAILABLE:
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void onPlayerFishing(OnPlayerFishing event)
|
||||
{
|
||||
final L2PcInstance player = event.getActiveChar();
|
||||
if (event.getReason() == FishingEndReason.WIN)
|
||||
{
|
||||
final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), true);
|
||||
if (entry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
|
||||
{
|
||||
if (entry.increaseProgress() >= _amount)
|
||||
{
|
||||
entry.setStatus(DailyMissionStatus.AVAILABLE);
|
||||
}
|
||||
storePlayerEntry(entry);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
95
trunk/dist/game/data/scripts/handlers/dailymissionhandlers/LevelDailyMissionHandler.java
vendored
Normal file
95
trunk/dist/game/data/scripts/handlers/dailymissionhandlers/LevelDailyMissionHandler.java
vendored
Normal file
@@ -0,0 +1,95 @@
|
||||
/*
|
||||
* 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 com.l2jmobius.gameserver.enums.DailyMissionStatus;
|
||||
import com.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
|
||||
import com.l2jmobius.gameserver.model.DailyMissionDataHolder;
|
||||
import com.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jmobius.gameserver.model.events.Containers;
|
||||
import com.l2jmobius.gameserver.model.events.EventType;
|
||||
import com.l2jmobius.gameserver.model.events.impl.character.player.OnPlayerLevelChanged;
|
||||
import com.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
|
||||
|
||||
/**
|
||||
* @author Sdw
|
||||
*/
|
||||
public class LevelDailyMissionHandler extends AbstractDailyMissionHandler
|
||||
{
|
||||
private final int _level;
|
||||
private final boolean _dualclass;
|
||||
|
||||
public LevelDailyMissionHandler(DailyMissionDataHolder holder)
|
||||
{
|
||||
super(holder);
|
||||
_level = holder.getParams().getInt("level");
|
||||
_dualclass = holder.getParams().getBoolean("dualclass", false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init()
|
||||
{
|
||||
Containers.Players().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_LEVEL_CHANGED, (OnPlayerLevelChanged event) -> onPlayerLevelChanged(event), this));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAvailable(L2PcInstance player)
|
||||
{
|
||||
final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
|
||||
if (entry != null)
|
||||
{
|
||||
switch (entry.getStatus())
|
||||
{
|
||||
case NOT_AVAILABLE:
|
||||
{
|
||||
if ((player.getLevel() >= _level) && (player.isDualClassActive() == _dualclass))
|
||||
{
|
||||
entry.setStatus(DailyMissionStatus.AVAILABLE);
|
||||
storePlayerEntry(entry);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case AVAILABLE:
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reset()
|
||||
{
|
||||
// Level rewards doesn't reset daily
|
||||
}
|
||||
|
||||
private void onPlayerLevelChanged(OnPlayerLevelChanged event)
|
||||
{
|
||||
final L2PcInstance player = event.getActiveChar();
|
||||
if ((player.getLevel() >= _level) && (player.isDualClassActive() == _dualclass))
|
||||
{
|
||||
final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), true);
|
||||
if (entry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
|
||||
{
|
||||
entry.setStatus(DailyMissionStatus.AVAILABLE);
|
||||
storePlayerEntry(entry);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
96
trunk/dist/game/data/scripts/handlers/dailymissionhandlers/OlympiadDailyMissionHandler.java
vendored
Normal file
96
trunk/dist/game/data/scripts/handlers/dailymissionhandlers/OlympiadDailyMissionHandler.java
vendored
Normal file
@@ -0,0 +1,96 @@
|
||||
/*
|
||||
* 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 com.l2jmobius.gameserver.enums.DailyMissionStatus;
|
||||
import com.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
|
||||
import com.l2jmobius.gameserver.model.DailyMissionDataHolder;
|
||||
import com.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jmobius.gameserver.model.events.Containers;
|
||||
import com.l2jmobius.gameserver.model.events.EventType;
|
||||
import com.l2jmobius.gameserver.model.events.impl.olympiad.OnOlympiadMatchResult;
|
||||
import com.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
|
||||
|
||||
/**
|
||||
* @author UnAfraid
|
||||
*/
|
||||
public class OlympiadDailyMissionHandler extends AbstractDailyMissionHandler
|
||||
{
|
||||
private final int _amount;
|
||||
|
||||
public OlympiadDailyMissionHandler(DailyMissionDataHolder holder)
|
||||
{
|
||||
super(holder);
|
||||
_amount = holder.getRequiredCompletions();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init()
|
||||
{
|
||||
Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_OLYMPIAD_MATCH_RESULT, (OnOlympiadMatchResult event) -> onOlympiadMatchResult(event), this));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAvailable(L2PcInstance player)
|
||||
{
|
||||
final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
|
||||
if (entry != null)
|
||||
{
|
||||
switch (entry.getStatus())
|
||||
{
|
||||
case NOT_AVAILABLE: // Initial state
|
||||
{
|
||||
if (entry.getProgress() >= _amount)
|
||||
{
|
||||
entry.setStatus(DailyMissionStatus.AVAILABLE);
|
||||
storePlayerEntry(entry);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case AVAILABLE:
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void onOlympiadMatchResult(OnOlympiadMatchResult event)
|
||||
{
|
||||
final DailyMissionPlayerEntry winnerEntry = getPlayerEntry(event.getWinner().getObjectId(), true);
|
||||
if (winnerEntry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
|
||||
{
|
||||
if (winnerEntry.increaseProgress() >= _amount)
|
||||
{
|
||||
winnerEntry.setStatus(DailyMissionStatus.AVAILABLE);
|
||||
}
|
||||
storePlayerEntry(winnerEntry);
|
||||
}
|
||||
|
||||
final DailyMissionPlayerEntry loseEntry = getPlayerEntry(event.getLoser().getObjectId(), true);
|
||||
if (loseEntry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
|
||||
{
|
||||
if (loseEntry.increaseProgress() >= _amount)
|
||||
{
|
||||
loseEntry.setStatus(DailyMissionStatus.AVAILABLE);
|
||||
}
|
||||
storePlayerEntry(loseEntry);
|
||||
}
|
||||
}
|
||||
}
|
91
trunk/dist/game/data/scripts/handlers/dailymissionhandlers/QuestDailyMissionHandler.java
vendored
Normal file
91
trunk/dist/game/data/scripts/handlers/dailymissionhandlers/QuestDailyMissionHandler.java
vendored
Normal file
@@ -0,0 +1,91 @@
|
||||
/*
|
||||
* 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 com.l2jmobius.gameserver.enums.DailyMissionStatus;
|
||||
import com.l2jmobius.gameserver.enums.QuestType;
|
||||
import com.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
|
||||
import com.l2jmobius.gameserver.model.DailyMissionDataHolder;
|
||||
import com.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jmobius.gameserver.model.events.Containers;
|
||||
import com.l2jmobius.gameserver.model.events.EventType;
|
||||
import com.l2jmobius.gameserver.model.events.impl.character.player.OnPlayerQuestComplete;
|
||||
import com.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
|
||||
|
||||
/**
|
||||
* @author UnAfraid
|
||||
*/
|
||||
public class QuestDailyMissionHandler extends AbstractDailyMissionHandler
|
||||
{
|
||||
private final int _amount;
|
||||
|
||||
public QuestDailyMissionHandler(DailyMissionDataHolder holder)
|
||||
{
|
||||
super(holder);
|
||||
_amount = holder.getRequiredCompletions();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init()
|
||||
{
|
||||
Containers.Players().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_QUEST_COMPLETE, (OnPlayerQuestComplete event) -> onQuestComplete(event), this));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAvailable(L2PcInstance player)
|
||||
{
|
||||
final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
|
||||
if (entry != null)
|
||||
{
|
||||
switch (entry.getStatus())
|
||||
{
|
||||
case NOT_AVAILABLE: // Initial state
|
||||
{
|
||||
if (entry.getProgress() >= _amount)
|
||||
{
|
||||
entry.setStatus(DailyMissionStatus.AVAILABLE);
|
||||
storePlayerEntry(entry);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case AVAILABLE:
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void onQuestComplete(OnPlayerQuestComplete event)
|
||||
{
|
||||
final L2PcInstance player = event.getActiveChar();
|
||||
if (event.getQuestType() == QuestType.DAILY)
|
||||
{
|
||||
final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), true);
|
||||
if (entry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
|
||||
{
|
||||
if (entry.increaseProgress() >= _amount)
|
||||
{
|
||||
entry.setStatus(DailyMissionStatus.AVAILABLE);
|
||||
}
|
||||
storePlayerEntry(entry);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
84
trunk/dist/game/data/scripts/handlers/dailymissionhandlers/SiegeDailyMissionHandler.java
vendored
Normal file
84
trunk/dist/game/data/scripts/handlers/dailymissionhandlers/SiegeDailyMissionHandler.java
vendored
Normal file
@@ -0,0 +1,84 @@
|
||||
/*
|
||||
* 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 com.l2jmobius.gameserver.data.sql.impl.ClanTable;
|
||||
import com.l2jmobius.gameserver.enums.DailyMissionStatus;
|
||||
import com.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
|
||||
import com.l2jmobius.gameserver.model.DailyMissionDataHolder;
|
||||
import com.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
|
||||
import com.l2jmobius.gameserver.model.L2Clan;
|
||||
import com.l2jmobius.gameserver.model.L2SiegeClan;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jmobius.gameserver.model.events.Containers;
|
||||
import com.l2jmobius.gameserver.model.events.EventType;
|
||||
import com.l2jmobius.gameserver.model.events.impl.sieges.OnCastleSiegeStart;
|
||||
import com.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
|
||||
|
||||
/**
|
||||
* @author UnAfraid
|
||||
*/
|
||||
public class SiegeDailyMissionHandler extends AbstractDailyMissionHandler
|
||||
{
|
||||
public SiegeDailyMissionHandler(DailyMissionDataHolder holder)
|
||||
{
|
||||
super(holder);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init()
|
||||
{
|
||||
Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_CASTLE_SIEGE_START, (OnCastleSiegeStart event) -> onSiegeStart(event), this));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAvailable(L2PcInstance player)
|
||||
{
|
||||
final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
|
||||
if (entry != null)
|
||||
{
|
||||
switch (entry.getStatus())
|
||||
{
|
||||
case AVAILABLE:
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void onSiegeStart(OnCastleSiegeStart event)
|
||||
{
|
||||
event.getSiege().getAttackerClans().forEach(this::processSiegeClan);
|
||||
event.getSiege().getDefenderClans().forEach(this::processSiegeClan);
|
||||
}
|
||||
|
||||
private void processSiegeClan(L2SiegeClan siegeClan)
|
||||
{
|
||||
final L2Clan clan = ClanTable.getInstance().getClan(siegeClan.getClanId());
|
||||
if (clan != null)
|
||||
{
|
||||
clan.getOnlineMembers(0).forEach(player ->
|
||||
{
|
||||
final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), true);
|
||||
entry.setStatus(DailyMissionStatus.AVAILABLE);
|
||||
storePlayerEntry(entry);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user