Addition of Clan Missions.
This commit is contained in:
parent
39f8ea0c4c
commit
89d48d9913
@ -1,3 +1,267 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xsd/DailyMission.xsd">
|
||||
<reward id="3001" name="Reach Main Class Lv. 99" requiredCompletion="99">
|
||||
<!-- Reach Lv. 99 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">99</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="300" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="3000" /> <!-- Fame -->
|
||||
<item id="45811" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3002" name="Reach Main Class Lv. 100" requiredCompletion="100">
|
||||
<!-- Reach Lv. 100 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">100</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="450" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="4500" /> <!-- Fame -->
|
||||
<item id="45812" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3003" name="Reach Main Class Lv. 101" requiredCompletion="101">
|
||||
<!-- Reach Lv. 101 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">101</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="600" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="6000" /> <!-- Fame -->
|
||||
<item id="45813" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3004" name="Reach Main Class Lv. 102" requiredCompletion="102">
|
||||
<!-- Reach Lv. 102 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">102</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="750" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="7500" /> <!-- Fame -->
|
||||
<item id="45814" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3005" name="Reach Main Class Lv. 103" requiredCompletion="103">
|
||||
<!-- Reach Lv. 103 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">103</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="900" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="9000" /> <!-- Fame -->
|
||||
<item id="45815" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3006" name="Reach Main Class Lv. 104" requiredCompletion="104">
|
||||
<!-- Reach Lv. 104 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">104</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="1050" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="10500" /> <!-- Fame -->
|
||||
<item id="45816" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3007" name="Reach Main Class Lv. 105" requiredCompletion="105">
|
||||
<!-- Reach Lv. 105 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">105</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="1200" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="12000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3008" name="Reach Main Class Lv. 106" requiredCompletion="106">
|
||||
<!-- Reach Lv. 106 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">106</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="1500" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="15000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3009" name="Reach Main Class Lv. 107" requiredCompletion="107">
|
||||
<!-- Reach Lv. 107 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">107</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="1800" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="18000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3010" name="Reach Main Class Lv. 108" requiredCompletion="108">
|
||||
<!-- Reach Lv. 108 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">108</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="2100" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="21000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3011" name="Reach Main Class Lv. 109" requiredCompletion="109">
|
||||
<!-- Reach Lv. 109 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">109</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="2400" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="24000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3012" name="Reach Main Class Lv. 110" requiredCompletion="110">
|
||||
<!-- Reach Lv. 110 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">110</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="2700" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="27000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3013" name="Reach Dual Class Lv. 99" requiredCompletion="99" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 99 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">99</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="300" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="3000" /> <!-- Fame -->
|
||||
<item id="45811" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3014" name="Reach Dual Class Lv. 100" requiredCompletion="100" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 100 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">100</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="450" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="4500" /> <!-- Fame -->
|
||||
<item id="45812" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3015" name="Reach Dual Class Lv. 101" requiredCompletion="101" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 101 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">101</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="600" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="6000" /> <!-- Fame -->
|
||||
<item id="45813" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3016" name="Reach Dual Class Lv. 102" requiredCompletion="102" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 102 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">102</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="750" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="7500" /> <!-- Fame -->
|
||||
<item id="45814" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3017" name="Reach Dual Class Lv. 103" requiredCompletion="103" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 103 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">103</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="900" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="9000" /> <!-- Fame -->
|
||||
<item id="45815" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3018" name="Reach Dual Class Lv. 104" requiredCompletion="104" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 104 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">104</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="1050" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="10500" /> <!-- Fame -->
|
||||
<item id="45816" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3019" name="Reach Dual Class Lv. 105" requiredCompletion="105" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 105 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">105</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="1200" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="12000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3020" name="Reach Dual Class Lv. 106" requiredCompletion="106" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 106 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">106</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="1500" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="15000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3021" name="Reach Dual Class Lv. 107" requiredCompletion="107" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 107 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">107</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="1800" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="18000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3022" name="Reach Dual Class Lv. 108" requiredCompletion="108" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 108 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">108</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="2100" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="21000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3023" name="Reach Dual Class Lv. 109" requiredCompletion="109" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 109 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">109</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="2400" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="24000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3024" name="Reach Dual Class Lv. 110" requiredCompletion="110" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 110 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">110</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="2700" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="27000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
</list>
|
@ -38,7 +38,7 @@ public class LevelDailyMissionHandler extends AbstractDailyMissionHandler
|
||||
{
|
||||
super(holder);
|
||||
_level = holder.getParams().getInt("level");
|
||||
_dualclass = holder.getParams().getBoolean("dualclass", false);
|
||||
_dualclass = holder.isDualClassOnly();
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -73,6 +73,12 @@ public class LevelDailyMissionHandler extends AbstractDailyMissionHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isLevelUpMission()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reset()
|
||||
{
|
||||
|
@ -36,7 +36,7 @@
|
||||
<xs:attribute type="xs:short" name="id" />
|
||||
<xs:attribute type="xs:short" name="reward_id" />
|
||||
<xs:attribute type="xs:string" name="name" />
|
||||
<xs:attribute type="xs:short" name="requiredCompletion" />
|
||||
<xs:attribute type="xs:int" name="requiredCompletion" />
|
||||
<xs:attribute type="xs:boolean" name="isOneTime" />
|
||||
<xs:attribute type="xs:boolean" name="isMainClassOnly" />
|
||||
<xs:attribute type="xs:boolean" name="isDualClassOnly" />
|
||||
|
@ -27,10 +27,12 @@ import java.util.logging.Logger;
|
||||
|
||||
import org.l2jmobius.commons.database.DatabaseFactory;
|
||||
import org.l2jmobius.gameserver.enums.DailyMissionStatus;
|
||||
import org.l2jmobius.gameserver.enums.SpecialItemType;
|
||||
import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
|
||||
import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.events.ListenersContainer;
|
||||
import org.l2jmobius.gameserver.model.holders.ItemHolder;
|
||||
|
||||
/**
|
||||
* @author Sdw
|
||||
@ -55,6 +57,11 @@ public abstract class AbstractDailyMissionHandler extends ListenersContainer
|
||||
|
||||
public abstract boolean isAvailable(PlayerInstance player);
|
||||
|
||||
public boolean isLevelUpMission()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
public abstract void init();
|
||||
|
||||
public int getStatus(PlayerInstance player)
|
||||
@ -96,7 +103,7 @@ public abstract class AbstractDailyMissionHandler extends ListenersContainer
|
||||
|
||||
public boolean requestReward(PlayerInstance player)
|
||||
{
|
||||
if (isAvailable(player))
|
||||
if (isAvailable(player) || isLevelUpMission())
|
||||
{
|
||||
giveRewards(player);
|
||||
|
||||
@ -113,7 +120,22 @@ public abstract class AbstractDailyMissionHandler extends ListenersContainer
|
||||
|
||||
protected void giveRewards(PlayerInstance player)
|
||||
{
|
||||
_holder.getRewards().forEach(i -> player.addItem("One Day Reward", i, player, true));
|
||||
for (ItemHolder reward : _holder.getRewards())
|
||||
{
|
||||
if (reward.getId() == SpecialItemType.CLAN_REPUTATION.getClientId())
|
||||
{
|
||||
player.getClan().addReputationScore((int) reward.getCount(), true);
|
||||
}
|
||||
else if (reward.getId() == SpecialItemType.FAME.getClientId())
|
||||
{
|
||||
player.setFame(player.getFame() + (int) reward.getCount());
|
||||
player.broadcastUserInfo();
|
||||
}
|
||||
else
|
||||
{
|
||||
player.addItem("Daily Reward", reward, player, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected void storePlayerEntry(DailyMissionPlayerEntry entry)
|
||||
|
@ -163,6 +163,11 @@ public class DailyMissionDataHolder
|
||||
return (_handler != null) && _handler.getRecentlyCompleted(player);
|
||||
}
|
||||
|
||||
public boolean isLevelUpMission()
|
||||
{
|
||||
return (_handler != null) && _handler.isLevelUpMission();
|
||||
}
|
||||
|
||||
public void reset()
|
||||
{
|
||||
if (_handler != null)
|
||||
|
@ -88,6 +88,8 @@ import org.l2jmobius.gameserver.network.clientpackets.pledgeV2.RequestExPledgeLe
|
||||
import org.l2jmobius.gameserver.network.clientpackets.pledgeV2.RequestExPledgeMasteryInfo;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.pledgeV2.RequestExPledgeMasteryReset;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.pledgeV2.RequestExPledgeMasterySet;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.pledgeV2.RequestExPledgeMissionInfo;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.pledgeV2.RequestExPledgeMissionReward;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.pledgeV2.RequestExPledgeSkillActivate;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.pledgeV2.RequestExPledgeSkillInfo;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.primeshop.RequestBRBuyProduct;
|
||||
@ -424,8 +426,8 @@ public enum ExIncomingPackets implements IIncomingPackets<GameClient>
|
||||
EX_PLEDGE_CONTRIBUTION_INFO(0x13F, null, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_CONTRIBUTION_REWARD(0x140, null, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_LEVEL_UP(0x141, RequestExPledgeLevelUp::new, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_MISSION_INFO(0x142, null, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_MISSION_REWARD(0x143, null, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_MISSION_INFO(0x142, RequestExPledgeMissionInfo::new, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_MISSION_REWARD(0x143, RequestExPledgeMissionReward::new, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_MASTERY_INFO(0x144, RequestExPledgeMasteryInfo::new, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_MASTERY_SET(0x145, RequestExPledgeMasterySet::new, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_MASTERY_RESET(0x146, RequestExPledgeMasteryReset::new, ConnectionState.IN_GAME),
|
||||
|
@ -624,9 +624,6 @@ public class EnterWorld implements IClientIncomingPacket
|
||||
{
|
||||
player.sendPacket(new ExWorldChatCnt(player));
|
||||
}
|
||||
// Removed used by new Clan system.
|
||||
// player.sendPacket(new ExConnectedTimeAndGettableReward(player));
|
||||
// player.sendPacket(new ExOneDayReceiveRewardList(player, true));
|
||||
|
||||
// Handle soulshots, disable all on EnterWorld
|
||||
player.sendPacket(new ExAutoSoulShot(0, true, 0));
|
||||
|
@ -1,71 +0,0 @@
|
||||
/*
|
||||
* 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 org.l2jmobius.gameserver.network.clientpackets.dailymission;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketReader;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.network.GameClient;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.dailymission.ExOneDayReceiveRewardList;
|
||||
|
||||
/**
|
||||
* @author UnAfraid
|
||||
*/
|
||||
public class RequestTodoList implements IClientIncomingPacket
|
||||
{
|
||||
private int _tab;
|
||||
@SuppressWarnings("unused")
|
||||
private boolean _showAllLevels;
|
||||
|
||||
@Override
|
||||
public boolean read(GameClient client, PacketReader packet)
|
||||
{
|
||||
_tab = packet.readC(); // Daily Reward = 9, Event = 1, Instance Zone = 2
|
||||
_showAllLevels = packet.readC() == 1; // Disabled = 0, Enabled = 1
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run(GameClient client)
|
||||
{
|
||||
final PlayerInstance player = client.getPlayer();
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
switch (_tab)
|
||||
{
|
||||
// case 1:
|
||||
// {
|
||||
// player.sendPacket(new ExTodoListInzone());
|
||||
// break;
|
||||
// }
|
||||
// case 2:
|
||||
// {
|
||||
// player.sendPacket(new ExTodoListInzone());
|
||||
// break;
|
||||
// }
|
||||
case 9: // Daily Rewards
|
||||
{
|
||||
// Initial EW request should be false
|
||||
player.sendPacket(new ExOneDayReceiveRewardList(player, true));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -14,32 +14,37 @@
|
||||
* 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 org.l2jmobius.gameserver.network.clientpackets.dailymission;
|
||||
package org.l2jmobius.gameserver.network.clientpackets.pledgeV2;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketReader;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.network.GameClient;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.pledgeV2.ExPledgeMissionInfo;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.pledgeV2.ExPledgeMissionRewardCount;
|
||||
|
||||
/**
|
||||
* @author Mobius
|
||||
*/
|
||||
public class RequestTodoListHTML implements IClientIncomingPacket
|
||||
* @author Bonux (bonuxq@gmail.com)
|
||||
* @date 29.09.2019
|
||||
**/
|
||||
public class RequestExPledgeMissionInfo implements IClientIncomingPacket
|
||||
{
|
||||
@SuppressWarnings("unused")
|
||||
private int _tab;
|
||||
@SuppressWarnings("unused")
|
||||
private String _linkName;
|
||||
|
||||
@Override
|
||||
public boolean read(GameClient client, PacketReader packet)
|
||||
{
|
||||
_tab = packet.readC();
|
||||
_linkName = packet.readS();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run(GameClient client)
|
||||
{
|
||||
final PlayerInstance player = client.getPlayer();
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
client.sendPacket(new ExPledgeMissionRewardCount(player));
|
||||
client.sendPacket(new ExPledgeMissionInfo(player));
|
||||
}
|
||||
}
|
@ -1,62 +1,63 @@
|
||||
/*
|
||||
* 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 org.l2jmobius.gameserver.network.clientpackets.dailymission;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketReader;
|
||||
import org.l2jmobius.gameserver.data.xml.impl.DailyMissionData;
|
||||
import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.network.GameClient;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.dailymission.ExOneDayReceiveRewardList;
|
||||
|
||||
/**
|
||||
* @author Sdw
|
||||
*/
|
||||
public class RequestOneDayRewardReceive implements IClientIncomingPacket
|
||||
{
|
||||
private int _id;
|
||||
|
||||
@Override
|
||||
public boolean read(GameClient client, PacketReader packet)
|
||||
{
|
||||
_id = packet.readH();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run(GameClient client)
|
||||
{
|
||||
final PlayerInstance player = client.getPlayer();
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final Collection<DailyMissionDataHolder> reward = DailyMissionData.getInstance().getDailyMissionData(_id);
|
||||
if ((reward == null) || reward.isEmpty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
reward.stream().filter(o -> o.isDisplayable(player)).forEach(r -> r.requestReward(player));
|
||||
// player.sendPacket(new ExConnectedTimeAndGettableReward(player));
|
||||
player.sendPacket(new ExOneDayReceiveRewardList(player, true));
|
||||
}
|
||||
}
|
||||
/*
|
||||
* 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 org.l2jmobius.gameserver.network.clientpackets.pledgeV2;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketReader;
|
||||
import org.l2jmobius.gameserver.data.xml.impl.DailyMissionData;
|
||||
import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.network.GameClient;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.pledgeV2.ExPledgeMissionInfo;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.pledgeV2.ExPledgeMissionRewardCount;
|
||||
|
||||
/**
|
||||
* @author Mobius
|
||||
*/
|
||||
public class RequestExPledgeMissionReward implements IClientIncomingPacket
|
||||
{
|
||||
private int _id;
|
||||
|
||||
@Override
|
||||
public boolean read(GameClient client, PacketReader packet)
|
||||
{
|
||||
_id = packet.readD();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run(GameClient client)
|
||||
{
|
||||
final PlayerInstance player = client.getPlayer();
|
||||
if ((player == null) || (player.getClan() == null))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final Collection<DailyMissionDataHolder> reward = DailyMissionData.getInstance().getDailyMissionData(_id);
|
||||
if ((reward == null) || reward.isEmpty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
reward.stream().filter(o -> o.isDisplayable(player)).forEach(r -> r.requestReward(player));
|
||||
client.sendPacket(new ExPledgeMissionRewardCount(player));
|
||||
client.sendPacket(new ExPledgeMissionInfo(player));
|
||||
}
|
||||
}
|
@ -1,81 +0,0 @@
|
||||
/*
|
||||
* 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 org.l2jmobius.gameserver.network.serverpackets.dailymission;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.function.Function;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.data.xml.impl.DailyMissionData;
|
||||
import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
|
||||
import org.l2jmobius.gameserver.util.cron4j.Predictor;
|
||||
|
||||
/**
|
||||
* @author Sdw
|
||||
*/
|
||||
public class ExOneDayReceiveRewardList implements IClientOutgoingPacket
|
||||
{
|
||||
final PlayerInstance _player;
|
||||
private final Collection<DailyMissionDataHolder> _rewards;
|
||||
private static final Function<String, Long> _remainTime = pattern -> (new Predictor(pattern).nextMatchingTime() - System.currentTimeMillis()) / 1000;
|
||||
|
||||
private final long _dayRemainTime;
|
||||
private final long _weekRemainTime;
|
||||
private final long _monthRemainTime;
|
||||
|
||||
public ExOneDayReceiveRewardList(PlayerInstance player, boolean sendRewards)
|
||||
{
|
||||
_player = player;
|
||||
_rewards = sendRewards ? DailyMissionData.getInstance().getDailyMissionData(player) : Collections.emptyList();
|
||||
_dayRemainTime = _remainTime.apply("30 6 * * *");
|
||||
_weekRemainTime = _remainTime.apply("30 6 * * 1");
|
||||
_monthRemainTime = _remainTime.apply("30 6 1 * *");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean write(PacketWriter packet)
|
||||
{
|
||||
if (!DailyMissionData.getInstance().isAvailable())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
OutgoingPackets.EX_ONE_DAY_RECEIVE_REWARD_LIST.writeId(packet);
|
||||
|
||||
packet.writeD((int) _dayRemainTime);
|
||||
packet.writeD((int) _weekRemainTime);
|
||||
packet.writeD((int) _monthRemainTime);
|
||||
packet.writeC(0x17);
|
||||
packet.writeD(_player.getClassId().getId());
|
||||
packet.writeD(LocalDate.now().getDayOfWeek().ordinal()); // Day of week
|
||||
packet.writeD(_rewards.size());
|
||||
for (DailyMissionDataHolder reward : _rewards)
|
||||
{
|
||||
packet.writeH(reward.getId());
|
||||
packet.writeC(reward.getStatus(_player));
|
||||
packet.writeC(reward.getRequiredCompletions() > 1 ? 0x01 : 0x00);
|
||||
packet.writeD(Math.min(reward.getProgress(_player), _player.getLevel()));
|
||||
packet.writeD(reward.getRequiredCompletions());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
@ -0,0 +1,94 @@
|
||||
/*
|
||||
* 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 org.l2jmobius.gameserver.network.serverpackets.pledgeV2;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.data.xml.impl.DailyMissionData;
|
||||
import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
|
||||
|
||||
/**
|
||||
* @author Mobius
|
||||
*/
|
||||
public class ExPledgeMissionInfo implements IClientOutgoingPacket
|
||||
{
|
||||
private final PlayerInstance _player;
|
||||
private final Collection<DailyMissionDataHolder> _rewards;
|
||||
|
||||
public ExPledgeMissionInfo(PlayerInstance player)
|
||||
{
|
||||
_player = player;
|
||||
_rewards = DailyMissionData.getInstance().getDailyMissionData(player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean write(PacketWriter packet)
|
||||
{
|
||||
if (!DailyMissionData.getInstance().isAvailable() || (_player.getClan() == null))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
OutgoingPackets.EX_PLEDGE_MISSION_INFO.writeId(packet);
|
||||
|
||||
packet.writeD(_rewards.size());
|
||||
for (DailyMissionDataHolder reward : _rewards)
|
||||
{
|
||||
int progress = reward.getProgress(_player);
|
||||
int status = reward.getStatus(_player);
|
||||
|
||||
// TODO: Figure out this.
|
||||
if (reward.isLevelUpMission())
|
||||
{
|
||||
progress = 1;
|
||||
if (status == 2)
|
||||
{
|
||||
if (reward.getRequiredCompletions() <= _player.getLevel())
|
||||
{
|
||||
status = 3;
|
||||
}
|
||||
else
|
||||
{
|
||||
status = 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
status = 0;
|
||||
}
|
||||
}
|
||||
else if (status == 1)
|
||||
{
|
||||
status = 3;
|
||||
}
|
||||
else if (status == 3)
|
||||
{
|
||||
status = 2;
|
||||
}
|
||||
|
||||
packet.writeD(reward.getId());
|
||||
packet.writeD(progress);
|
||||
packet.writeC(status);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
@ -1,60 +1,50 @@
|
||||
/*
|
||||
* 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 org.l2jmobius.gameserver.network.serverpackets.dailymission;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.data.xml.impl.DailyMissionData;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
|
||||
|
||||
/**
|
||||
* @author Sdw
|
||||
*/
|
||||
public class ExConnectedTimeAndGettableReward implements IClientOutgoingPacket
|
||||
{
|
||||
private final int _oneDayRewardAvailableCount;
|
||||
|
||||
public ExConnectedTimeAndGettableReward(PlayerInstance player)
|
||||
{
|
||||
_oneDayRewardAvailableCount = DailyMissionData.getInstance().getDailyMissionData(player).size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean write(PacketWriter packet)
|
||||
{
|
||||
if (!DailyMissionData.getInstance().isAvailable())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
OutgoingPackets.EX_CONNECTED_TIME_AND_GETTABLE_REWARD.writeId(packet);
|
||||
packet.writeD(0x00);
|
||||
packet.writeD(_oneDayRewardAvailableCount);
|
||||
packet.writeD(0x00);
|
||||
packet.writeD(0x00);
|
||||
packet.writeD(0x00);
|
||||
packet.writeD(0x00);
|
||||
packet.writeD(0x00);
|
||||
packet.writeD(0x00);
|
||||
packet.writeD(0x00);
|
||||
packet.writeD(0x00);
|
||||
packet.writeD(0x00);
|
||||
packet.writeD(0x00);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* 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 org.l2jmobius.gameserver.network.serverpackets.pledgeV2;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.data.xml.impl.DailyMissionData;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
|
||||
|
||||
/**
|
||||
* @author Bonux (bonuxq@gmail.com)
|
||||
* @date 29.09.2019
|
||||
**/
|
||||
public class ExPledgeMissionRewardCount implements IClientOutgoingPacket
|
||||
{
|
||||
private final int _doneMissionsCount;
|
||||
private final int _availableMissionsCount;
|
||||
|
||||
public ExPledgeMissionRewardCount(PlayerInstance player)
|
||||
{
|
||||
_doneMissionsCount = (int) DailyMissionData.getInstance().getDailyMissionData(player).stream().filter(d -> d.getRecentlyCompleted(player)).count();
|
||||
_availableMissionsCount = DailyMissionData.getInstance().getDailyMissionData(player).size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean write(PacketWriter packet)
|
||||
{
|
||||
OutgoingPackets.EX_PLEDGE_MISSION_REWARD_COUNT.writeId(packet);
|
||||
|
||||
packet.writeD(Math.min(_availableMissionsCount, _doneMissionsCount)); // Received missions rewards.
|
||||
packet.writeD(_availableMissionsCount); // Available missions rewards. 18 - for noble, 20 - for honnorable noble.
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
@ -1,3 +1,267 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xsd/DailyMission.xsd">
|
||||
<reward id="3001" name="Reach Main Class Lv. 99" requiredCompletion="99">
|
||||
<!-- Reach Lv. 99 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">99</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="300" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="3000" /> <!-- Fame -->
|
||||
<item id="45811" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3002" name="Reach Main Class Lv. 100" requiredCompletion="100">
|
||||
<!-- Reach Lv. 100 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">100</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="450" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="4500" /> <!-- Fame -->
|
||||
<item id="45812" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3003" name="Reach Main Class Lv. 101" requiredCompletion="101">
|
||||
<!-- Reach Lv. 101 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">101</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="600" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="6000" /> <!-- Fame -->
|
||||
<item id="45813" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3004" name="Reach Main Class Lv. 102" requiredCompletion="102">
|
||||
<!-- Reach Lv. 102 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">102</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="750" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="7500" /> <!-- Fame -->
|
||||
<item id="45814" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3005" name="Reach Main Class Lv. 103" requiredCompletion="103">
|
||||
<!-- Reach Lv. 103 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">103</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="900" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="9000" /> <!-- Fame -->
|
||||
<item id="45815" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3006" name="Reach Main Class Lv. 104" requiredCompletion="104">
|
||||
<!-- Reach Lv. 104 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">104</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="1050" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="10500" /> <!-- Fame -->
|
||||
<item id="45816" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3007" name="Reach Main Class Lv. 105" requiredCompletion="105">
|
||||
<!-- Reach Lv. 105 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">105</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="1200" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="12000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3008" name="Reach Main Class Lv. 106" requiredCompletion="106">
|
||||
<!-- Reach Lv. 106 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">106</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="1500" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="15000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3009" name="Reach Main Class Lv. 107" requiredCompletion="107">
|
||||
<!-- Reach Lv. 107 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">107</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="1800" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="18000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3010" name="Reach Main Class Lv. 108" requiredCompletion="108">
|
||||
<!-- Reach Lv. 108 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">108</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="2100" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="21000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3011" name="Reach Main Class Lv. 109" requiredCompletion="109">
|
||||
<!-- Reach Lv. 109 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">109</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="2400" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="24000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3012" name="Reach Main Class Lv. 110" requiredCompletion="110">
|
||||
<!-- Reach Lv. 110 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">110</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="2700" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="27000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3013" name="Reach Dual Class Lv. 99" requiredCompletion="99" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 99 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">99</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="300" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="3000" /> <!-- Fame -->
|
||||
<item id="45811" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3014" name="Reach Dual Class Lv. 100" requiredCompletion="100" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 100 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">100</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="450" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="4500" /> <!-- Fame -->
|
||||
<item id="45812" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3015" name="Reach Dual Class Lv. 101" requiredCompletion="101" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 101 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">101</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="600" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="6000" /> <!-- Fame -->
|
||||
<item id="45813" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3016" name="Reach Dual Class Lv. 102" requiredCompletion="102" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 102 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">102</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="750" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="7500" /> <!-- Fame -->
|
||||
<item id="45814" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3017" name="Reach Dual Class Lv. 103" requiredCompletion="103" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 103 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">103</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="900" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="9000" /> <!-- Fame -->
|
||||
<item id="45815" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3018" name="Reach Dual Class Lv. 104" requiredCompletion="104" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 104 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">104</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="1050" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="10500" /> <!-- Fame -->
|
||||
<item id="45816" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3019" name="Reach Dual Class Lv. 105" requiredCompletion="105" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 105 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">105</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="1200" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="12000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3020" name="Reach Dual Class Lv. 106" requiredCompletion="106" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 106 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">106</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="1500" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="15000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3021" name="Reach Dual Class Lv. 107" requiredCompletion="107" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 107 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">107</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="1800" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="18000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3022" name="Reach Dual Class Lv. 108" requiredCompletion="108" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 108 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">108</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="2100" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="21000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3023" name="Reach Dual Class Lv. 109" requiredCompletion="109" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 109 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">109</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="2400" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="24000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3024" name="Reach Dual Class Lv. 110" requiredCompletion="110" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 110 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">110</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="2700" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="27000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
</list>
|
@ -38,7 +38,7 @@ public class LevelDailyMissionHandler extends AbstractDailyMissionHandler
|
||||
{
|
||||
super(holder);
|
||||
_level = holder.getParams().getInt("level");
|
||||
_dualclass = holder.getParams().getBoolean("dualclass", false);
|
||||
_dualclass = holder.isDualClassOnly();
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -73,6 +73,12 @@ public class LevelDailyMissionHandler extends AbstractDailyMissionHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isLevelUpMission()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reset()
|
||||
{
|
||||
|
@ -36,7 +36,7 @@
|
||||
<xs:attribute type="xs:short" name="id" />
|
||||
<xs:attribute type="xs:short" name="reward_id" />
|
||||
<xs:attribute type="xs:string" name="name" />
|
||||
<xs:attribute type="xs:short" name="requiredCompletion" />
|
||||
<xs:attribute type="xs:int" name="requiredCompletion" />
|
||||
<xs:attribute type="xs:boolean" name="isOneTime" />
|
||||
<xs:attribute type="xs:boolean" name="isMainClassOnly" />
|
||||
<xs:attribute type="xs:boolean" name="isDualClassOnly" />
|
||||
|
@ -27,10 +27,12 @@ import java.util.logging.Logger;
|
||||
|
||||
import org.l2jmobius.commons.database.DatabaseFactory;
|
||||
import org.l2jmobius.gameserver.enums.DailyMissionStatus;
|
||||
import org.l2jmobius.gameserver.enums.SpecialItemType;
|
||||
import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
|
||||
import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.events.ListenersContainer;
|
||||
import org.l2jmobius.gameserver.model.holders.ItemHolder;
|
||||
|
||||
/**
|
||||
* @author Sdw
|
||||
@ -55,6 +57,11 @@ public abstract class AbstractDailyMissionHandler extends ListenersContainer
|
||||
|
||||
public abstract boolean isAvailable(PlayerInstance player);
|
||||
|
||||
public boolean isLevelUpMission()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
public abstract void init();
|
||||
|
||||
public int getStatus(PlayerInstance player)
|
||||
@ -96,7 +103,7 @@ public abstract class AbstractDailyMissionHandler extends ListenersContainer
|
||||
|
||||
public boolean requestReward(PlayerInstance player)
|
||||
{
|
||||
if (isAvailable(player))
|
||||
if (isAvailable(player) || isLevelUpMission())
|
||||
{
|
||||
giveRewards(player);
|
||||
|
||||
@ -113,7 +120,22 @@ public abstract class AbstractDailyMissionHandler extends ListenersContainer
|
||||
|
||||
protected void giveRewards(PlayerInstance player)
|
||||
{
|
||||
_holder.getRewards().forEach(i -> player.addItem("One Day Reward", i, player, true));
|
||||
for (ItemHolder reward : _holder.getRewards())
|
||||
{
|
||||
if (reward.getId() == SpecialItemType.CLAN_REPUTATION.getClientId())
|
||||
{
|
||||
player.getClan().addReputationScore((int) reward.getCount(), true);
|
||||
}
|
||||
else if (reward.getId() == SpecialItemType.FAME.getClientId())
|
||||
{
|
||||
player.setFame(player.getFame() + (int) reward.getCount());
|
||||
player.broadcastUserInfo();
|
||||
}
|
||||
else
|
||||
{
|
||||
player.addItem("Daily Reward", reward, player, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected void storePlayerEntry(DailyMissionPlayerEntry entry)
|
||||
|
@ -163,6 +163,11 @@ public class DailyMissionDataHolder
|
||||
return (_handler != null) && _handler.getRecentlyCompleted(player);
|
||||
}
|
||||
|
||||
public boolean isLevelUpMission()
|
||||
{
|
||||
return (_handler != null) && _handler.isLevelUpMission();
|
||||
}
|
||||
|
||||
public void reset()
|
||||
{
|
||||
if (_handler != null)
|
||||
|
@ -88,6 +88,8 @@ import org.l2jmobius.gameserver.network.clientpackets.pledgeV2.RequestExPledgeLe
|
||||
import org.l2jmobius.gameserver.network.clientpackets.pledgeV2.RequestExPledgeMasteryInfo;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.pledgeV2.RequestExPledgeMasteryReset;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.pledgeV2.RequestExPledgeMasterySet;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.pledgeV2.RequestExPledgeMissionInfo;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.pledgeV2.RequestExPledgeMissionReward;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.pledgeV2.RequestExPledgeSkillActivate;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.pledgeV2.RequestExPledgeSkillInfo;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.primeshop.RequestBRBuyProduct;
|
||||
@ -424,8 +426,8 @@ public enum ExIncomingPackets implements IIncomingPackets<GameClient>
|
||||
EX_PLEDGE_CONTRIBUTION_INFO(0x13F, null, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_CONTRIBUTION_REWARD(0x140, null, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_LEVEL_UP(0x141, RequestExPledgeLevelUp::new, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_MISSION_INFO(0x142, null, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_MISSION_REWARD(0x143, null, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_MISSION_INFO(0x142, RequestExPledgeMissionInfo::new, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_MISSION_REWARD(0x143, RequestExPledgeMissionReward::new, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_MASTERY_INFO(0x144, RequestExPledgeMasteryInfo::new, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_MASTERY_SET(0x145, RequestExPledgeMasterySet::new, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_MASTERY_RESET(0x146, RequestExPledgeMasteryReset::new, ConnectionState.IN_GAME),
|
||||
|
@ -624,9 +624,6 @@ public class EnterWorld implements IClientIncomingPacket
|
||||
{
|
||||
player.sendPacket(new ExWorldChatCnt(player));
|
||||
}
|
||||
// Removed used by new Clan system.
|
||||
// player.sendPacket(new ExConnectedTimeAndGettableReward(player));
|
||||
// player.sendPacket(new ExOneDayReceiveRewardList(player, true));
|
||||
|
||||
// Handle soulshots, disable all on EnterWorld
|
||||
player.sendPacket(new ExAutoSoulShot(0, true, 0));
|
||||
|
@ -1,71 +0,0 @@
|
||||
/*
|
||||
* 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 org.l2jmobius.gameserver.network.clientpackets.dailymission;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketReader;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.network.GameClient;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.dailymission.ExOneDayReceiveRewardList;
|
||||
|
||||
/**
|
||||
* @author UnAfraid
|
||||
*/
|
||||
public class RequestTodoList implements IClientIncomingPacket
|
||||
{
|
||||
private int _tab;
|
||||
@SuppressWarnings("unused")
|
||||
private boolean _showAllLevels;
|
||||
|
||||
@Override
|
||||
public boolean read(GameClient client, PacketReader packet)
|
||||
{
|
||||
_tab = packet.readC(); // Daily Reward = 9, Event = 1, Instance Zone = 2
|
||||
_showAllLevels = packet.readC() == 1; // Disabled = 0, Enabled = 1
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run(GameClient client)
|
||||
{
|
||||
final PlayerInstance player = client.getPlayer();
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
switch (_tab)
|
||||
{
|
||||
// case 1:
|
||||
// {
|
||||
// player.sendPacket(new ExTodoListInzone());
|
||||
// break;
|
||||
// }
|
||||
// case 2:
|
||||
// {
|
||||
// player.sendPacket(new ExTodoListInzone());
|
||||
// break;
|
||||
// }
|
||||
case 9: // Daily Rewards
|
||||
{
|
||||
// Initial EW request should be false
|
||||
player.sendPacket(new ExOneDayReceiveRewardList(player, true));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -14,32 +14,37 @@
|
||||
* 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 org.l2jmobius.gameserver.network.clientpackets.dailymission;
|
||||
package org.l2jmobius.gameserver.network.clientpackets.pledgeV2;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketReader;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.network.GameClient;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.pledgeV2.ExPledgeMissionInfo;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.pledgeV2.ExPledgeMissionRewardCount;
|
||||
|
||||
/**
|
||||
* @author Mobius
|
||||
*/
|
||||
public class RequestTodoListHTML implements IClientIncomingPacket
|
||||
* @author Bonux (bonuxq@gmail.com)
|
||||
* @date 29.09.2019
|
||||
**/
|
||||
public class RequestExPledgeMissionInfo implements IClientIncomingPacket
|
||||
{
|
||||
@SuppressWarnings("unused")
|
||||
private int _tab;
|
||||
@SuppressWarnings("unused")
|
||||
private String _linkName;
|
||||
|
||||
@Override
|
||||
public boolean read(GameClient client, PacketReader packet)
|
||||
{
|
||||
_tab = packet.readC();
|
||||
_linkName = packet.readS();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run(GameClient client)
|
||||
{
|
||||
final PlayerInstance player = client.getPlayer();
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
client.sendPacket(new ExPledgeMissionRewardCount(player));
|
||||
client.sendPacket(new ExPledgeMissionInfo(player));
|
||||
}
|
||||
}
|
@ -1,62 +1,63 @@
|
||||
/*
|
||||
* 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 org.l2jmobius.gameserver.network.clientpackets.dailymission;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketReader;
|
||||
import org.l2jmobius.gameserver.data.xml.impl.DailyMissionData;
|
||||
import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.network.GameClient;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.dailymission.ExOneDayReceiveRewardList;
|
||||
|
||||
/**
|
||||
* @author Sdw
|
||||
*/
|
||||
public class RequestOneDayRewardReceive implements IClientIncomingPacket
|
||||
{
|
||||
private int _id;
|
||||
|
||||
@Override
|
||||
public boolean read(GameClient client, PacketReader packet)
|
||||
{
|
||||
_id = packet.readH();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run(GameClient client)
|
||||
{
|
||||
final PlayerInstance player = client.getPlayer();
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final Collection<DailyMissionDataHolder> reward = DailyMissionData.getInstance().getDailyMissionData(_id);
|
||||
if ((reward == null) || reward.isEmpty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
reward.stream().filter(o -> o.isDisplayable(player)).forEach(r -> r.requestReward(player));
|
||||
// player.sendPacket(new ExConnectedTimeAndGettableReward(player));
|
||||
player.sendPacket(new ExOneDayReceiveRewardList(player, true));
|
||||
}
|
||||
}
|
||||
/*
|
||||
* 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 org.l2jmobius.gameserver.network.clientpackets.pledgeV2;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketReader;
|
||||
import org.l2jmobius.gameserver.data.xml.impl.DailyMissionData;
|
||||
import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.network.GameClient;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.pledgeV2.ExPledgeMissionInfo;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.pledgeV2.ExPledgeMissionRewardCount;
|
||||
|
||||
/**
|
||||
* @author Mobius
|
||||
*/
|
||||
public class RequestExPledgeMissionReward implements IClientIncomingPacket
|
||||
{
|
||||
private int _id;
|
||||
|
||||
@Override
|
||||
public boolean read(GameClient client, PacketReader packet)
|
||||
{
|
||||
_id = packet.readD();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run(GameClient client)
|
||||
{
|
||||
final PlayerInstance player = client.getPlayer();
|
||||
if ((player == null) || (player.getClan() == null))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final Collection<DailyMissionDataHolder> reward = DailyMissionData.getInstance().getDailyMissionData(_id);
|
||||
if ((reward == null) || reward.isEmpty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
reward.stream().filter(o -> o.isDisplayable(player)).forEach(r -> r.requestReward(player));
|
||||
client.sendPacket(new ExPledgeMissionRewardCount(player));
|
||||
client.sendPacket(new ExPledgeMissionInfo(player));
|
||||
}
|
||||
}
|
@ -1,81 +0,0 @@
|
||||
/*
|
||||
* 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 org.l2jmobius.gameserver.network.serverpackets.dailymission;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.function.Function;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.data.xml.impl.DailyMissionData;
|
||||
import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
|
||||
import org.l2jmobius.gameserver.util.cron4j.Predictor;
|
||||
|
||||
/**
|
||||
* @author Sdw
|
||||
*/
|
||||
public class ExOneDayReceiveRewardList implements IClientOutgoingPacket
|
||||
{
|
||||
final PlayerInstance _player;
|
||||
private final Collection<DailyMissionDataHolder> _rewards;
|
||||
private static final Function<String, Long> _remainTime = pattern -> (new Predictor(pattern).nextMatchingTime() - System.currentTimeMillis()) / 1000;
|
||||
|
||||
private final long _dayRemainTime;
|
||||
private final long _weekRemainTime;
|
||||
private final long _monthRemainTime;
|
||||
|
||||
public ExOneDayReceiveRewardList(PlayerInstance player, boolean sendRewards)
|
||||
{
|
||||
_player = player;
|
||||
_rewards = sendRewards ? DailyMissionData.getInstance().getDailyMissionData(player) : Collections.emptyList();
|
||||
_dayRemainTime = _remainTime.apply("30 6 * * *");
|
||||
_weekRemainTime = _remainTime.apply("30 6 * * 1");
|
||||
_monthRemainTime = _remainTime.apply("30 6 1 * *");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean write(PacketWriter packet)
|
||||
{
|
||||
if (!DailyMissionData.getInstance().isAvailable())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
OutgoingPackets.EX_ONE_DAY_RECEIVE_REWARD_LIST.writeId(packet);
|
||||
|
||||
packet.writeD((int) _dayRemainTime);
|
||||
packet.writeD((int) _weekRemainTime);
|
||||
packet.writeD((int) _monthRemainTime);
|
||||
packet.writeC(0x17);
|
||||
packet.writeD(_player.getClassId().getId());
|
||||
packet.writeD(LocalDate.now().getDayOfWeek().ordinal()); // Day of week
|
||||
packet.writeD(_rewards.size());
|
||||
for (DailyMissionDataHolder reward : _rewards)
|
||||
{
|
||||
packet.writeH(reward.getId());
|
||||
packet.writeC(reward.getStatus(_player));
|
||||
packet.writeC(reward.getRequiredCompletions() > 1 ? 0x01 : 0x00);
|
||||
packet.writeD(Math.min(reward.getProgress(_player), _player.getLevel()));
|
||||
packet.writeD(reward.getRequiredCompletions());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
@ -0,0 +1,94 @@
|
||||
/*
|
||||
* 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 org.l2jmobius.gameserver.network.serverpackets.pledgeV2;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.data.xml.impl.DailyMissionData;
|
||||
import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
|
||||
|
||||
/**
|
||||
* @author Mobius
|
||||
*/
|
||||
public class ExPledgeMissionInfo implements IClientOutgoingPacket
|
||||
{
|
||||
private final PlayerInstance _player;
|
||||
private final Collection<DailyMissionDataHolder> _rewards;
|
||||
|
||||
public ExPledgeMissionInfo(PlayerInstance player)
|
||||
{
|
||||
_player = player;
|
||||
_rewards = DailyMissionData.getInstance().getDailyMissionData(player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean write(PacketWriter packet)
|
||||
{
|
||||
if (!DailyMissionData.getInstance().isAvailable() || (_player.getClan() == null))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
OutgoingPackets.EX_PLEDGE_MISSION_INFO.writeId(packet);
|
||||
|
||||
packet.writeD(_rewards.size());
|
||||
for (DailyMissionDataHolder reward : _rewards)
|
||||
{
|
||||
int progress = reward.getProgress(_player);
|
||||
int status = reward.getStatus(_player);
|
||||
|
||||
// TODO: Figure out this.
|
||||
if (reward.isLevelUpMission())
|
||||
{
|
||||
progress = 1;
|
||||
if (status == 2)
|
||||
{
|
||||
if (reward.getRequiredCompletions() <= _player.getLevel())
|
||||
{
|
||||
status = 3;
|
||||
}
|
||||
else
|
||||
{
|
||||
status = 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
status = 0;
|
||||
}
|
||||
}
|
||||
else if (status == 1)
|
||||
{
|
||||
status = 3;
|
||||
}
|
||||
else if (status == 3)
|
||||
{
|
||||
status = 2;
|
||||
}
|
||||
|
||||
packet.writeD(reward.getId());
|
||||
packet.writeD(progress);
|
||||
packet.writeC(status);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
@ -1,60 +1,50 @@
|
||||
/*
|
||||
* 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 org.l2jmobius.gameserver.network.serverpackets.dailymission;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.data.xml.impl.DailyMissionData;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
|
||||
|
||||
/**
|
||||
* @author Sdw
|
||||
*/
|
||||
public class ExConnectedTimeAndGettableReward implements IClientOutgoingPacket
|
||||
{
|
||||
private final int _oneDayRewardAvailableCount;
|
||||
|
||||
public ExConnectedTimeAndGettableReward(PlayerInstance player)
|
||||
{
|
||||
_oneDayRewardAvailableCount = DailyMissionData.getInstance().getDailyMissionData(player).size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean write(PacketWriter packet)
|
||||
{
|
||||
if (!DailyMissionData.getInstance().isAvailable())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
OutgoingPackets.EX_CONNECTED_TIME_AND_GETTABLE_REWARD.writeId(packet);
|
||||
packet.writeD(0x00);
|
||||
packet.writeD(_oneDayRewardAvailableCount);
|
||||
packet.writeD(0x00);
|
||||
packet.writeD(0x00);
|
||||
packet.writeD(0x00);
|
||||
packet.writeD(0x00);
|
||||
packet.writeD(0x00);
|
||||
packet.writeD(0x00);
|
||||
packet.writeD(0x00);
|
||||
packet.writeD(0x00);
|
||||
packet.writeD(0x00);
|
||||
packet.writeD(0x00);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* 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 org.l2jmobius.gameserver.network.serverpackets.pledgeV2;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.data.xml.impl.DailyMissionData;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
|
||||
|
||||
/**
|
||||
* @author Bonux (bonuxq@gmail.com)
|
||||
* @date 29.09.2019
|
||||
**/
|
||||
public class ExPledgeMissionRewardCount implements IClientOutgoingPacket
|
||||
{
|
||||
private final int _doneMissionsCount;
|
||||
private final int _availableMissionsCount;
|
||||
|
||||
public ExPledgeMissionRewardCount(PlayerInstance player)
|
||||
{
|
||||
_doneMissionsCount = (int) DailyMissionData.getInstance().getDailyMissionData(player).stream().filter(d -> d.getRecentlyCompleted(player)).count();
|
||||
_availableMissionsCount = DailyMissionData.getInstance().getDailyMissionData(player).size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean write(PacketWriter packet)
|
||||
{
|
||||
OutgoingPackets.EX_PLEDGE_MISSION_REWARD_COUNT.writeId(packet);
|
||||
|
||||
packet.writeD(Math.min(_availableMissionsCount, _doneMissionsCount)); // Received missions rewards.
|
||||
packet.writeD(_availableMissionsCount); // Available missions rewards. 18 - for noble, 20 - for honnorable noble.
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
@ -1,3 +1,861 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xsd/DailyMission.xsd">
|
||||
<reward id="1001" name="Hunt Lv. 85+ monsters" requiredCompletion="500" isOneTime="false">
|
||||
<!-- Hunt 500 monsters in any hunting ground. (A monster kill is only valid when XP was gained from it.) -->
|
||||
<handler name="monster">
|
||||
<param name="minLevel">85</param>
|
||||
<param name="maxLevel">255</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="150" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="1500" /> <!-- Fame -->
|
||||
</items>
|
||||
</reward>
|
||||
<!-- TODO:
|
||||
<reward id="1002" name="Carry out Lv. 99+ faction quests" requiredCompletion="2" isOneTime="false">
|
||||
Complete 2 Lv. 99+ daily quests of the following factions. Blackbird Clan Mother Tree Guardians Giant Trackers Unworldly Visitors Kingdom's Royal Guard
|
||||
<items>
|
||||
<item id="-200" count="150" /> Clan Reputation
|
||||
<item id="-300" count="1500" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
-->
|
||||
<reward id="1006" name="Ashen Shadow and Mystic Tavern" requiredCompletion="2" isOneTime="false">
|
||||
<!-- Defeat any of the following instanced zone monsters twice. Ashen Shadow Revolutionaries: Final Phase Commander Mystic Tavern Tauti: Seal Angel Mystic Tavern Freya: Frost Glacier Golem Mystic Tavern Kelbim: Typhoon Mystic Tavern Kain: Alfred von Hellmann -->
|
||||
<handler name="monster">
|
||||
<param name="ids">23653,23654,23655,23656,23657,23658,23659,23660,23661,23662,23663,23664,23684,23685,23686</param> <!-- TODO: Check ids Typhoon (25539?) and Alfred von Hellmann -->
|
||||
<param name="minLevel">99</param>
|
||||
<param name="maxLevel">255</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="200" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="2000" /> <!-- Fame -->
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="1007" name="Go Fishing" requiredCompletion="100" isOneTime="false">
|
||||
<!-- Successfully catch any type of fish 100 times at the Fishing Dock. -->
|
||||
<handler name="fishing" />
|
||||
<items>
|
||||
<item id="-200" count="150" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="1500" /> <!-- Fame -->
|
||||
</items>
|
||||
</reward>
|
||||
<!-- TODO:
|
||||
<reward id="1008" name="Rare Auction Bidding" requiredCompletion="1" isOneTime="false">
|
||||
Bid in the Rare Auction once.
|
||||
<items>
|
||||
<item id="-200" count="100" /> Clan Reputation
|
||||
<item id="-300" count="1000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="1009" name="Attempt Augmenting" requiredCompletion="5" isOneTime="false">
|
||||
Attempt Augmenting 5 times with any material and items of any grade.
|
||||
<items>
|
||||
<item id="-200" count="100" /> Clan Reputation
|
||||
<item id="-300" count="1000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="1010" name="Attempt Combining" requiredCompletion="5" isOneTime="false">
|
||||
Attempt Combining 5 times with any item.
|
||||
<items>
|
||||
<item id="-200" count="100" /> Clan Reputation
|
||||
<item id="-300" count="1000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
-->
|
||||
<reward id="1014" name="Command Channel Instance Zone - Stage 1" requiredCompletion="2" isOneTime="false">
|
||||
<!-- Defeat any of the following Instance Zone bosses twice while in command channel. Crystal Prison: Balok Octavis' Cavern: Octavis -->
|
||||
<handler name="monster">
|
||||
<param name="ids">29218,29194,29212</param>
|
||||
<param name="minLevel">99</param>
|
||||
<param name="maxLevel">255</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="150" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="1500" /> <!-- Fame -->
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="1015" name="Olympiad Participation" requiredCompletion="5" isOneTime="false">
|
||||
<!-- Participate in the Olympiad 5 times. -->
|
||||
<handler name="olympiad" />
|
||||
<items>
|
||||
<item id="-200" count="150" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="1500" /> <!-- Fame -->
|
||||
</items>
|
||||
</reward>
|
||||
<!-- TODO:
|
||||
<reward id="1016" name="Ceremony of Chaos Participation" requiredCompletion="5" isOneTime="false">
|
||||
Participate in the Ceremony of Chaos 5 times.
|
||||
<handler name="monster">
|
||||
<param name="minLevel">85</param>
|
||||
<param name="maxLevel">0</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="200" /> Clan Reputation
|
||||
<item id="-300" count="2000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
-->
|
||||
<reward id="1017" name="Command Channel Instance Zone - Stage 2" requiredCompletion="2" isOneTime="false">
|
||||
<!-- Defeat any of the following Instance Zone bosses twice while in command channel. Octavis' Cavern (Epic): Octavis Tauti's Cavern: Tauti Tauti's Cavern (Epic): Tauti Inner Messiah's Castle: Camille -->
|
||||
<handler name="monster">
|
||||
<param name="ids">29194,29212,29236,29237,26236</param> <!-- TODO: Check Camille id 26236 -->
|
||||
<param name="minLevel">99</param>
|
||||
<param name="maxLevel">255</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="200" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="2000" /> <!-- Fame -->
|
||||
</items>
|
||||
</reward>
|
||||
<!-- TODO: Find ids
|
||||
<reward id="1018" name="Command Channel Instance Zone - Stage 3" requiredCompletion="2" isOneTime="false">
|
||||
Defeat any of the following Instance Zone bosses twice while in command channel. Prison of Darkness (Epic): Spezion Last Imperial Tomb (Epic): Scarlet van Halisha Ice Queen's Castle (Epic): Freya
|
||||
<handler name="monster">
|
||||
<param name="ids"></param>
|
||||
<param name="minLevel">99</param>
|
||||
<param name="maxLevel">255</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="200" /> Clan Reputation
|
||||
<item id="-300" count="2000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
-->
|
||||
<reward id="2002" name="Lv. 100-105 Field Boss Hunt" requiredCompletion="2" isOneTime="false">
|
||||
<!-- Defeat 1 of the following twice. Kelbim Ramona -->
|
||||
<handler name="monster">
|
||||
<param name="ids">26124,26143</param>
|
||||
<param name="minLevel">99</param>
|
||||
<param name="maxLevel">255</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="100" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="1000" /> <!-- Fame -->
|
||||
</items>
|
||||
</reward>
|
||||
<!-- TODO:
|
||||
<reward id="2003" name="Join the Keucereus Defense" requiredCompletion="1" isOneTime="false">
|
||||
Join the Keucereus Defense Battle and complete one of the following quests. |Offense| Stop Kain van Halter |Defense| Stop Kain van Halter |Support| Stop Kain van Halter
|
||||
<items>
|
||||
<item id="-200" count="200" /> Clan Reputation
|
||||
<item id="-300" count="2000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
-->
|
||||
<reward id="2004" name="Catch Nimble Fish" requiredCompletion="2500" isOneTime="false">
|
||||
<!-- Catch 2500 Nimble Fish at the Fishing Dock. -->
|
||||
<handler name="fishing" />
|
||||
<items>
|
||||
<item id="-200" count="100" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="1000" /> <!-- Fame -->
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="2005" name="Dimensional Warp Assault" requiredCompletion="100" isOneTime="false">
|
||||
<!-- Defeat the following monster 100 times in the Dimensional Warp. Dimensional Bugbear -->
|
||||
<handler name="monster">
|
||||
<param name="ids">23465</param>
|
||||
<param name="minLevel">99</param>
|
||||
<param name="maxLevel">255</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="250" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="2500" /> <!-- Fame -->
|
||||
</items>
|
||||
</reward>
|
||||
<!-- TODO:
|
||||
<reward id="2006" name="Outer Messiah's Castle Battle" requiredCompletion="10" isOneTime="false">
|
||||
Destroy any of the following siege weapons deployed at the Outer Messiah's Castle 10 times. Embryo Siege Tank Embryo Castle Magic Cannon
|
||||
<items>
|
||||
<item id="-200" count="250" /> Clan Reputation
|
||||
<item id="-300" count="2500" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="2007" name="Challenge the Throne of Heroes" requiredCompletion="1" isOneTime="false">
|
||||
Defeat the following boss once in the Throne of Heroes: Darion
|
||||
<items>
|
||||
<item id="-200" count="150" /> Clan Reputation
|
||||
<item id="-300" count="1500" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="2008" name="1st Rank at the Throne of Heroes" requiredCompletion="1" isOneTime="false">
|
||||
Take part in the Throne of Heroes and help your clan reach the 1st rank. Can only be completed by clan members who took part in the Throne of Heroes directly. (If your clan reaches the 1st rank at the end of the cycle, talk to Orin in the Hunter's Village and select the "Receive the previous cycle's rewards" option to complete this mission)
|
||||
<items>
|
||||
<item id="-200" count="250" /> Clan Reputation
|
||||
<item id="-300" count="2500" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
-->
|
||||
<reward id="2009" name="Defeat the Dimensional Raid Boss" requiredCompletion="1" isOneTime="false">
|
||||
<!-- Defeat 1 of the following once. Isadora Guillotine of Death Antharas' Herald Komabor Vengeful Eligos Vengeful Agonia Nerva Chief Turakan Tegaffe Varkaron -->
|
||||
<handler name="monster">
|
||||
<param name="ids">19125,25892,25946,25956,25961,25922,25929,25983</param>
|
||||
<param name="minLevel">99</param>
|
||||
<param name="maxLevel">255</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="250" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="2500" /> <!-- Fame -->
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="2010" name="Castle Siege: Successful Attack" requiredCompletion="1" isOneTime="false">
|
||||
<!-- Join a castle siege and achieve 1 win as a sieger. -->
|
||||
<handler name="siege">
|
||||
<param name="minLevel">40</param>
|
||||
<param name="maxLevel">255</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="250" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="2500" /> <!-- Fame -->
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="2011" name="Castle Siege: Successful Defense" requiredCompletion="1" isOneTime="false">
|
||||
<!-- Join a castle siege and achieve 1 win as a defender. -->
|
||||
<handler name="siege">
|
||||
<param name="minLevel">40</param>
|
||||
<param name="maxLevel">255</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="250" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="2500" /> <!-- Fame -->
|
||||
</items>
|
||||
</reward>
|
||||
<!-- TODO:
|
||||
<reward id="2012" name="Dimensional Siege: Successful Attack" requiredCompletion="1" isOneTime="false">
|
||||
Join a dimensional castle siege and achieve 1 win as a sieger.
|
||||
<handler name="monster">
|
||||
<param name="minLevel">85</param>
|
||||
<param name="maxLevel">0</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="250" /> Clan Reputation
|
||||
<item id="-300" count="2500" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="2013" name="Dimensional Siege: Successful Defense" requiredCompletion="1" isOneTime="false">
|
||||
Join a dimensional castle siege and achieve 1 win as a defender.
|
||||
<handler name="monster">
|
||||
<param name="minLevel">85</param>
|
||||
<param name="maxLevel">0</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="250" /> Clan Reputation
|
||||
<item id="-300" count="2500" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="2014" name="Olympiad Winner" requiredCompletion="15" isOneTime="false">
|
||||
Achieve 15 wins in the Olympiad.
|
||||
<handler name="olympiad" />
|
||||
<items>
|
||||
<item id="-200" count="250" /> Clan Reputation
|
||||
<item id="-300" count="2500" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="2015" name="Olympiad Hero" requiredCompletion="1" isOneTime="false">
|
||||
Become a Hero of your class in the Olympiad.
|
||||
<items>
|
||||
<item id="-200" count="350" /> Clan Reputation
|
||||
<item id="-300" count="3500" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="2016" name="Ceremony of Chaos Winner" requiredCompletion="12" isOneTime="false">
|
||||
Achieve 12 wins in the Ceremony of Chaos.
|
||||
<items>
|
||||
<item id="-200" count="250" /> Clan Reputation
|
||||
<item id="-300" count="2500" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="2017" name="Ceremony of Chaos Champion" requiredCompletion="1" isOneTime="false">
|
||||
Become the final champion for a cycle of the Ceremony of Chaos.
|
||||
<items>
|
||||
<item id="-200" count="350" /> Clan Reputation
|
||||
<item id="-300" count="3500" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
-->
|
||||
<reward id="2018" name="Throne of Heroes: Defeat Goldberg" requiredCompletion="1" isOneTime="false">
|
||||
<!-- Defeat the following boss once in the Throne of Heroes. Goldberg -->
|
||||
<handler name="monster">
|
||||
<param name="ids">26250</param>
|
||||
<param name="minLevel">99</param>
|
||||
<param name="maxLevel">255</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="150" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="1500" /> <!-- Fame -->
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3001" name="Reach Main Class Lv. 99" requiredCompletion="99">
|
||||
<!-- Reach Lv. 99 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">99</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="300" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="3000" /> <!-- Fame -->
|
||||
<item id="45811" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3002" name="Reach Main Class Lv. 100" requiredCompletion="100">
|
||||
<!-- Reach Lv. 100 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">100</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="450" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="4500" /> <!-- Fame -->
|
||||
<item id="45812" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3003" name="Reach Main Class Lv. 101" requiredCompletion="101">
|
||||
<!-- Reach Lv. 101 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">101</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="600" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="6000" /> <!-- Fame -->
|
||||
<item id="45813" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3004" name="Reach Main Class Lv. 102" requiredCompletion="102">
|
||||
<!-- Reach Lv. 102 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">102</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="750" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="7500" /> <!-- Fame -->
|
||||
<item id="45814" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3005" name="Reach Main Class Lv. 103" requiredCompletion="103">
|
||||
<!-- Reach Lv. 103 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">103</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="900" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="9000" /> <!-- Fame -->
|
||||
<item id="45815" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3006" name="Reach Main Class Lv. 104" requiredCompletion="104">
|
||||
<!-- Reach Lv. 104 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">104</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="1050" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="10500" /> <!-- Fame -->
|
||||
<item id="45816" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3007" name="Reach Main Class Lv. 105" requiredCompletion="105">
|
||||
<!-- Reach Lv. 105 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">105</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="1200" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="12000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3008" name="Reach Main Class Lv. 106" requiredCompletion="106">
|
||||
<!-- Reach Lv. 106 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">106</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="1500" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="15000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3009" name="Reach Main Class Lv. 107" requiredCompletion="107">
|
||||
<!-- Reach Lv. 107 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">107</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="1800" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="18000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3010" name="Reach Main Class Lv. 108" requiredCompletion="108">
|
||||
<!-- Reach Lv. 108 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">108</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="2100" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="21000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3011" name="Reach Main Class Lv. 109" requiredCompletion="109">
|
||||
<!-- Reach Lv. 109 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">109</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="2400" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="24000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3012" name="Reach Main Class Lv. 110" requiredCompletion="110">
|
||||
<!-- Reach Lv. 110 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">110</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="2700" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="27000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3013" name="Reach Dual Class Lv. 99" requiredCompletion="99" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 99 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">99</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="300" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="3000" /> <!-- Fame -->
|
||||
<item id="45811" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3014" name="Reach Dual Class Lv. 100" requiredCompletion="100" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 100 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">100</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="450" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="4500" /> <!-- Fame -->
|
||||
<item id="45812" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3015" name="Reach Dual Class Lv. 101" requiredCompletion="101" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 101 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">101</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="600" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="6000" /> <!-- Fame -->
|
||||
<item id="45813" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3016" name="Reach Dual Class Lv. 102" requiredCompletion="102" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 102 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">102</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="750" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="7500" /> <!-- Fame -->
|
||||
<item id="45814" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3017" name="Reach Dual Class Lv. 103" requiredCompletion="103" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 103 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">103</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="900" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="9000" /> <!-- Fame -->
|
||||
<item id="45815" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3018" name="Reach Dual Class Lv. 104" requiredCompletion="104" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 104 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">104</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="1050" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="10500" /> <!-- Fame -->
|
||||
<item id="45816" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3019" name="Reach Dual Class Lv. 105" requiredCompletion="105" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 105 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">105</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="1200" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="12000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3020" name="Reach Dual Class Lv. 106" requiredCompletion="106" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 106 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">106</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="1500" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="15000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3021" name="Reach Dual Class Lv. 107" requiredCompletion="107" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 107 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">107</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="1800" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="18000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3022" name="Reach Dual Class Lv. 108" requiredCompletion="108" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 108 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">108</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="2100" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="21000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3023" name="Reach Dual Class Lv. 109" requiredCompletion="109" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 109 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">109</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="2400" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="24000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3024" name="Reach Dual Class Lv. 110" requiredCompletion="110" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 110 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">110</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="2700" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="27000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<!-- TODO:
|
||||
<reward id="3025" name="Obtain Noblesse status" requiredCompletion="1">
|
||||
Obtain the Noblesse status while in a clan.
|
||||
<handler name="monster">
|
||||
<param name="minLevel">85</param>
|
||||
<param name="maxLevel">0</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="300" /> Clan Reputation
|
||||
<item id="-300" count="3000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3026" name="Obtain Exalted Status" requiredCompletion="1">
|
||||
Obtain the Exalted status while in a clan.
|
||||
<handler name="monster">
|
||||
<param name="minLevel">85</param>
|
||||
<param name="maxLevel">0</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="900" /> Clan Reputation
|
||||
<item id="-300" count="9000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
-->
|
||||
<reward id="3027" name="Monster Hunting: First Steps" requiredCompletion="20000">
|
||||
<!-- Hunt 20000 monsters in any hunting ground. (A monster kill is only valid when XP was gained from it.) -->
|
||||
<handler name="monster">
|
||||
<param name="minLevel">1</param>
|
||||
<param name="maxLevel">255</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="300" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="3000" /> <!-- Fame -->
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3028" name="Monster Hunting: Seasoned" requiredCompletion="60000">
|
||||
<!-- Hunt 60000 monsters in any hunting ground. (A monster kill is only valid when XP was gained from it.) -->
|
||||
<handler name="monster">
|
||||
<param name="minLevel">1</param>
|
||||
<param name="maxLevel">255</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="900" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="9000" /> <!-- Fame -->
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3029" name="Monster Hunting: Expert" requiredCompletion="120000">
|
||||
<!-- Hunt 120000 monsters in any hunting ground. (A monster kill is only valid when XP was gained from it.) -->
|
||||
<handler name="monster">
|
||||
<param name="minLevel">1</param>
|
||||
<param name="maxLevel">255</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="1800" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="18000" /> <!-- Fame -->
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3030" name="Rare Tavern Monster Hunting" requiredCompletion="10">
|
||||
<!-- Defeat any of the following monsters that appear rarely in the Mystic Tavern 10 times. Mystic Tavern Tauti: Ifrit Mystic Tavern Freya: Ice Knight Mystic Tavern Kelbim: Domithan Mystic Tavern Kain: Eilhalder von Hellmann -->
|
||||
<handler name="monster">
|
||||
<param name="ids">23704,23703,23696,24068</param>
|
||||
<param name="minLevel">99</param>
|
||||
<param name="maxLevel">255</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="300" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="3000" /> <!-- Fame -->
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3031" name="World Boss Raid: First Steps" requiredCompletion="1">
|
||||
<!-- Defeat 1 of the following once. Antharas Valakas Lindvior Fafurion Helios Etis van Etina -->
|
||||
<handler name="monster">
|
||||
<param name="ids">29068,29028,29240,29367,29305,29319</param>
|
||||
<param name="minLevel">99</param>
|
||||
<param name="maxLevel">255</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="200" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="2000" /> <!-- Fame -->
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3032" name="World Boss Raid: Seasoned" requiredCompletion="10">
|
||||
<!-- Defeat 1 of the following 10 times. Antharas Valakas Lindvior Fafurion Helios Etis van Etina -->
|
||||
<handler name="monster">
|
||||
<param name="ids">29068,29028,29240,29367,29305,29319</param>
|
||||
<param name="minLevel">99</param>
|
||||
<param name="maxLevel">255</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="1000" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="10000" /> <!-- Fame -->
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3033" name="World Boss Raid: Expert" requiredCompletion="30">
|
||||
<!-- Defeat 1 of the following 30 times. Antharas Valakas Lindvior Fafurion Helios Etis van Etina -->
|
||||
<handler name="monster">
|
||||
<param name="ids">29068,29028,29240,29367,29305,29319</param>
|
||||
<param name="minLevel">99</param>
|
||||
<param name="maxLevel">255</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="2000" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="20000" /> <!-- Fame -->
|
||||
</items>
|
||||
</reward>
|
||||
<!-- TODO:
|
||||
<reward id="3034" name="Olympiad Beginner" requiredCompletion="60">
|
||||
Achieve 60 wins in the Olympiad.
|
||||
<handler name="olympiad" />
|
||||
<items>
|
||||
<item id="-200" count="200" /> Clan Reputation
|
||||
<item id="-300" count="2000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3035" name="Olympiad Veteran" requiredCompletion="180">
|
||||
Achieve 180 wins in the Olympiad.
|
||||
<handler name="olympiad" />
|
||||
<items>
|
||||
<item id="-200" count="600" /> Clan Reputation
|
||||
<item id="-300" count="6000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3036" name="Olympiad Master" requiredCompletion="360">
|
||||
Achieve 360 wins in the Olympiad.
|
||||
<handler name="olympiad" />
|
||||
<items>
|
||||
<item id="-200" count="1200" /> Clan Reputation
|
||||
<item id="-300" count="12000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3037" name="Olympiad: Hero of Heroes" requiredCompletion="10">
|
||||
Become a Hero 10 times in the Olympiad.
|
||||
<items>
|
||||
<item id="-200" count="3000" /> Clan Reputation
|
||||
<item id="-300" count="30000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3038" name="Olympiad: From Defeat to Victory" requiredCompletion="100">
|
||||
Lose 100 times in the Olympiad to complete this achievement.
|
||||
<items>
|
||||
<item id="-200" count="100" /> Clan Reputation
|
||||
<item id="-300" count="1000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
-->
|
||||
<reward id="3039" name="Olympiad Participation Award" requiredCompletion="200">
|
||||
<!-- Participate in the Olympiad 200 times. -->
|
||||
<handler name="olympiad" />
|
||||
<items>
|
||||
<item id="-200" count="200" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="2000" /> <!-- Fame -->
|
||||
</items>
|
||||
</reward>
|
||||
<!-- TODO:
|
||||
<reward id="3040" name="Ceremony of Chaos Beginner" requiredCompletion="50">
|
||||
Achieve 50 wins in the Ceremony of Chaos.
|
||||
<items>
|
||||
<item id="-200" count="400" /> Clan Reputation
|
||||
<item id="-300" count="4000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3041" name="Ceremony of Chaos Veteran" requiredCompletion="150">
|
||||
Achieve 150 wins in the Ceremony of Chaos.
|
||||
<items>
|
||||
<item id="-200" count="1200" /> Clan Reputation
|
||||
<item id="-300" count="12000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3042" name="Ceremony of Chaos Master" requiredCompletion="300">
|
||||
Achieve 300 wins in the Ceremony of Chaos.
|
||||
<items>
|
||||
<item id="-200" count="2400" /> Clan Reputation
|
||||
<item id="-300" count="24000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3043" name="Ceremony of Chaos: Best of the Best" requiredCompletion="10">
|
||||
Become the best Champion 10 times in the Ceremony of Chaos.
|
||||
<items>
|
||||
<item id="-200" count="5000" /> Clan Reputation
|
||||
<item id="-300" count="50000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3044" name="Ceremony of Chaos: Survival Expert" requiredCompletion="100">
|
||||
Become the last survivor 100 times in the Ceremony of Chaos.
|
||||
<items>
|
||||
<item id="-200" count="400" /> Clan Reputation
|
||||
<item id="-300" count="4000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3045" name="Ceremony of Chaos Participation Award" requiredCompletion="200">
|
||||
Participate in the Ceremony of Chaos 200 times.
|
||||
<items>
|
||||
<item id="-200" count="200" /> Clan Reputation
|
||||
<item id="-300" count="2000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3046" name="Ceremony of Chaos Consolation Prize" requiredCompletion="100">
|
||||
Obtain Ruler's Consideration 100 times in the Ceremony of Chaos.
|
||||
<handler name="monster">
|
||||
<param name="minLevel">85</param>
|
||||
<param name="maxLevel">0</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="1000" /> Clan Reputation
|
||||
<item id="-300" count="10000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
-->
|
||||
<reward id="3047" name="Angler's Descendant" requiredCompletion="72000">
|
||||
<!-- Successfully catch any type of fish 72000 times at the Fishing Dock. -->
|
||||
<handler name="fishing" />
|
||||
<items>
|
||||
<item id="-200" count="300" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="3000" /> <!-- Fame -->
|
||||
</items>
|
||||
</reward>
|
||||
<!-- TODO:
|
||||
<reward id="3048" name="Big Player in the Auction House" requiredCompletion="10">
|
||||
Bid in the Rare Auction and win 10 times.
|
||||
<items>
|
||||
<item id="-200" count="1000" /> Clan Reputation
|
||||
<item id="-300" count="10000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3049" name="Novice Recycler" requiredCompletion="10">
|
||||
Perform Crystallization or Alchemy Combination 10 times.
|
||||
<items>
|
||||
<item id="-200" count="100" /> Clan Reputation
|
||||
<item id="-300" count="1000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3050" name="Professional Recycler" requiredCompletion="50">
|
||||
Perform Crystallization or Alchemy Combination 50 times.
|
||||
<items>
|
||||
<item id="-200" count="200" /> Clan Reputation
|
||||
<item id="-300" count="2000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3051" name="Expert Recycler" requiredCompletion="100">
|
||||
Perform Crystallization or Alchemy Combination 100 times.
|
||||
<items>
|
||||
<item id="-200" count="300" /> Clan Reputation
|
||||
<item id="-300" count="3000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3052" name="Obtain Talisman - Insanity !" requiredCompletion="1">
|
||||
Successfully combine Talisman - Insanity once.
|
||||
<items>
|
||||
<item id="-200" count="500" /> Clan Reputation
|
||||
<item id="-300" count="5000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3053" name="Achieve Venir's Talisman Stage 15" requiredCompletion="1">
|
||||
Successfully combine Venir's Talisman Stage 15 once.
|
||||
<items>
|
||||
<item id="-200" count="300" /> Clan Reputation
|
||||
<item id="-300" count="3000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3054" name="Achieve Venir's Talisman Stage 24" requiredCompletion="1">
|
||||
Successfully combine Venir's Talisman Stage 24 once.
|
||||
<items>
|
||||
<item id="-200" count="1000" /> Clan Reputation
|
||||
<item id="-300" count="10000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3055" name="Augmenting Expert: Weapon" requiredCompletion="100">
|
||||
Use the following Spirit Stones to augment weapons 100 times. High-grade Spirit Stone Top-grade Spirit Stone Life Stone Instilled with Giants' Power Franco's Top-grade Spirit Stone
|
||||
<items>
|
||||
<item id="-200" count="1000" /> Clan Reputation
|
||||
<item id="-300" count="10000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3056" name="Augmenting Expert: Accessory" requiredCompletion="100">
|
||||
Use the following Spirit Stones to augment accessories 100 times. High-grade Accessory Spirit Stone Top-grade Accessory Spirit Stone
|
||||
<items>
|
||||
<item id="-200" count="1000" /> Clan Reputation
|
||||
<item id="-300" count="10000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3057" name="Augmenting Expert: Hair Accessory" requiredCompletion="100">
|
||||
Use the following Spirit Stones to augment hair accessories 100 times. Hair Accessory Spirit Stone Circlet Spirit Stone
|
||||
<items>
|
||||
<item id="-200" count="1000" /> Clan Reputation
|
||||
<item id="-300" count="10000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3058" name="All Wiped Out" requiredCompletion="3">
|
||||
Use any of the following Soul Crystals to attempt normal Soul Crystal enhancement 3 times. Kain van Halter's Soul Crystal Stage 8 Mermoden's Soul Crystal Stage 8 Leona's Soul Crystal Stage 8 Pantheon's Soul Crystal Stage 8 Lionel's Soul Crystal Stage 8
|
||||
<items>
|
||||
<item id="-200" count="1000" /> Clan Reputation
|
||||
<item id="-300" count="10000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="4001" name="Using Freya's Scrolls" requiredCompletion="24" isOneTime="false">
|
||||
Use any of the following scrolls 24 times. Freya's Wind Scroll Freya's Scroll of Storm
|
||||
<items>
|
||||
<item id="-200" count="25" /> Clan Reputation
|
||||
<item id="-300" count="250" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="4002" name="Gain PA Points" requiredCompletion="480" isOneTime="false">
|
||||
Gain 480 PA Points.
|
||||
<items>
|
||||
<item id="-200" count="25" /> Clan Reputation
|
||||
<item id="-300" count="250" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
-->
|
||||
</list>
|
@ -38,7 +38,7 @@ public class LevelDailyMissionHandler extends AbstractDailyMissionHandler
|
||||
{
|
||||
super(holder);
|
||||
_level = holder.getParams().getInt("level");
|
||||
_dualclass = holder.getParams().getBoolean("dualclass", false);
|
||||
_dualclass = holder.isDualClassOnly();
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -73,6 +73,12 @@ public class LevelDailyMissionHandler extends AbstractDailyMissionHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isLevelUpMission()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reset()
|
||||
{
|
||||
|
@ -36,7 +36,7 @@
|
||||
<xs:attribute type="xs:short" name="id" />
|
||||
<xs:attribute type="xs:short" name="reward_id" />
|
||||
<xs:attribute type="xs:string" name="name" />
|
||||
<xs:attribute type="xs:short" name="requiredCompletion" />
|
||||
<xs:attribute type="xs:int" name="requiredCompletion" />
|
||||
<xs:attribute type="xs:boolean" name="isOneTime" />
|
||||
<xs:attribute type="xs:boolean" name="isMainClassOnly" />
|
||||
<xs:attribute type="xs:boolean" name="isDualClassOnly" />
|
||||
|
@ -27,10 +27,12 @@ import java.util.logging.Logger;
|
||||
|
||||
import org.l2jmobius.commons.database.DatabaseFactory;
|
||||
import org.l2jmobius.gameserver.enums.DailyMissionStatus;
|
||||
import org.l2jmobius.gameserver.enums.SpecialItemType;
|
||||
import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
|
||||
import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.events.ListenersContainer;
|
||||
import org.l2jmobius.gameserver.model.holders.ItemHolder;
|
||||
|
||||
/**
|
||||
* @author Sdw
|
||||
@ -55,6 +57,11 @@ public abstract class AbstractDailyMissionHandler extends ListenersContainer
|
||||
|
||||
public abstract boolean isAvailable(PlayerInstance player);
|
||||
|
||||
public boolean isLevelUpMission()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
public abstract void init();
|
||||
|
||||
public int getStatus(PlayerInstance player)
|
||||
@ -96,7 +103,7 @@ public abstract class AbstractDailyMissionHandler extends ListenersContainer
|
||||
|
||||
public boolean requestReward(PlayerInstance player)
|
||||
{
|
||||
if (isAvailable(player))
|
||||
if (isAvailable(player) || isLevelUpMission())
|
||||
{
|
||||
giveRewards(player);
|
||||
|
||||
@ -113,7 +120,22 @@ public abstract class AbstractDailyMissionHandler extends ListenersContainer
|
||||
|
||||
protected void giveRewards(PlayerInstance player)
|
||||
{
|
||||
_holder.getRewards().forEach(i -> player.addItem("One Day Reward", i, player, true));
|
||||
for (ItemHolder reward : _holder.getRewards())
|
||||
{
|
||||
if (reward.getId() == SpecialItemType.CLAN_REPUTATION.getClientId())
|
||||
{
|
||||
player.getClan().addReputationScore((int) reward.getCount(), true);
|
||||
}
|
||||
else if (reward.getId() == SpecialItemType.FAME.getClientId())
|
||||
{
|
||||
player.setFame(player.getFame() + (int) reward.getCount());
|
||||
player.broadcastUserInfo();
|
||||
}
|
||||
else
|
||||
{
|
||||
player.addItem("Daily Reward", reward, player, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected void storePlayerEntry(DailyMissionPlayerEntry entry)
|
||||
|
@ -163,6 +163,11 @@ public class DailyMissionDataHolder
|
||||
return (_handler != null) && _handler.getRecentlyCompleted(player);
|
||||
}
|
||||
|
||||
public boolean isLevelUpMission()
|
||||
{
|
||||
return (_handler != null) && _handler.isLevelUpMission();
|
||||
}
|
||||
|
||||
public void reset()
|
||||
{
|
||||
if (_handler != null)
|
||||
|
@ -89,6 +89,8 @@ import org.l2jmobius.gameserver.network.clientpackets.pledgeV2.RequestExPledgeLe
|
||||
import org.l2jmobius.gameserver.network.clientpackets.pledgeV2.RequestExPledgeMasteryInfo;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.pledgeV2.RequestExPledgeMasteryReset;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.pledgeV2.RequestExPledgeMasterySet;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.pledgeV2.RequestExPledgeMissionInfo;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.pledgeV2.RequestExPledgeMissionReward;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.pledgeV2.RequestExPledgeSkillActivate;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.pledgeV2.RequestExPledgeSkillInfo;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.primeshop.RequestBRBuyProduct;
|
||||
@ -425,8 +427,8 @@ public enum ExIncomingPackets implements IIncomingPackets<GameClient>
|
||||
EX_PLEDGE_CONTRIBUTION_INFO(0x13F, null, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_CONTRIBUTION_REWARD(0x140, null, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_LEVEL_UP(0x141, RequestExPledgeLevelUp::new, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_MISSION_INFO(0x142, null, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_MISSION_REWARD(0x143, null, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_MISSION_INFO(0x142, RequestExPledgeMissionInfo::new, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_MISSION_REWARD(0x143, RequestExPledgeMissionReward::new, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_MASTERY_INFO(0x144, RequestExPledgeMasteryInfo::new, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_MASTERY_SET(0x145, RequestExPledgeMasterySet::new, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_MASTERY_RESET(0x146, RequestExPledgeMasteryReset::new, ConnectionState.IN_GAME),
|
||||
|
@ -624,9 +624,6 @@ public class EnterWorld implements IClientIncomingPacket
|
||||
{
|
||||
player.sendPacket(new ExWorldChatCnt(player));
|
||||
}
|
||||
// Removed used by new Clan system.
|
||||
// player.sendPacket(new ExConnectedTimeAndGettableReward(player));
|
||||
// player.sendPacket(new ExOneDayReceiveRewardList(player, true));
|
||||
|
||||
// Handle soulshots, disable all on EnterWorld
|
||||
player.sendPacket(new ExAutoSoulShot(0, true, 0));
|
||||
|
@ -1,71 +0,0 @@
|
||||
/*
|
||||
* 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 org.l2jmobius.gameserver.network.clientpackets.dailymission;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketReader;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.network.GameClient;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.dailymission.ExOneDayReceiveRewardList;
|
||||
|
||||
/**
|
||||
* @author UnAfraid
|
||||
*/
|
||||
public class RequestTodoList implements IClientIncomingPacket
|
||||
{
|
||||
private int _tab;
|
||||
@SuppressWarnings("unused")
|
||||
private boolean _showAllLevels;
|
||||
|
||||
@Override
|
||||
public boolean read(GameClient client, PacketReader packet)
|
||||
{
|
||||
_tab = packet.readC(); // Daily Reward = 9, Event = 1, Instance Zone = 2
|
||||
_showAllLevels = packet.readC() == 1; // Disabled = 0, Enabled = 1
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run(GameClient client)
|
||||
{
|
||||
final PlayerInstance player = client.getPlayer();
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
switch (_tab)
|
||||
{
|
||||
// case 1:
|
||||
// {
|
||||
// player.sendPacket(new ExTodoListInzone());
|
||||
// break;
|
||||
// }
|
||||
// case 2:
|
||||
// {
|
||||
// player.sendPacket(new ExTodoListInzone());
|
||||
// break;
|
||||
// }
|
||||
case 9: // Daily Rewards
|
||||
{
|
||||
// Initial EW request should be false
|
||||
player.sendPacket(new ExOneDayReceiveRewardList(player, true));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -14,32 +14,37 @@
|
||||
* 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 org.l2jmobius.gameserver.network.clientpackets.dailymission;
|
||||
package org.l2jmobius.gameserver.network.clientpackets.pledgeV2;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketReader;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.network.GameClient;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.pledgeV2.ExPledgeMissionInfo;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.pledgeV2.ExPledgeMissionRewardCount;
|
||||
|
||||
/**
|
||||
* @author Mobius
|
||||
*/
|
||||
public class RequestTodoListHTML implements IClientIncomingPacket
|
||||
* @author Bonux (bonuxq@gmail.com)
|
||||
* @date 29.09.2019
|
||||
**/
|
||||
public class RequestExPledgeMissionInfo implements IClientIncomingPacket
|
||||
{
|
||||
@SuppressWarnings("unused")
|
||||
private int _tab;
|
||||
@SuppressWarnings("unused")
|
||||
private String _linkName;
|
||||
|
||||
@Override
|
||||
public boolean read(GameClient client, PacketReader packet)
|
||||
{
|
||||
_tab = packet.readC();
|
||||
_linkName = packet.readS();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run(GameClient client)
|
||||
{
|
||||
final PlayerInstance player = client.getPlayer();
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
client.sendPacket(new ExPledgeMissionRewardCount(player));
|
||||
client.sendPacket(new ExPledgeMissionInfo(player));
|
||||
}
|
||||
}
|
@ -1,62 +1,63 @@
|
||||
/*
|
||||
* 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 org.l2jmobius.gameserver.network.clientpackets.dailymission;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketReader;
|
||||
import org.l2jmobius.gameserver.data.xml.impl.DailyMissionData;
|
||||
import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.network.GameClient;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.dailymission.ExOneDayReceiveRewardList;
|
||||
|
||||
/**
|
||||
* @author Sdw
|
||||
*/
|
||||
public class RequestOneDayRewardReceive implements IClientIncomingPacket
|
||||
{
|
||||
private int _id;
|
||||
|
||||
@Override
|
||||
public boolean read(GameClient client, PacketReader packet)
|
||||
{
|
||||
_id = packet.readH();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run(GameClient client)
|
||||
{
|
||||
final PlayerInstance player = client.getPlayer();
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final Collection<DailyMissionDataHolder> reward = DailyMissionData.getInstance().getDailyMissionData(_id);
|
||||
if ((reward == null) || reward.isEmpty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
reward.stream().filter(o -> o.isDisplayable(player)).forEach(r -> r.requestReward(player));
|
||||
// player.sendPacket(new ExConnectedTimeAndGettableReward(player));
|
||||
player.sendPacket(new ExOneDayReceiveRewardList(player, true));
|
||||
}
|
||||
}
|
||||
/*
|
||||
* 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 org.l2jmobius.gameserver.network.clientpackets.pledgeV2;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketReader;
|
||||
import org.l2jmobius.gameserver.data.xml.impl.DailyMissionData;
|
||||
import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.network.GameClient;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.pledgeV2.ExPledgeMissionInfo;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.pledgeV2.ExPledgeMissionRewardCount;
|
||||
|
||||
/**
|
||||
* @author Mobius
|
||||
*/
|
||||
public class RequestExPledgeMissionReward implements IClientIncomingPacket
|
||||
{
|
||||
private int _id;
|
||||
|
||||
@Override
|
||||
public boolean read(GameClient client, PacketReader packet)
|
||||
{
|
||||
_id = packet.readD();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run(GameClient client)
|
||||
{
|
||||
final PlayerInstance player = client.getPlayer();
|
||||
if ((player == null) || (player.getClan() == null))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final Collection<DailyMissionDataHolder> reward = DailyMissionData.getInstance().getDailyMissionData(_id);
|
||||
if ((reward == null) || reward.isEmpty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
reward.stream().filter(o -> o.isDisplayable(player)).forEach(r -> r.requestReward(player));
|
||||
client.sendPacket(new ExPledgeMissionRewardCount(player));
|
||||
client.sendPacket(new ExPledgeMissionInfo(player));
|
||||
}
|
||||
}
|
@ -1,82 +0,0 @@
|
||||
/*
|
||||
* 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 org.l2jmobius.gameserver.network.serverpackets.dailymission;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.function.Function;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.data.xml.impl.DailyMissionData;
|
||||
import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
|
||||
import org.l2jmobius.gameserver.util.cron4j.Predictor;
|
||||
|
||||
/**
|
||||
* @author Sdw
|
||||
*/
|
||||
public class ExOneDayReceiveRewardList implements IClientOutgoingPacket
|
||||
{
|
||||
final PlayerInstance _player;
|
||||
private final Collection<DailyMissionDataHolder> _rewards;
|
||||
private static final Function<String, Long> _remainTime = pattern -> (new Predictor(pattern).nextMatchingTime() - System.currentTimeMillis()) / 1000;
|
||||
|
||||
private final long _dayRemainTime;
|
||||
private final long _weekRemainTime;
|
||||
private final long _monthRemainTime;
|
||||
|
||||
public ExOneDayReceiveRewardList(PlayerInstance player, boolean sendRewards)
|
||||
{
|
||||
_player = player;
|
||||
_rewards = sendRewards ? DailyMissionData.getInstance().getDailyMissionData(player) : Collections.emptyList();
|
||||
_dayRemainTime = _remainTime.apply("30 6 * * *");
|
||||
_weekRemainTime = _remainTime.apply("30 6 * * 1");
|
||||
_monthRemainTime = _remainTime.apply("30 6 1 * *");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean write(PacketWriter packet)
|
||||
{
|
||||
if (!DailyMissionData.getInstance().isAvailable())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
OutgoingPackets.EX_ONE_DAY_RECEIVE_REWARD_LIST.writeId(packet);
|
||||
|
||||
packet.writeD((int) _dayRemainTime);
|
||||
packet.writeD((int) _weekRemainTime);
|
||||
packet.writeD((int) _monthRemainTime);
|
||||
packet.writeC(0x17);
|
||||
packet.writeD(_player.getClassId().getId());
|
||||
packet.writeD(LocalDate.now().getDayOfWeek().ordinal()); // Day of week
|
||||
packet.writeD(_rewards.size());
|
||||
for (DailyMissionDataHolder reward : _rewards)
|
||||
{
|
||||
packet.writeH(reward.getId());
|
||||
int status = reward.getStatus(_player);
|
||||
packet.writeC(status);
|
||||
packet.writeC(reward.getRequiredCompletions() > 1 ? 0x01 : 0x00);
|
||||
packet.writeD(reward.getParams().getInt("level", -1) == -1 ? (status == 1 ? 0 : reward.getProgress(_player)) : _player.getLevel());
|
||||
packet.writeD(reward.getRequiredCompletions());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
@ -0,0 +1,94 @@
|
||||
/*
|
||||
* 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 org.l2jmobius.gameserver.network.serverpackets.pledgeV2;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.data.xml.impl.DailyMissionData;
|
||||
import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
|
||||
|
||||
/**
|
||||
* @author Mobius
|
||||
*/
|
||||
public class ExPledgeMissionInfo implements IClientOutgoingPacket
|
||||
{
|
||||
private final PlayerInstance _player;
|
||||
private final Collection<DailyMissionDataHolder> _rewards;
|
||||
|
||||
public ExPledgeMissionInfo(PlayerInstance player)
|
||||
{
|
||||
_player = player;
|
||||
_rewards = DailyMissionData.getInstance().getDailyMissionData(player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean write(PacketWriter packet)
|
||||
{
|
||||
if (!DailyMissionData.getInstance().isAvailable() || (_player.getClan() == null))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
OutgoingPackets.EX_PLEDGE_MISSION_INFO.writeId(packet);
|
||||
|
||||
packet.writeD(_rewards.size());
|
||||
for (DailyMissionDataHolder reward : _rewards)
|
||||
{
|
||||
int progress = reward.getProgress(_player);
|
||||
int status = reward.getStatus(_player);
|
||||
|
||||
// TODO: Figure out this.
|
||||
if (reward.isLevelUpMission())
|
||||
{
|
||||
progress = 1;
|
||||
if (status == 2)
|
||||
{
|
||||
if (reward.getRequiredCompletions() <= _player.getLevel())
|
||||
{
|
||||
status = 3;
|
||||
}
|
||||
else
|
||||
{
|
||||
status = 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
status = 0;
|
||||
}
|
||||
}
|
||||
else if (status == 1)
|
||||
{
|
||||
status = 3;
|
||||
}
|
||||
else if (status == 3)
|
||||
{
|
||||
status = 2;
|
||||
}
|
||||
|
||||
packet.writeD(reward.getId());
|
||||
packet.writeD(progress);
|
||||
packet.writeC(status);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
@ -1,60 +1,50 @@
|
||||
/*
|
||||
* 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 org.l2jmobius.gameserver.network.serverpackets.dailymission;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.data.xml.impl.DailyMissionData;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
|
||||
|
||||
/**
|
||||
* @author Sdw
|
||||
*/
|
||||
public class ExConnectedTimeAndGettableReward implements IClientOutgoingPacket
|
||||
{
|
||||
private final int _oneDayRewardAvailableCount;
|
||||
|
||||
public ExConnectedTimeAndGettableReward(PlayerInstance player)
|
||||
{
|
||||
_oneDayRewardAvailableCount = DailyMissionData.getInstance().getDailyMissionData(player).size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean write(PacketWriter packet)
|
||||
{
|
||||
if (!DailyMissionData.getInstance().isAvailable())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
OutgoingPackets.EX_CONNECTED_TIME_AND_GETTABLE_REWARD.writeId(packet);
|
||||
packet.writeD(0x00);
|
||||
packet.writeD(_oneDayRewardAvailableCount);
|
||||
packet.writeD(0x00);
|
||||
packet.writeD(0x00);
|
||||
packet.writeD(0x00);
|
||||
packet.writeD(0x00);
|
||||
packet.writeD(0x00);
|
||||
packet.writeD(0x00);
|
||||
packet.writeD(0x00);
|
||||
packet.writeD(0x00);
|
||||
packet.writeD(0x00);
|
||||
packet.writeD(0x00);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* 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 org.l2jmobius.gameserver.network.serverpackets.pledgeV2;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.data.xml.impl.DailyMissionData;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
|
||||
|
||||
/**
|
||||
* @author Bonux (bonuxq@gmail.com)
|
||||
* @date 29.09.2019
|
||||
**/
|
||||
public class ExPledgeMissionRewardCount implements IClientOutgoingPacket
|
||||
{
|
||||
private final int _doneMissionsCount;
|
||||
private final int _availableMissionsCount;
|
||||
|
||||
public ExPledgeMissionRewardCount(PlayerInstance player)
|
||||
{
|
||||
_doneMissionsCount = (int) DailyMissionData.getInstance().getDailyMissionData(player).stream().filter(d -> d.getRecentlyCompleted(player)).count();
|
||||
_availableMissionsCount = DailyMissionData.getInstance().getDailyMissionData(player).size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean write(PacketWriter packet)
|
||||
{
|
||||
OutgoingPackets.EX_PLEDGE_MISSION_REWARD_COUNT.writeId(packet);
|
||||
|
||||
packet.writeD(Math.min(_availableMissionsCount, _doneMissionsCount)); // Received missions rewards.
|
||||
packet.writeD(_availableMissionsCount); // Available missions rewards. 18 - for noble, 20 - for honnorable noble.
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
@ -1,3 +1,861 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xsd/DailyMission.xsd">
|
||||
<reward id="1001" name="Hunt Lv. 85+ monsters" requiredCompletion="500" isOneTime="false">
|
||||
<!-- Hunt 500 monsters in any hunting ground. (A monster kill is only valid when XP was gained from it.) -->
|
||||
<handler name="monster">
|
||||
<param name="minLevel">85</param>
|
||||
<param name="maxLevel">255</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="150" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="1500" /> <!-- Fame -->
|
||||
</items>
|
||||
</reward>
|
||||
<!-- TODO:
|
||||
<reward id="1002" name="Carry out Lv. 99+ faction quests" requiredCompletion="2" isOneTime="false">
|
||||
Complete 2 Lv. 99+ daily quests of the following factions. Blackbird Clan Mother Tree Guardians Giant Trackers Unworldly Visitors Kingdom's Royal Guard
|
||||
<items>
|
||||
<item id="-200" count="150" /> Clan Reputation
|
||||
<item id="-300" count="1500" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
-->
|
||||
<reward id="1006" name="Ashen Shadow and Mystic Tavern" requiredCompletion="2" isOneTime="false">
|
||||
<!-- Defeat any of the following instanced zone monsters twice. Ashen Shadow Revolutionaries: Final Phase Commander Mystic Tavern Tauti: Seal Angel Mystic Tavern Freya: Frost Glacier Golem Mystic Tavern Kelbim: Typhoon Mystic Tavern Kain: Alfred von Hellmann -->
|
||||
<handler name="monster">
|
||||
<param name="ids">23653,23654,23655,23656,23657,23658,23659,23660,23661,23662,23663,23664,23684,23685,23686</param> <!-- TODO: Check ids Typhoon (25539?) and Alfred von Hellmann -->
|
||||
<param name="minLevel">99</param>
|
||||
<param name="maxLevel">255</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="200" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="2000" /> <!-- Fame -->
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="1007" name="Go Fishing" requiredCompletion="100" isOneTime="false">
|
||||
<!-- Successfully catch any type of fish 100 times at the Fishing Dock. -->
|
||||
<handler name="fishing" />
|
||||
<items>
|
||||
<item id="-200" count="150" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="1500" /> <!-- Fame -->
|
||||
</items>
|
||||
</reward>
|
||||
<!-- TODO:
|
||||
<reward id="1008" name="Rare Auction Bidding" requiredCompletion="1" isOneTime="false">
|
||||
Bid in the Rare Auction once.
|
||||
<items>
|
||||
<item id="-200" count="100" /> Clan Reputation
|
||||
<item id="-300" count="1000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="1009" name="Attempt Augmenting" requiredCompletion="5" isOneTime="false">
|
||||
Attempt Augmenting 5 times with any material and items of any grade.
|
||||
<items>
|
||||
<item id="-200" count="100" /> Clan Reputation
|
||||
<item id="-300" count="1000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="1010" name="Attempt Combining" requiredCompletion="5" isOneTime="false">
|
||||
Attempt Combining 5 times with any item.
|
||||
<items>
|
||||
<item id="-200" count="100" /> Clan Reputation
|
||||
<item id="-300" count="1000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
-->
|
||||
<reward id="1014" name="Command Channel Instance Zone - Stage 1" requiredCompletion="2" isOneTime="false">
|
||||
<!-- Defeat any of the following Instance Zone bosses twice while in command channel. Crystal Prison: Balok Octavis' Cavern: Octavis -->
|
||||
<handler name="monster">
|
||||
<param name="ids">29218,29194,29212</param>
|
||||
<param name="minLevel">99</param>
|
||||
<param name="maxLevel">255</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="150" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="1500" /> <!-- Fame -->
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="1015" name="Olympiad Participation" requiredCompletion="5" isOneTime="false">
|
||||
<!-- Participate in the Olympiad 5 times. -->
|
||||
<handler name="olympiad" />
|
||||
<items>
|
||||
<item id="-200" count="150" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="1500" /> <!-- Fame -->
|
||||
</items>
|
||||
</reward>
|
||||
<!-- TODO:
|
||||
<reward id="1016" name="Ceremony of Chaos Participation" requiredCompletion="5" isOneTime="false">
|
||||
Participate in the Ceremony of Chaos 5 times.
|
||||
<handler name="monster">
|
||||
<param name="minLevel">85</param>
|
||||
<param name="maxLevel">0</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="200" /> Clan Reputation
|
||||
<item id="-300" count="2000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
-->
|
||||
<reward id="1017" name="Command Channel Instance Zone - Stage 2" requiredCompletion="2" isOneTime="false">
|
||||
<!-- Defeat any of the following Instance Zone bosses twice while in command channel. Octavis' Cavern (Epic): Octavis Tauti's Cavern: Tauti Tauti's Cavern (Epic): Tauti Inner Messiah's Castle: Camille -->
|
||||
<handler name="monster">
|
||||
<param name="ids">29194,29212,29236,29237,26236</param> <!-- TODO: Check Camille id 26236 -->
|
||||
<param name="minLevel">99</param>
|
||||
<param name="maxLevel">255</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="200" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="2000" /> <!-- Fame -->
|
||||
</items>
|
||||
</reward>
|
||||
<!-- TODO: Find ids
|
||||
<reward id="1018" name="Command Channel Instance Zone - Stage 3" requiredCompletion="2" isOneTime="false">
|
||||
Defeat any of the following Instance Zone bosses twice while in command channel. Prison of Darkness (Epic): Spezion Last Imperial Tomb (Epic): Scarlet van Halisha Ice Queen's Castle (Epic): Freya
|
||||
<handler name="monster">
|
||||
<param name="ids"></param>
|
||||
<param name="minLevel">99</param>
|
||||
<param name="maxLevel">255</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="200" /> Clan Reputation
|
||||
<item id="-300" count="2000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
-->
|
||||
<reward id="2002" name="Lv. 100-105 Field Boss Hunt" requiredCompletion="2" isOneTime="false">
|
||||
<!-- Defeat 1 of the following twice. Kelbim Ramona -->
|
||||
<handler name="monster">
|
||||
<param name="ids">26124,26143</param>
|
||||
<param name="minLevel">99</param>
|
||||
<param name="maxLevel">255</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="100" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="1000" /> <!-- Fame -->
|
||||
</items>
|
||||
</reward>
|
||||
<!-- TODO:
|
||||
<reward id="2003" name="Join the Keucereus Defense" requiredCompletion="1" isOneTime="false">
|
||||
Join the Keucereus Defense Battle and complete one of the following quests. |Offense| Stop Kain van Halter |Defense| Stop Kain van Halter |Support| Stop Kain van Halter
|
||||
<items>
|
||||
<item id="-200" count="200" /> Clan Reputation
|
||||
<item id="-300" count="2000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
-->
|
||||
<reward id="2004" name="Catch Nimble Fish" requiredCompletion="2500" isOneTime="false">
|
||||
<!-- Catch 2500 Nimble Fish at the Fishing Dock. -->
|
||||
<handler name="fishing" />
|
||||
<items>
|
||||
<item id="-200" count="100" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="1000" /> <!-- Fame -->
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="2005" name="Dimensional Warp Assault" requiredCompletion="100" isOneTime="false">
|
||||
<!-- Defeat the following monster 100 times in the Dimensional Warp. Dimensional Bugbear -->
|
||||
<handler name="monster">
|
||||
<param name="ids">23465</param>
|
||||
<param name="minLevel">99</param>
|
||||
<param name="maxLevel">255</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="250" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="2500" /> <!-- Fame -->
|
||||
</items>
|
||||
</reward>
|
||||
<!-- TODO:
|
||||
<reward id="2006" name="Outer Messiah's Castle Battle" requiredCompletion="10" isOneTime="false">
|
||||
Destroy any of the following siege weapons deployed at the Outer Messiah's Castle 10 times. Embryo Siege Tank Embryo Castle Magic Cannon
|
||||
<items>
|
||||
<item id="-200" count="250" /> Clan Reputation
|
||||
<item id="-300" count="2500" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="2007" name="Challenge the Throne of Heroes" requiredCompletion="1" isOneTime="false">
|
||||
Defeat the following boss once in the Throne of Heroes: Darion
|
||||
<items>
|
||||
<item id="-200" count="150" /> Clan Reputation
|
||||
<item id="-300" count="1500" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="2008" name="1st Rank at the Throne of Heroes" requiredCompletion="1" isOneTime="false">
|
||||
Take part in the Throne of Heroes and help your clan reach the 1st rank. Can only be completed by clan members who took part in the Throne of Heroes directly. (If your clan reaches the 1st rank at the end of the cycle, talk to Orin in the Hunter's Village and select the "Receive the previous cycle's rewards" option to complete this mission)
|
||||
<items>
|
||||
<item id="-200" count="250" /> Clan Reputation
|
||||
<item id="-300" count="2500" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
-->
|
||||
<reward id="2009" name="Defeat the Dimensional Raid Boss" requiredCompletion="1" isOneTime="false">
|
||||
<!-- Defeat 1 of the following once. Isadora Guillotine of Death Antharas' Herald Komabor Vengeful Eligos Vengeful Agonia Nerva Chief Turakan Tegaffe Varkaron -->
|
||||
<handler name="monster">
|
||||
<param name="ids">19125,25892,25946,25956,25961,25922,25929,25983</param>
|
||||
<param name="minLevel">99</param>
|
||||
<param name="maxLevel">255</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="250" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="2500" /> <!-- Fame -->
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="2010" name="Castle Siege: Successful Attack" requiredCompletion="1" isOneTime="false">
|
||||
<!-- Join a castle siege and achieve 1 win as a sieger. -->
|
||||
<handler name="siege">
|
||||
<param name="minLevel">40</param>
|
||||
<param name="maxLevel">255</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="250" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="2500" /> <!-- Fame -->
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="2011" name="Castle Siege: Successful Defense" requiredCompletion="1" isOneTime="false">
|
||||
<!-- Join a castle siege and achieve 1 win as a defender. -->
|
||||
<handler name="siege">
|
||||
<param name="minLevel">40</param>
|
||||
<param name="maxLevel">255</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="250" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="2500" /> <!-- Fame -->
|
||||
</items>
|
||||
</reward>
|
||||
<!-- TODO:
|
||||
<reward id="2012" name="Dimensional Siege: Successful Attack" requiredCompletion="1" isOneTime="false">
|
||||
Join a dimensional castle siege and achieve 1 win as a sieger.
|
||||
<handler name="monster">
|
||||
<param name="minLevel">85</param>
|
||||
<param name="maxLevel">0</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="250" /> Clan Reputation
|
||||
<item id="-300" count="2500" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="2013" name="Dimensional Siege: Successful Defense" requiredCompletion="1" isOneTime="false">
|
||||
Join a dimensional castle siege and achieve 1 win as a defender.
|
||||
<handler name="monster">
|
||||
<param name="minLevel">85</param>
|
||||
<param name="maxLevel">0</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="250" /> Clan Reputation
|
||||
<item id="-300" count="2500" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="2014" name="Olympiad Winner" requiredCompletion="15" isOneTime="false">
|
||||
Achieve 15 wins in the Olympiad.
|
||||
<handler name="olympiad" />
|
||||
<items>
|
||||
<item id="-200" count="250" /> Clan Reputation
|
||||
<item id="-300" count="2500" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="2015" name="Olympiad Hero" requiredCompletion="1" isOneTime="false">
|
||||
Become a Hero of your class in the Olympiad.
|
||||
<items>
|
||||
<item id="-200" count="350" /> Clan Reputation
|
||||
<item id="-300" count="3500" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="2016" name="Ceremony of Chaos Winner" requiredCompletion="12" isOneTime="false">
|
||||
Achieve 12 wins in the Ceremony of Chaos.
|
||||
<items>
|
||||
<item id="-200" count="250" /> Clan Reputation
|
||||
<item id="-300" count="2500" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="2017" name="Ceremony of Chaos Champion" requiredCompletion="1" isOneTime="false">
|
||||
Become the final champion for a cycle of the Ceremony of Chaos.
|
||||
<items>
|
||||
<item id="-200" count="350" /> Clan Reputation
|
||||
<item id="-300" count="3500" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
-->
|
||||
<reward id="2018" name="Throne of Heroes: Defeat Goldberg" requiredCompletion="1" isOneTime="false">
|
||||
<!-- Defeat the following boss once in the Throne of Heroes. Goldberg -->
|
||||
<handler name="monster">
|
||||
<param name="ids">26250</param>
|
||||
<param name="minLevel">99</param>
|
||||
<param name="maxLevel">255</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="150" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="1500" /> <!-- Fame -->
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3001" name="Reach Main Class Lv. 99" requiredCompletion="99">
|
||||
<!-- Reach Lv. 99 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">99</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="300" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="3000" /> <!-- Fame -->
|
||||
<item id="45811" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3002" name="Reach Main Class Lv. 100" requiredCompletion="100">
|
||||
<!-- Reach Lv. 100 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">100</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="450" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="4500" /> <!-- Fame -->
|
||||
<item id="45812" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3003" name="Reach Main Class Lv. 101" requiredCompletion="101">
|
||||
<!-- Reach Lv. 101 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">101</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="600" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="6000" /> <!-- Fame -->
|
||||
<item id="45813" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3004" name="Reach Main Class Lv. 102" requiredCompletion="102">
|
||||
<!-- Reach Lv. 102 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">102</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="750" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="7500" /> <!-- Fame -->
|
||||
<item id="45814" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3005" name="Reach Main Class Lv. 103" requiredCompletion="103">
|
||||
<!-- Reach Lv. 103 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">103</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="900" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="9000" /> <!-- Fame -->
|
||||
<item id="45815" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3006" name="Reach Main Class Lv. 104" requiredCompletion="104">
|
||||
<!-- Reach Lv. 104 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">104</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="1050" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="10500" /> <!-- Fame -->
|
||||
<item id="45816" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3007" name="Reach Main Class Lv. 105" requiredCompletion="105">
|
||||
<!-- Reach Lv. 105 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">105</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="1200" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="12000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3008" name="Reach Main Class Lv. 106" requiredCompletion="106">
|
||||
<!-- Reach Lv. 106 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">106</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="1500" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="15000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3009" name="Reach Main Class Lv. 107" requiredCompletion="107">
|
||||
<!-- Reach Lv. 107 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">107</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="1800" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="18000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3010" name="Reach Main Class Lv. 108" requiredCompletion="108">
|
||||
<!-- Reach Lv. 108 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">108</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="2100" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="21000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3011" name="Reach Main Class Lv. 109" requiredCompletion="109">
|
||||
<!-- Reach Lv. 109 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">109</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="2400" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="24000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3012" name="Reach Main Class Lv. 110" requiredCompletion="110">
|
||||
<!-- Reach Lv. 110 for your main class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">110</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="2700" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="27000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3013" name="Reach Dual Class Lv. 99" requiredCompletion="99" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 99 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">99</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="300" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="3000" /> <!-- Fame -->
|
||||
<item id="45811" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3014" name="Reach Dual Class Lv. 100" requiredCompletion="100" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 100 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">100</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="450" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="4500" /> <!-- Fame -->
|
||||
<item id="45812" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3015" name="Reach Dual Class Lv. 101" requiredCompletion="101" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 101 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">101</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="600" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="6000" /> <!-- Fame -->
|
||||
<item id="45813" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3016" name="Reach Dual Class Lv. 102" requiredCompletion="102" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 102 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">102</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="750" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="7500" /> <!-- Fame -->
|
||||
<item id="45814" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3017" name="Reach Dual Class Lv. 103" requiredCompletion="103" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 103 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">103</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="900" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="9000" /> <!-- Fame -->
|
||||
<item id="45815" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3018" name="Reach Dual Class Lv. 104" requiredCompletion="104" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 104 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">104</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="1050" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="10500" /> <!-- Fame -->
|
||||
<item id="45816" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3019" name="Reach Dual Class Lv. 105" requiredCompletion="105" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 105 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">105</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="1200" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="12000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3020" name="Reach Dual Class Lv. 106" requiredCompletion="106" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 106 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">106</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="1500" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="15000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3021" name="Reach Dual Class Lv. 107" requiredCompletion="107" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 107 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">107</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="1800" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="18000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3022" name="Reach Dual Class Lv. 108" requiredCompletion="108" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 108 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">108</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="2100" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="21000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3023" name="Reach Dual Class Lv. 109" requiredCompletion="109" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 109 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">109</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="2400" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="24000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3024" name="Reach Dual Class Lv. 110" requiredCompletion="110" isMainClassOnly="false" isDualClassOnly="true" isDisplayedWhenNotAvailable="false">
|
||||
<!-- Reach Lv. 110 for your dual class while in a clan. -->
|
||||
<handler name="level">
|
||||
<param name="level">110</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="2700" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="27000" /> <!-- Fame -->
|
||||
<item id="47715" count="1" />
|
||||
</items>
|
||||
</reward>
|
||||
<!-- TODO:
|
||||
<reward id="3025" name="Obtain Noblesse status" requiredCompletion="1">
|
||||
Obtain the Noblesse status while in a clan.
|
||||
<handler name="monster">
|
||||
<param name="minLevel">85</param>
|
||||
<param name="maxLevel">0</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="300" /> Clan Reputation
|
||||
<item id="-300" count="3000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3026" name="Obtain Exalted Status" requiredCompletion="1">
|
||||
Obtain the Exalted status while in a clan.
|
||||
<handler name="monster">
|
||||
<param name="minLevel">85</param>
|
||||
<param name="maxLevel">0</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="900" /> Clan Reputation
|
||||
<item id="-300" count="9000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
-->
|
||||
<reward id="3027" name="Monster Hunting: First Steps" requiredCompletion="20000">
|
||||
<!-- Hunt 20000 monsters in any hunting ground. (A monster kill is only valid when XP was gained from it.) -->
|
||||
<handler name="monster">
|
||||
<param name="minLevel">1</param>
|
||||
<param name="maxLevel">255</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="300" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="3000" /> <!-- Fame -->
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3028" name="Monster Hunting: Seasoned" requiredCompletion="60000">
|
||||
<!-- Hunt 60000 monsters in any hunting ground. (A monster kill is only valid when XP was gained from it.) -->
|
||||
<handler name="monster">
|
||||
<param name="minLevel">1</param>
|
||||
<param name="maxLevel">255</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="900" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="9000" /> <!-- Fame -->
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3029" name="Monster Hunting: Expert" requiredCompletion="120000">
|
||||
<!-- Hunt 120000 monsters in any hunting ground. (A monster kill is only valid when XP was gained from it.) -->
|
||||
<handler name="monster">
|
||||
<param name="minLevel">1</param>
|
||||
<param name="maxLevel">255</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="1800" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="18000" /> <!-- Fame -->
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3030" name="Rare Tavern Monster Hunting" requiredCompletion="10">
|
||||
<!-- Defeat any of the following monsters that appear rarely in the Mystic Tavern 10 times. Mystic Tavern Tauti: Ifrit Mystic Tavern Freya: Ice Knight Mystic Tavern Kelbim: Domithan Mystic Tavern Kain: Eilhalder von Hellmann -->
|
||||
<handler name="monster">
|
||||
<param name="ids">23704,23703,23696,24068</param>
|
||||
<param name="minLevel">99</param>
|
||||
<param name="maxLevel">255</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="300" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="3000" /> <!-- Fame -->
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3031" name="World Boss Raid: First Steps" requiredCompletion="1">
|
||||
<!-- Defeat 1 of the following once. Antharas Valakas Lindvior Fafurion Helios Etis van Etina -->
|
||||
<handler name="monster">
|
||||
<param name="ids">29068,29028,29240,29367,29305,29319</param>
|
||||
<param name="minLevel">99</param>
|
||||
<param name="maxLevel">255</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="200" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="2000" /> <!-- Fame -->
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3032" name="World Boss Raid: Seasoned" requiredCompletion="10">
|
||||
<!-- Defeat 1 of the following 10 times. Antharas Valakas Lindvior Fafurion Helios Etis van Etina -->
|
||||
<handler name="monster">
|
||||
<param name="ids">29068,29028,29240,29367,29305,29319</param>
|
||||
<param name="minLevel">99</param>
|
||||
<param name="maxLevel">255</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="1000" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="10000" /> <!-- Fame -->
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3033" name="World Boss Raid: Expert" requiredCompletion="30">
|
||||
<!-- Defeat 1 of the following 30 times. Antharas Valakas Lindvior Fafurion Helios Etis van Etina -->
|
||||
<handler name="monster">
|
||||
<param name="ids">29068,29028,29240,29367,29305,29319</param>
|
||||
<param name="minLevel">99</param>
|
||||
<param name="maxLevel">255</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="2000" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="20000" /> <!-- Fame -->
|
||||
</items>
|
||||
</reward>
|
||||
<!-- TODO:
|
||||
<reward id="3034" name="Olympiad Beginner" requiredCompletion="60">
|
||||
Achieve 60 wins in the Olympiad.
|
||||
<handler name="olympiad" />
|
||||
<items>
|
||||
<item id="-200" count="200" /> Clan Reputation
|
||||
<item id="-300" count="2000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3035" name="Olympiad Veteran" requiredCompletion="180">
|
||||
Achieve 180 wins in the Olympiad.
|
||||
<handler name="olympiad" />
|
||||
<items>
|
||||
<item id="-200" count="600" /> Clan Reputation
|
||||
<item id="-300" count="6000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3036" name="Olympiad Master" requiredCompletion="360">
|
||||
Achieve 360 wins in the Olympiad.
|
||||
<handler name="olympiad" />
|
||||
<items>
|
||||
<item id="-200" count="1200" /> Clan Reputation
|
||||
<item id="-300" count="12000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3037" name="Olympiad: Hero of Heroes" requiredCompletion="10">
|
||||
Become a Hero 10 times in the Olympiad.
|
||||
<items>
|
||||
<item id="-200" count="3000" /> Clan Reputation
|
||||
<item id="-300" count="30000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3038" name="Olympiad: From Defeat to Victory" requiredCompletion="100">
|
||||
Lose 100 times in the Olympiad to complete this achievement.
|
||||
<items>
|
||||
<item id="-200" count="100" /> Clan Reputation
|
||||
<item id="-300" count="1000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
-->
|
||||
<reward id="3039" name="Olympiad Participation Award" requiredCompletion="200">
|
||||
<!-- Participate in the Olympiad 200 times. -->
|
||||
<handler name="olympiad" />
|
||||
<items>
|
||||
<item id="-200" count="200" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="2000" /> <!-- Fame -->
|
||||
</items>
|
||||
</reward>
|
||||
<!-- TODO:
|
||||
<reward id="3040" name="Ceremony of Chaos Beginner" requiredCompletion="50">
|
||||
Achieve 50 wins in the Ceremony of Chaos.
|
||||
<items>
|
||||
<item id="-200" count="400" /> Clan Reputation
|
||||
<item id="-300" count="4000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3041" name="Ceremony of Chaos Veteran" requiredCompletion="150">
|
||||
Achieve 150 wins in the Ceremony of Chaos.
|
||||
<items>
|
||||
<item id="-200" count="1200" /> Clan Reputation
|
||||
<item id="-300" count="12000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3042" name="Ceremony of Chaos Master" requiredCompletion="300">
|
||||
Achieve 300 wins in the Ceremony of Chaos.
|
||||
<items>
|
||||
<item id="-200" count="2400" /> Clan Reputation
|
||||
<item id="-300" count="24000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3043" name="Ceremony of Chaos: Best of the Best" requiredCompletion="10">
|
||||
Become the best Champion 10 times in the Ceremony of Chaos.
|
||||
<items>
|
||||
<item id="-200" count="5000" /> Clan Reputation
|
||||
<item id="-300" count="50000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3044" name="Ceremony of Chaos: Survival Expert" requiredCompletion="100">
|
||||
Become the last survivor 100 times in the Ceremony of Chaos.
|
||||
<items>
|
||||
<item id="-200" count="400" /> Clan Reputation
|
||||
<item id="-300" count="4000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3045" name="Ceremony of Chaos Participation Award" requiredCompletion="200">
|
||||
Participate in the Ceremony of Chaos 200 times.
|
||||
<items>
|
||||
<item id="-200" count="200" /> Clan Reputation
|
||||
<item id="-300" count="2000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3046" name="Ceremony of Chaos Consolation Prize" requiredCompletion="100">
|
||||
Obtain Ruler's Consideration 100 times in the Ceremony of Chaos.
|
||||
<handler name="monster">
|
||||
<param name="minLevel">85</param>
|
||||
<param name="maxLevel">0</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="1000" /> Clan Reputation
|
||||
<item id="-300" count="10000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
-->
|
||||
<reward id="3047" name="Angler's Descendant" requiredCompletion="72000">
|
||||
<!-- Successfully catch any type of fish 72000 times at the Fishing Dock. -->
|
||||
<handler name="fishing" />
|
||||
<items>
|
||||
<item id="-200" count="300" /> <!-- Clan Reputation -->
|
||||
<item id="-300" count="3000" /> <!-- Fame -->
|
||||
</items>
|
||||
</reward>
|
||||
<!-- TODO:
|
||||
<reward id="3048" name="Big Player in the Auction House" requiredCompletion="10">
|
||||
Bid in the Rare Auction and win 10 times.
|
||||
<items>
|
||||
<item id="-200" count="1000" /> Clan Reputation
|
||||
<item id="-300" count="10000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3049" name="Novice Recycler" requiredCompletion="10">
|
||||
Perform Crystallization or Alchemy Combination 10 times.
|
||||
<items>
|
||||
<item id="-200" count="100" /> Clan Reputation
|
||||
<item id="-300" count="1000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3050" name="Professional Recycler" requiredCompletion="50">
|
||||
Perform Crystallization or Alchemy Combination 50 times.
|
||||
<items>
|
||||
<item id="-200" count="200" /> Clan Reputation
|
||||
<item id="-300" count="2000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3051" name="Expert Recycler" requiredCompletion="100">
|
||||
Perform Crystallization or Alchemy Combination 100 times.
|
||||
<items>
|
||||
<item id="-200" count="300" /> Clan Reputation
|
||||
<item id="-300" count="3000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3052" name="Obtain Talisman - Insanity !" requiredCompletion="1">
|
||||
Successfully combine Talisman - Insanity once.
|
||||
<items>
|
||||
<item id="-200" count="500" /> Clan Reputation
|
||||
<item id="-300" count="5000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3053" name="Achieve Venir's Talisman Stage 15" requiredCompletion="1">
|
||||
Successfully combine Venir's Talisman Stage 15 once.
|
||||
<items>
|
||||
<item id="-200" count="300" /> Clan Reputation
|
||||
<item id="-300" count="3000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3054" name="Achieve Venir's Talisman Stage 24" requiredCompletion="1">
|
||||
Successfully combine Venir's Talisman Stage 24 once.
|
||||
<items>
|
||||
<item id="-200" count="1000" /> Clan Reputation
|
||||
<item id="-300" count="10000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3055" name="Augmenting Expert: Weapon" requiredCompletion="100">
|
||||
Use the following Spirit Stones to augment weapons 100 times. High-grade Spirit Stone Top-grade Spirit Stone Life Stone Instilled with Giants' Power Franco's Top-grade Spirit Stone
|
||||
<items>
|
||||
<item id="-200" count="1000" /> Clan Reputation
|
||||
<item id="-300" count="10000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3056" name="Augmenting Expert: Accessory" requiredCompletion="100">
|
||||
Use the following Spirit Stones to augment accessories 100 times. High-grade Accessory Spirit Stone Top-grade Accessory Spirit Stone
|
||||
<items>
|
||||
<item id="-200" count="1000" /> Clan Reputation
|
||||
<item id="-300" count="10000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3057" name="Augmenting Expert: Hair Accessory" requiredCompletion="100">
|
||||
Use the following Spirit Stones to augment hair accessories 100 times. Hair Accessory Spirit Stone Circlet Spirit Stone
|
||||
<items>
|
||||
<item id="-200" count="1000" /> Clan Reputation
|
||||
<item id="-300" count="10000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3058" name="All Wiped Out" requiredCompletion="3">
|
||||
Use any of the following Soul Crystals to attempt normal Soul Crystal enhancement 3 times. Kain van Halter's Soul Crystal Stage 8 Mermoden's Soul Crystal Stage 8 Leona's Soul Crystal Stage 8 Pantheon's Soul Crystal Stage 8 Lionel's Soul Crystal Stage 8
|
||||
<items>
|
||||
<item id="-200" count="1000" /> Clan Reputation
|
||||
<item id="-300" count="10000" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="4001" name="Using Freya's Scrolls" requiredCompletion="24" isOneTime="false">
|
||||
Use any of the following scrolls 24 times. Freya's Wind Scroll Freya's Scroll of Storm
|
||||
<items>
|
||||
<item id="-200" count="25" /> Clan Reputation
|
||||
<item id="-300" count="250" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="4002" name="Gain PA Points" requiredCompletion="480" isOneTime="false">
|
||||
Gain 480 PA Points.
|
||||
<items>
|
||||
<item id="-200" count="25" /> Clan Reputation
|
||||
<item id="-300" count="250" /> Fame
|
||||
</items>
|
||||
</reward>
|
||||
-->
|
||||
</list>
|
@ -38,7 +38,7 @@ public class LevelDailyMissionHandler extends AbstractDailyMissionHandler
|
||||
{
|
||||
super(holder);
|
||||
_level = holder.getParams().getInt("level");
|
||||
_dualclass = holder.getParams().getBoolean("dualclass", false);
|
||||
_dualclass = holder.isDualClassOnly();
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -73,6 +73,12 @@ public class LevelDailyMissionHandler extends AbstractDailyMissionHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isLevelUpMission()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reset()
|
||||
{
|
||||
|
@ -36,7 +36,7 @@
|
||||
<xs:attribute type="xs:short" name="id" />
|
||||
<xs:attribute type="xs:short" name="reward_id" />
|
||||
<xs:attribute type="xs:string" name="name" />
|
||||
<xs:attribute type="xs:short" name="requiredCompletion" />
|
||||
<xs:attribute type="xs:int" name="requiredCompletion" />
|
||||
<xs:attribute type="xs:boolean" name="isOneTime" />
|
||||
<xs:attribute type="xs:boolean" name="isMainClassOnly" />
|
||||
<xs:attribute type="xs:boolean" name="isDualClassOnly" />
|
||||
|
@ -27,10 +27,12 @@ import java.util.logging.Logger;
|
||||
|
||||
import org.l2jmobius.commons.database.DatabaseFactory;
|
||||
import org.l2jmobius.gameserver.enums.DailyMissionStatus;
|
||||
import org.l2jmobius.gameserver.enums.SpecialItemType;
|
||||
import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
|
||||
import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.events.ListenersContainer;
|
||||
import org.l2jmobius.gameserver.model.holders.ItemHolder;
|
||||
|
||||
/**
|
||||
* @author Sdw
|
||||
@ -55,6 +57,11 @@ public abstract class AbstractDailyMissionHandler extends ListenersContainer
|
||||
|
||||
public abstract boolean isAvailable(PlayerInstance player);
|
||||
|
||||
public boolean isLevelUpMission()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
public abstract void init();
|
||||
|
||||
public int getStatus(PlayerInstance player)
|
||||
@ -96,7 +103,7 @@ public abstract class AbstractDailyMissionHandler extends ListenersContainer
|
||||
|
||||
public boolean requestReward(PlayerInstance player)
|
||||
{
|
||||
if (isAvailable(player))
|
||||
if (isAvailable(player) || isLevelUpMission())
|
||||
{
|
||||
giveRewards(player);
|
||||
|
||||
@ -113,7 +120,22 @@ public abstract class AbstractDailyMissionHandler extends ListenersContainer
|
||||
|
||||
protected void giveRewards(PlayerInstance player)
|
||||
{
|
||||
_holder.getRewards().forEach(i -> player.addItem("One Day Reward", i, player, true));
|
||||
for (ItemHolder reward : _holder.getRewards())
|
||||
{
|
||||
if (reward.getId() == SpecialItemType.CLAN_REPUTATION.getClientId())
|
||||
{
|
||||
player.getClan().addReputationScore((int) reward.getCount(), true);
|
||||
}
|
||||
else if (reward.getId() == SpecialItemType.FAME.getClientId())
|
||||
{
|
||||
player.setFame(player.getFame() + (int) reward.getCount());
|
||||
player.broadcastUserInfo();
|
||||
}
|
||||
else
|
||||
{
|
||||
player.addItem("Daily Reward", reward, player, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected void storePlayerEntry(DailyMissionPlayerEntry entry)
|
||||
|
@ -163,6 +163,11 @@ public class DailyMissionDataHolder
|
||||
return (_handler != null) && _handler.getRecentlyCompleted(player);
|
||||
}
|
||||
|
||||
public boolean isLevelUpMission()
|
||||
{
|
||||
return (_handler != null) && _handler.isLevelUpMission();
|
||||
}
|
||||
|
||||
public void reset()
|
||||
{
|
||||
if (_handler != null)
|
||||
|
@ -90,6 +90,8 @@ import org.l2jmobius.gameserver.network.clientpackets.pledgeV2.RequestExPledgeLe
|
||||
import org.l2jmobius.gameserver.network.clientpackets.pledgeV2.RequestExPledgeMasteryInfo;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.pledgeV2.RequestExPledgeMasteryReset;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.pledgeV2.RequestExPledgeMasterySet;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.pledgeV2.RequestExPledgeMissionInfo;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.pledgeV2.RequestExPledgeMissionReward;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.pledgeV2.RequestExPledgeSkillActivate;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.pledgeV2.RequestExPledgeSkillInfo;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.primeshop.RequestBRBuyProduct;
|
||||
@ -431,8 +433,8 @@ public enum ExIncomingPackets implements IIncomingPackets<GameClient>
|
||||
EX_PLEDGE_CONTRIBUTION_INFO(0x13E, null, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_CONTRIBUTION_REWARD(0x13F, null, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_LEVEL_UP(0x140, RequestExPledgeLevelUp::new, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_MISSION_INFO(0x141, null, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_MISSION_REWARD(0x142, null, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_MISSION_INFO(0x141, RequestExPledgeMissionInfo::new, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_MISSION_REWARD(0x142, RequestExPledgeMissionReward::new, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_MASTERY_INFO(0x143, RequestExPledgeMasteryInfo::new, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_MASTERY_SET(0x144, RequestExPledgeMasterySet::new, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_MASTERY_RESET(0x145, RequestExPledgeMasteryReset::new, ConnectionState.IN_GAME),
|
||||
|
@ -626,9 +626,6 @@ public class EnterWorld implements IClientIncomingPacket
|
||||
{
|
||||
player.sendPacket(new ExWorldChatCnt(player));
|
||||
}
|
||||
// Removed used by new Clan system.
|
||||
// player.sendPacket(new ExConnectedTimeAndGettableReward(player));
|
||||
// player.sendPacket(new ExOneDayReceiveRewardList(player, true));
|
||||
|
||||
// Handle soulshots, disable all on EnterWorld
|
||||
player.sendPacket(new ExAutoSoulShot(0, true, 0));
|
||||
|
@ -1,71 +0,0 @@
|
||||
/*
|
||||
* 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 org.l2jmobius.gameserver.network.clientpackets.dailymission;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketReader;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.network.GameClient;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.dailymission.ExOneDayReceiveRewardList;
|
||||
|
||||
/**
|
||||
* @author UnAfraid
|
||||
*/
|
||||
public class RequestTodoList implements IClientIncomingPacket
|
||||
{
|
||||
private int _tab;
|
||||
@SuppressWarnings("unused")
|
||||
private boolean _showAllLevels;
|
||||
|
||||
@Override
|
||||
public boolean read(GameClient client, PacketReader packet)
|
||||
{
|
||||
_tab = packet.readC(); // Daily Reward = 9, Event = 1, Instance Zone = 2
|
||||
_showAllLevels = packet.readC() == 1; // Disabled = 0, Enabled = 1
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run(GameClient client)
|
||||
{
|
||||
final PlayerInstance player = client.getPlayer();
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
switch (_tab)
|
||||
{
|
||||
// case 1:
|
||||
// {
|
||||
// player.sendPacket(new ExTodoListInzone());
|
||||
// break;
|
||||
// }
|
||||
// case 2:
|
||||
// {
|
||||
// player.sendPacket(new ExTodoListInzone());
|
||||
// break;
|
||||
// }
|
||||
case 9: // Daily Rewards
|
||||
{
|
||||
// Initial EW request should be false
|
||||
player.sendPacket(new ExOneDayReceiveRewardList(player, true));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -14,32 +14,37 @@
|
||||
* 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 org.l2jmobius.gameserver.network.clientpackets.dailymission;
|
||||
package org.l2jmobius.gameserver.network.clientpackets.pledgeV2;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketReader;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.network.GameClient;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.pledgeV2.ExPledgeMissionInfo;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.pledgeV2.ExPledgeMissionRewardCount;
|
||||
|
||||
/**
|
||||
* @author Mobius
|
||||
*/
|
||||
public class RequestTodoListHTML implements IClientIncomingPacket
|
||||
* @author Bonux (bonuxq@gmail.com)
|
||||
* @date 29.09.2019
|
||||
**/
|
||||
public class RequestExPledgeMissionInfo implements IClientIncomingPacket
|
||||
{
|
||||
@SuppressWarnings("unused")
|
||||
private int _tab;
|
||||
@SuppressWarnings("unused")
|
||||
private String _linkName;
|
||||
|
||||
@Override
|
||||
public boolean read(GameClient client, PacketReader packet)
|
||||
{
|
||||
_tab = packet.readC();
|
||||
_linkName = packet.readS();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run(GameClient client)
|
||||
{
|
||||
final PlayerInstance player = client.getPlayer();
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
client.sendPacket(new ExPledgeMissionRewardCount(player));
|
||||
client.sendPacket(new ExPledgeMissionInfo(player));
|
||||
}
|
||||
}
|
@ -1,62 +1,63 @@
|
||||
/*
|
||||
* 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 org.l2jmobius.gameserver.network.clientpackets.dailymission;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketReader;
|
||||
import org.l2jmobius.gameserver.data.xml.impl.DailyMissionData;
|
||||
import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.network.GameClient;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.dailymission.ExOneDayReceiveRewardList;
|
||||
|
||||
/**
|
||||
* @author Sdw
|
||||
*/
|
||||
public class RequestOneDayRewardReceive implements IClientIncomingPacket
|
||||
{
|
||||
private int _id;
|
||||
|
||||
@Override
|
||||
public boolean read(GameClient client, PacketReader packet)
|
||||
{
|
||||
_id = packet.readH();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run(GameClient client)
|
||||
{
|
||||
final PlayerInstance player = client.getPlayer();
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final Collection<DailyMissionDataHolder> reward = DailyMissionData.getInstance().getDailyMissionData(_id);
|
||||
if ((reward == null) || reward.isEmpty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
reward.stream().filter(o -> o.isDisplayable(player)).forEach(r -> r.requestReward(player));
|
||||
// player.sendPacket(new ExConnectedTimeAndGettableReward(player));
|
||||
player.sendPacket(new ExOneDayReceiveRewardList(player, true));
|
||||
}
|
||||
}
|
||||
/*
|
||||
* 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 org.l2jmobius.gameserver.network.clientpackets.pledgeV2;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketReader;
|
||||
import org.l2jmobius.gameserver.data.xml.impl.DailyMissionData;
|
||||
import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.network.GameClient;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.pledgeV2.ExPledgeMissionInfo;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.pledgeV2.ExPledgeMissionRewardCount;
|
||||
|
||||
/**
|
||||
* @author Mobius
|
||||
*/
|
||||
public class RequestExPledgeMissionReward implements IClientIncomingPacket
|
||||
{
|
||||
private int _id;
|
||||
|
||||
@Override
|
||||
public boolean read(GameClient client, PacketReader packet)
|
||||
{
|
||||
_id = packet.readD();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run(GameClient client)
|
||||
{
|
||||
final PlayerInstance player = client.getPlayer();
|
||||
if ((player == null) || (player.getClan() == null))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final Collection<DailyMissionDataHolder> reward = DailyMissionData.getInstance().getDailyMissionData(_id);
|
||||
if ((reward == null) || reward.isEmpty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
reward.stream().filter(o -> o.isDisplayable(player)).forEach(r -> r.requestReward(player));
|
||||
client.sendPacket(new ExPledgeMissionRewardCount(player));
|
||||
client.sendPacket(new ExPledgeMissionInfo(player));
|
||||
}
|
||||
}
|
@ -1,82 +0,0 @@
|
||||
/*
|
||||
* 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 org.l2jmobius.gameserver.network.serverpackets.dailymission;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.function.Function;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.data.xml.impl.DailyMissionData;
|
||||
import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
|
||||
import org.l2jmobius.gameserver.util.cron4j.Predictor;
|
||||
|
||||
/**
|
||||
* @author Sdw
|
||||
*/
|
||||
public class ExOneDayReceiveRewardList implements IClientOutgoingPacket
|
||||
{
|
||||
final PlayerInstance _player;
|
||||
private final Collection<DailyMissionDataHolder> _rewards;
|
||||
private static final Function<String, Long> _remainTime = pattern -> (new Predictor(pattern).nextMatchingTime() - System.currentTimeMillis()) / 1000;
|
||||
|
||||
private final long _dayRemainTime;
|
||||
private final long _weekRemainTime;
|
||||
private final long _monthRemainTime;
|
||||
|
||||
public ExOneDayReceiveRewardList(PlayerInstance player, boolean sendRewards)
|
||||
{
|
||||
_player = player;
|
||||
_rewards = sendRewards ? DailyMissionData.getInstance().getDailyMissionData(player) : Collections.emptyList();
|
||||
_dayRemainTime = _remainTime.apply("30 6 * * *");
|
||||
_weekRemainTime = _remainTime.apply("30 6 * * 1");
|
||||
_monthRemainTime = _remainTime.apply("30 6 1 * *");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean write(PacketWriter packet)
|
||||
{
|
||||
if (!DailyMissionData.getInstance().isAvailable())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
OutgoingPackets.EX_ONE_DAY_RECEIVE_REWARD_LIST.writeId(packet);
|
||||
|
||||
packet.writeD((int) _dayRemainTime);
|
||||
packet.writeD((int) _weekRemainTime);
|
||||
packet.writeD((int) _monthRemainTime);
|
||||
packet.writeC(0x17);
|
||||
packet.writeD(_player.getClassId().getId());
|
||||
packet.writeD(LocalDate.now().getDayOfWeek().ordinal()); // Day of week
|
||||
packet.writeD(_rewards.size());
|
||||
for (DailyMissionDataHolder reward : _rewards)
|
||||
{
|
||||
packet.writeH(reward.getId());
|
||||
int status = reward.getStatus(_player);
|
||||
packet.writeC(status);
|
||||
packet.writeC(reward.getRequiredCompletions() > 1 ? 0x01 : 0x00);
|
||||
packet.writeD(reward.getParams().getInt("level", -1) == -1 ? (status == 1 ? 0 : reward.getProgress(_player)) : _player.getLevel());
|
||||
packet.writeD(reward.getRequiredCompletions());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
@ -0,0 +1,94 @@
|
||||
/*
|
||||
* 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 org.l2jmobius.gameserver.network.serverpackets.pledgeV2;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.data.xml.impl.DailyMissionData;
|
||||
import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
|
||||
|
||||
/**
|
||||
* @author Mobius
|
||||
*/
|
||||
public class ExPledgeMissionInfo implements IClientOutgoingPacket
|
||||
{
|
||||
private final PlayerInstance _player;
|
||||
private final Collection<DailyMissionDataHolder> _rewards;
|
||||
|
||||
public ExPledgeMissionInfo(PlayerInstance player)
|
||||
{
|
||||
_player = player;
|
||||
_rewards = DailyMissionData.getInstance().getDailyMissionData(player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean write(PacketWriter packet)
|
||||
{
|
||||
if (!DailyMissionData.getInstance().isAvailable() || (_player.getClan() == null))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
OutgoingPackets.EX_PLEDGE_MISSION_INFO.writeId(packet);
|
||||
|
||||
packet.writeD(_rewards.size());
|
||||
for (DailyMissionDataHolder reward : _rewards)
|
||||
{
|
||||
int progress = reward.getProgress(_player);
|
||||
int status = reward.getStatus(_player);
|
||||
|
||||
// TODO: Figure out this.
|
||||
if (reward.isLevelUpMission())
|
||||
{
|
||||
progress = 1;
|
||||
if (status == 2)
|
||||
{
|
||||
if (reward.getRequiredCompletions() <= _player.getLevel())
|
||||
{
|
||||
status = 3;
|
||||
}
|
||||
else
|
||||
{
|
||||
status = 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
status = 0;
|
||||
}
|
||||
}
|
||||
else if (status == 1)
|
||||
{
|
||||
status = 3;
|
||||
}
|
||||
else if (status == 3)
|
||||
{
|
||||
status = 2;
|
||||
}
|
||||
|
||||
packet.writeD(reward.getId());
|
||||
packet.writeD(progress);
|
||||
packet.writeC(status);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
@ -1,60 +1,50 @@
|
||||
/*
|
||||
* 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 org.l2jmobius.gameserver.network.serverpackets.dailymission;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.data.xml.impl.DailyMissionData;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
|
||||
|
||||
/**
|
||||
* @author Sdw
|
||||
*/
|
||||
public class ExConnectedTimeAndGettableReward implements IClientOutgoingPacket
|
||||
{
|
||||
private final int _oneDayRewardAvailableCount;
|
||||
|
||||
public ExConnectedTimeAndGettableReward(PlayerInstance player)
|
||||
{
|
||||
_oneDayRewardAvailableCount = DailyMissionData.getInstance().getDailyMissionData(player).size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean write(PacketWriter packet)
|
||||
{
|
||||
if (!DailyMissionData.getInstance().isAvailable())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
OutgoingPackets.EX_CONNECTED_TIME_AND_GETTABLE_REWARD.writeId(packet);
|
||||
packet.writeD(0x00);
|
||||
packet.writeD(_oneDayRewardAvailableCount);
|
||||
packet.writeD(0x00);
|
||||
packet.writeD(0x00);
|
||||
packet.writeD(0x00);
|
||||
packet.writeD(0x00);
|
||||
packet.writeD(0x00);
|
||||
packet.writeD(0x00);
|
||||
packet.writeD(0x00);
|
||||
packet.writeD(0x00);
|
||||
packet.writeD(0x00);
|
||||
packet.writeD(0x00);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* 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 org.l2jmobius.gameserver.network.serverpackets.pledgeV2;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.data.xml.impl.DailyMissionData;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
|
||||
|
||||
/**
|
||||
* @author Bonux (bonuxq@gmail.com)
|
||||
* @date 29.09.2019
|
||||
**/
|
||||
public class ExPledgeMissionRewardCount implements IClientOutgoingPacket
|
||||
{
|
||||
private final int _doneMissionsCount;
|
||||
private final int _availableMissionsCount;
|
||||
|
||||
public ExPledgeMissionRewardCount(PlayerInstance player)
|
||||
{
|
||||
_doneMissionsCount = (int) DailyMissionData.getInstance().getDailyMissionData(player).stream().filter(d -> d.getRecentlyCompleted(player)).count();
|
||||
_availableMissionsCount = DailyMissionData.getInstance().getDailyMissionData(player).size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean write(PacketWriter packet)
|
||||
{
|
||||
OutgoingPackets.EX_PLEDGE_MISSION_REWARD_COUNT.writeId(packet);
|
||||
|
||||
packet.writeD(Math.min(_availableMissionsCount, _doneMissionsCount)); // Received missions rewards.
|
||||
packet.writeD(_availableMissionsCount); // Available missions rewards. 18 - for noble, 20 - for honnorable noble.
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user