From 9cfbb265570a8c63db95aa89dc08d9966494d4cf Mon Sep 17 00:00:00 2001
From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com>
Date: Sun, 6 Nov 2022 23:29:45 +0000
Subject: [PATCH] Daily Mission new handler additions and updates. Contributed
by CostyKiller.
---
.../dist/game/data/DailyMission.xml | 1531 +++++++++--------
.../handlers/DailyMissionMasterHandler.java | 36 +-
.../AuctionDailyMissionHandler.java | 93 +
.../AugmentationDailyMissionHandler.java | 133 ++
.../CeremonyOfChaosDailyMissionHandler.java | 37 +-
.../CombinationDailyMissionHandler.java | 152 ++
.../CompoundDailyMissionHandler.java | 152 ++
.../EnchantDailyMissionHandler.java | 137 ++
.../EnsoulDailyMissionHandler.java | 119 ++
.../ExaltedDailyMissionHandler.java | 107 ++
.../FishingDailyMissionHandler.java | 2 +-
.../MentorDailyMissionHandler.java | 107 ++
.../MonsterDailyMissionHandler.java | 73 +-
.../NoblesseDailyMissionHandler.java | 107 ++
.../OlympiadDailyMissionHandler.java | 35 +-
.../QuestDailyMissionHandler.java | 25 +-
.../UseItemDailyMissionHandler.java | 122 ++
.../dist/game/data/xsd/DailyMission.xsd | 1 +
.../dist/game/data/xsd/skills.xsd | 7 +-
.../model/DailyMissionDataHolder.java | 7 +
.../gameserver/model/events/EventType.java | 12 +
.../creature/player/OnPlayerAuctionWin.java | 53 +
.../player/OnPlayerBecomeExalted.java | 45 +
.../player/OnPlayerBecomeNoblesse.java | 45 +
.../OnPlayerMenteeTrainingComplete.java | 52 +
.../player/OnPlayerQuestComplete.java | 9 +-
.../events/impl/item/OnItemCombination.java | 53 +
.../events/impl/item/OnItemCompound.java | 53 +
.../impl/item/OnItemSoulCrystalAdd.java | 10 +-
.../gameserver/model/item/instance/Item.java | 7 -
.../gameserver/model/quest/QuestState.java | 4 +-
.../clientpackets/RequestCrystallizeItem.java | 9 +-
.../alchemy/RequestAlchemyConversion.java | 13 +
.../compound/RequestNewEnchantTry.java | 8 +
.../ensoul/RequestItemEnsoul.java | 10 +-
.../dist/game/data/DailyMission.xml | 1531 +++++++++--------
.../handlers/DailyMissionMasterHandler.java | 36 +-
.../AuctionDailyMissionHandler.java | 93 +
.../AugmentationDailyMissionHandler.java | 133 ++
.../CeremonyOfChaosDailyMissionHandler.java | 37 +-
.../CombinationDailyMissionHandler.java | 152 ++
.../CompoundDailyMissionHandler.java | 152 ++
.../EnchantDailyMissionHandler.java | 137 ++
.../EnsoulDailyMissionHandler.java | 119 ++
.../ExaltedDailyMissionHandler.java | 107 ++
.../FishingDailyMissionHandler.java | 2 +-
.../MentorDailyMissionHandler.java | 107 ++
.../MonsterDailyMissionHandler.java | 73 +-
.../NoblesseDailyMissionHandler.java | 107 ++
.../OlympiadDailyMissionHandler.java | 35 +-
.../QuestDailyMissionHandler.java | 25 +-
.../UseItemDailyMissionHandler.java | 122 ++
.../dist/game/data/xsd/DailyMission.xsd | 1 +
.../dist/game/data/xsd/skills.xsd | 7 +-
.../model/DailyMissionDataHolder.java | 7 +
.../gameserver/model/events/EventType.java | 12 +
.../creature/player/OnPlayerAuctionWin.java | 53 +
.../player/OnPlayerBecomeExalted.java | 45 +
.../player/OnPlayerBecomeNoblesse.java | 45 +
.../OnPlayerMenteeTrainingComplete.java | 52 +
.../player/OnPlayerQuestComplete.java | 9 +-
.../events/impl/item/OnItemCombination.java | 53 +
.../events/impl/item/OnItemCompound.java | 53 +
.../impl/item/OnItemSoulCrystalAdd.java | 10 +-
.../gameserver/model/item/instance/Item.java | 7 -
.../gameserver/model/quest/QuestState.java | 4 +-
.../clientpackets/RequestCrystallizeItem.java | 9 +-
.../alchemy/RequestAlchemyConversion.java | 13 +
.../compound/RequestNewEnchantTry.java | 8 +
.../ensoul/RequestItemEnsoul.java | 10 +-
.../dist/game/data/DailyMission.xml | 738 ++++----
.../handlers/DailyMissionMasterHandler.java | 4 +
.../FishingDailyMissionHandler.java | 2 +-
.../MonsterDailyMissionHandler.java | 65 +-
.../PurgeRewardDailyMissionHandler.java | 100 ++
.../UseItemDailyMissionHandler.java | 122 ++
.../instancemanager/PurgeRankingManager.java | 15 +
.../gameserver/model/events/EventType.java | 2 +
.../events/impl/item/OnItemPurgeReward.java | 53 +
.../dist/game/data/DailyMission.xml | 738 ++++----
.../handlers/DailyMissionMasterHandler.java | 4 +
.../FishingDailyMissionHandler.java | 2 +-
.../MonsterDailyMissionHandler.java | 65 +-
.../PurgeRewardDailyMissionHandler.java | 100 ++
.../UseItemDailyMissionHandler.java | 122 ++
.../instancemanager/PurgeRankingManager.java | 15 +
.../gameserver/model/events/EventType.java | 2 +
.../events/impl/item/OnItemPurgeReward.java | 53 +
88 files changed, 6584 insertions(+), 2350 deletions(-)
create mode 100644 L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/AuctionDailyMissionHandler.java
create mode 100644 L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/AugmentationDailyMissionHandler.java
create mode 100644 L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/CombinationDailyMissionHandler.java
create mode 100644 L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/CompoundDailyMissionHandler.java
create mode 100644 L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/EnchantDailyMissionHandler.java
create mode 100644 L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/EnsoulDailyMissionHandler.java
create mode 100644 L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/ExaltedDailyMissionHandler.java
create mode 100644 L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/MentorDailyMissionHandler.java
create mode 100644 L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/NoblesseDailyMissionHandler.java
create mode 100644 L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/UseItemDailyMissionHandler.java
create mode 100644 L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/creature/player/OnPlayerAuctionWin.java
create mode 100644 L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/creature/player/OnPlayerBecomeExalted.java
create mode 100644 L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/creature/player/OnPlayerBecomeNoblesse.java
create mode 100644 L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/creature/player/OnPlayerMenteeTrainingComplete.java
create mode 100644 L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/item/OnItemCombination.java
create mode 100644 L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/item/OnItemCompound.java
create mode 100644 L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/AuctionDailyMissionHandler.java
create mode 100644 L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/AugmentationDailyMissionHandler.java
create mode 100644 L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/CombinationDailyMissionHandler.java
create mode 100644 L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/CompoundDailyMissionHandler.java
create mode 100644 L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/EnchantDailyMissionHandler.java
create mode 100644 L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/EnsoulDailyMissionHandler.java
create mode 100644 L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/ExaltedDailyMissionHandler.java
create mode 100644 L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/MentorDailyMissionHandler.java
create mode 100644 L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/NoblesseDailyMissionHandler.java
create mode 100644 L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/UseItemDailyMissionHandler.java
create mode 100644 L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/creature/player/OnPlayerAuctionWin.java
create mode 100644 L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/creature/player/OnPlayerBecomeExalted.java
create mode 100644 L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/creature/player/OnPlayerBecomeNoblesse.java
create mode 100644 L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/creature/player/OnPlayerMenteeTrainingComplete.java
create mode 100644 L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/item/OnItemCombination.java
create mode 100644 L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/item/OnItemCompound.java
create mode 100644 L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/scripts/handlers/dailymissionhandlers/PurgeRewardDailyMissionHandler.java
create mode 100644 L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/scripts/handlers/dailymissionhandlers/UseItemDailyMissionHandler.java
create mode 100644 L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/events/impl/item/OnItemPurgeReward.java
create mode 100644 L2J_Mobius_Essence_6.3_Crusader/dist/game/data/scripts/handlers/dailymissionhandlers/PurgeRewardDailyMissionHandler.java
create mode 100644 L2J_Mobius_Essence_6.3_Crusader/dist/game/data/scripts/handlers/dailymissionhandlers/UseItemDailyMissionHandler.java
create mode 100644 L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/model/events/impl/item/OnItemPurgeReward.java
diff --git a/L2J_Mobius_10.2_MasterClass/dist/game/data/DailyMission.xml b/L2J_Mobius_10.2_MasterClass/dist/game/data/DailyMission.xml
index 0bf8ede484..79bb4f6c91 100644
--- a/L2J_Mobius_10.2_MasterClass/dist/game/data/DailyMission.xml
+++ b/L2J_Mobius_10.2_MasterClass/dist/game/data/DailyMission.xml
@@ -9,12 +9,11 @@
-
-
+
-
-
+
+
26431,26433,26435,26437,26439,26441,26443,26444
99
@@ -23,50 +22,43 @@
-
-
+
-
+
-
-
+
-
- Clan Reputation
- Fame
- Vitality
- Prophecy Fragment
+
+
+
-
- Attempt Combining 5 times with any item.
-
+
+
+
- Clan Reputation
- Fame
- Vitality
- Prophecy Fragment
+
+
+
- -->
-
-
+
@@ -75,22 +67,20 @@
-
-
+
24427,24428,24429,24430,24431,24432
- 99
+ 100
255
-
-
+
@@ -103,12 +93,11 @@
-
-
+
-
-
+
+
24470,24471,24472,24473,24474,24475
107
@@ -117,8 +106,7 @@
-
-
+
@@ -131,35 +119,33 @@
-
-
+
-
+ 29213,29380,26093,26094,26096,26099,26102,26461,26462,26463,26464,26465,23653,23654,23655,23656,23657,23658,23659,23660,23661,23662,23663,23664,24813,24814,24815,24816,24817,24818,24819,24820,24821,24822,24823,24824,26390,26467
105
255
-
+
-
-
+
+
-
+ 24849,24850,24851,24852,24853,24854,24855,24856,24857
112
255
-
-
+
@@ -172,17 +158,7 @@
-
-
-
- 29261,25892,29275,29280,29285,25922,25929,29300
-
-
-
-
-
-
-
+
@@ -198,22 +174,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -246,524 +206,28 @@
-
-
-
- 99
-
-
-
-
-
-
-
-
-
-
- 100
-
-
-
-
-
-
-
-
-
-
- 101
-
-
-
-
-
-
-
-
-
-
- 102
-
-
-
-
-
-
-
-
-
-
- 103
-
-
-
-
-
-
-
-
-
-
- 104
-
-
-
-
-
-
-
-
-
-
- 105
-
-
-
-
-
-
-
-
-
-
- 106
-
-
-
-
-
-
-
-
-
-
-
- 107
-
-
-
-
-
-
-
-
-
-
-
- 108
-
-
-
-
-
-
-
-
-
-
-
- 109
-
-
-
-
-
-
-
-
-
-
-
- 110
-
-
-
-
-
-
-
-
-
-
- 111
-
-
-
-
-
-
-
-
-
-
- 112
-
-
-
-
-
-
-
-
-
-
- 113
-
-
-
-
-
-
-
-
-
-
- 114
-
-
-
-
-
-
-
-
-
-
- 115
-
-
-
-
-
-
-
-
-
-
- 116
-
-
-
-
-
-
-
-
-
-
- 117
-
-
-
-
-
-
-
-
-
-
- 118
-
-
-
-
-
-
-
-
-
-
- 119
-
-
-
-
-
-
-
-
-
-
- 120
-
-
-
-
-
-
-
-
-
-
- 99
-
-
-
-
-
-
-
-
-
-
- 100
-
-
-
-
-
-
-
-
-
-
- 101
-
-
-
-
-
-
-
-
-
-
- 102
-
-
-
-
-
-
-
-
-
-
- 103
-
-
-
-
-
-
-
-
-
-
- 104
-
-
-
-
-
-
-
-
-
-
- 105
-
-
-
-
-
-
-
-
-
-
- 106
-
-
-
-
-
-
-
-
-
-
-
- 107
-
-
-
-
-
-
-
-
-
-
-
- 108
-
-
-
-
-
-
-
-
-
-
-
- 109
-
-
-
-
-
-
-
-
-
-
-
- 110
-
-
-
-
-
-
-
-
-
-
- 111
-
-
-
-
-
-
-
-
-
-
- 112
-
-
-
-
-
-
-
-
-
-
- 113
-
-
-
-
-
-
-
-
-
-
- 114
-
-
-
-
-
-
-
-
-
-
- 115
-
-
-
-
-
-
-
-
-
-
- 116
-
-
-
-
-
-
-
-
-
-
- 117
-
-
-
-
-
-
-
-
-
-
- 118
-
-
-
-
-
-
-
-
-
-
- 119
-
-
-
-
-
-
-
-
-
-
- 120
-
-
-
-
-
-
-
-
-
+
85
255
- Clan Reputation
- Fame
+
+
- Obtain the Exalted status while in a clan.
-
+
+
85
255
- Clan Reputation
- Fame
+
+
- -->
-
@@ -775,7 +239,7 @@
-
+
85
@@ -786,7 +250,7 @@
-
+
85
@@ -817,7 +281,7 @@
-
+
29068,29028,29240,29361,29362,29363,29364,29365,29366,29367,29305,29320
@@ -827,7 +291,7 @@
-
+
29068,29028,29240,29361,29362,29363,29364,29365,29366,29367,29305,29320
@@ -845,7 +309,7 @@
-
+
@@ -853,7 +317,7 @@
-
+
@@ -893,7 +357,7 @@
-
+
@@ -901,7 +365,7 @@
-
+
@@ -949,450 +413,1019 @@
-
- Clan Reputation
- Fame
+
+
- Perform Crystallization or Alchemy Combination 10 times.
+
- Clan Reputation
- Fame
+
+
-
- Perform Crystallization or Alchemy Combination 50 times.
+
+
- Clan Reputation
- Fame
+
+
-
- Perform Crystallization or Alchemy Combination 100 times.
+
+
- Clan Reputation
- Fame
+
+
- Successfully compound 1 Talisman of Insanity.
-
+
+
85
255
+ 39572
- Clan Reputation
- Fame
+
+
- Successfully combine Venir's Talisman Lv. 15 once.
-
+
+
85
255
+ 39648
- Clan Reputation
- Fame
+
+
-
- Successfully combine Venir's Talisman Lv. 24 once.
-
+
+
+
85
255
+ 39657
- Clan Reputation
- Fame
+
+
- Use the following Spirit Stones to augment weapons 100 times: High-grade Spirit Stone Top-grade Spirit Stone Life Stone: Giant's Power
+
85
255
+ 45931,45932,36731
- Clan Reputation
- Fame
+
+
- Use the following Spirit Stones to augment accessories 100 times. High-grade Accessory Spirit Stone Top-grade Accessory Spirit Stone
+
85
255
+ 81729,38571
- Clan Reputation
- Fame
+
+
- Use the following Spirit Stones to augment hair accessories 100 times. Hair Accessory Spirit Stone Circlet Spirit Stone
+
85
255
+ 45937,48215
- Clan Reputation
- Fame
+
+
- Enhance your equipment 3 times with any of the following Soul Crystals. Kain's Soul Crystal Lv. 8 Mermoden's Soul Crystal Lv. 8 Leona's Soul Crystal Lv. 8 Pantheon's Soul Crystal Lv. 8 Lionel's Soul Crystal Lv. 8
+
85
255
+ 46451,46466,46481,46496,46511
- Clan Reputation
- Fame
+
+
+
+
+
+
+
+ 85
+ 255
+ 10
+ 28769,28770,28771,28772,28773,28774,28775,28776,28777,28778,28779,28780,28781,28782,28783,28784,28785,28786,28787,28788,28789,28790,28791,28792,28793,28794,28795,28796,28797,28798,28799,28800,28801,28802,28803,28804,28805,28806,28807,28808,28809,28810,28811,28812,28813,28814,28815,28816,28817,18818,28819,28820,28821,28822,28823,28824,28825,28826,28827,28828,28829,28830,28831,28832,28833,28834,28835,28836,28837,28838,28839,28840,28841,28842,28843,28844,28845,28846,28847,28848,28849,28850,28851,28852,28853,28854,28855,28856,28857,28858,28859,28860,28861,28862,28863,28864,28865,28866,28867,28868,28869,28870,28871,28872,28873,28874,28875,28876,28877,28878,28879,28880,28881,28882,28883,28884,28885,28886,28887,28888,28889,28890,28891,28892,28893,28894,28895,28896,28897,28898,28899,28900,28901,28902,28903,28904,28905,28906,28907,28908,28909,28910,28911,28912,28913,28914,28915,28916,28927,28918,28919,28920,28921,28922,28923,28924,28925,28926,28927,28928,28929,28930,28931,28932,28933,28934,28935,28936,28937,28938,28939,28940,28941,28942,28943,28944,28945,28946,28947,28948,28949,28950,28951,28952,28953,28954,28955,28960,28961,28962,28963,28964,28965,28966,28967,28968,28969,28970,28971,28972,28973,28974,28975,28976,28977,28978,28979,28980,28981,28982,28983,28984,28985,28986,28987,28988,28989,28990,28991,28992,28993,28994,28995,28996,28997,28998,28999,29010,29011,29012,29013,29014,29015,29016,29017,29018,29019,29020,29021,29022,29023,29024,29025,29026,29027,29028,29029,29030,29031,29032,29033,29034,29035,29036,29037,29038,29039,29040,29041,29042,29043,29044,29045,29046,29047,29048,29049,29050,29051,29052,29053,29054,29055,29056,48048,48049,48050,48051,48052,48053,48054,48055,48056,48057,48058,48059,80936,80937,80938,80939,80940,80941,80942,80943,80944,80945,80946,80947
+
+
+
+
+
+
+
+
+
+ 85
+ 255
+ 10
+ 28769,28770,28771,28772,28773,28774,28775,28776,28777,28778,28779,28780,28781,28782,28783,28784,28785,28786,28787,28788,28789,28790,28791,28792,28793,28794,28795,28796,28797,28798,28799,28800,28801,28802,28803,28804,28805,28806,28807,28808,28809,28810,28811,28812,28813,28814,28815,28816,28817,18818,28819,28820,28821,28822,28823,28824,28825,28826,28827,28828,28829,28830,28831,28832,28833,28834,28835,28836,28837,28838,28839,28840,28841,28842,28843,28844,28845,28846,28847,28848,28849,28850,28851,28852,28853,28854,28855,28856,28857,28858,28859,28860,28861,28862,28863,28864,28865,28866,28867,28868,28869,28870,28871,28872,28873,28874,28875,28876,28877,28878,28879,28880,28881,28882,28883,28884,28885,28886,28887,28888,28889,28890,28891,28892,28893,28894,28895,28896,28897,28898,28899,28900,28901,28902,28903,28904,28905,28906,28907,28908,28909,28910,28911,28912,28913,28914,28915,28916,28927,28918,28919,28920,28921,28922,28923,28924,28925,28926,28927,28928,28929,28930,28931,28932,28933,28934,28935,28936,28937,28938,28939,28940,28941,28942,28943,28944,28945,28946,28947,28948,28949,28950,28951,28952,28953,28954,28955,28960,28961,28962,28963,28964,28965,28966,28967,28968,28969,28970,28971,28972,28973,28974,28975,28976,28977,28978,28979,28980,28981,28982,28983,28984,28985,28986,28987,28988,28989,28990,28991,28992,28993,28994,28995,28996,28997,28998,28999,29010,29011,29012,29013,29014,29015,29016,29017,29018,29019,29020,29021,29022,29023,29024,29025,29026,29027,29028,29029,29030,29031,29032,29033,29034,29035,29036,29037,29038,29039,29040,29041,29042,29043,29044,29045,29046,29047,29048,29049,29050,29051,29052,29053,29054,29055,29056,48048,48049,48050,48051,48052,48053,48054,48055,48056,48057,48058,48059,80936,80937,80938,80939,80940,80941,80942,80943,80944,80945,80946,80947
+
+
+
+
+
+
+
+
+
+ 85
+ 255
+ 10
+ 28769,28770,28771,28772,28773,28774,28775,28776,28777,28778,28779,28780,28781,28782,28783,28784,28785,28786,28787,28788,28789,28790,28791,28792,28793,28794,28795,28796,28797,28798,28799,28800,28801,28802,28803,28804,28805,28806,28807,28808,28809,28810,28811,28812,28813,28814,28815,28816,28817,18818,28819,28820,28821,28822,28823,28824,28825,28826,28827,28828,28829,28830,28831,28832,28833,28834,28835,28836,28837,28838,28839,28840,28841,28842,28843,28844,28845,28846,28847,28848,28849,28850,28851,28852,28853,28854,28855,28856,28857,28858,28859,28860,28861,28862,28863,28864,28865,28866,28867,28868,28869,28870,28871,28872,28873,28874,28875,28876,28877,28878,28879,28880,28881,28882,28883,28884,28885,28886,28887,28888,28889,28890,28891,28892,28893,28894,28895,28896,28897,28898,28899,28900,28901,28902,28903,28904,28905,28906,28907,28908,28909,28910,28911,28912,28913,28914,28915,28916,28927,28918,28919,28920,28921,28922,28923,28924,28925,28926,28927,28928,28929,28930,28931,28932,28933,28934,28935,28936,28937,28938,28939,28940,28941,28942,28943,28944,28945,28946,28947,28948,28949,28950,28951,28952,28953,28954,28955,28960,28961,28962,28963,28964,28965,28966,28967,28968,28969,28970,28971,28972,28973,28974,28975,28976,28977,28978,28979,28980,28981,28982,28983,28984,28985,28986,28987,28988,28989,28990,28991,28992,28993,28994,28995,28996,28997,28998,28999,29010,29011,29012,29013,29014,29015,29016,29017,29018,29019,29020,29021,29022,29023,29024,29025,29026,29027,29028,29029,29030,29031,29032,29033,29034,29035,29036,29037,29038,29039,29040,29041,29042,29043,29044,29045,29046,29047,29048,29049,29050,29051,29052,29053,29054,29055,29056,48048,48049,48050,48051,48052,48053,48054,48055,48056,48057,48058,48059,80936,80937,80938,80939,80940,80941,80942,80943,80944,80945,80946,80947
+
+
+
+
- Enchant 1 Apocalypse weapon to +10.
+
85
255
+ 10
+ 17324,17325,17326,17327,17328,17329,17330,17331,17332,17333,17334,17335,17336,17337,17865,17866,17867,17868,17869,17870,17871,17872,17873,17874,17875,17876,17877,17878,18001,18002,18003,18004,18005,18006,18007,18008,18009,18010,18011,18012,18013,18014,18704,18705,18706,18707,18708,18709,18710,18711,18712,18713,18714,18715,18716,18717,18718,18719,18720,18721,18722,18723,18724,18725,18726,18727,18728,18729,18730,18731,18732,18733,18734,18734,18735,18736,18737,18738,18739,18740,18741,18742,18743,18744,18745,18746,18747,18748,18749,18750,18751,18752,18753,18754,18755,18756,18757,18758,18759,18760,18761,18762,18763,18764,18765,18766,18767,18768,18769,18770,18771,18772,18773,18774,18775,18776,18777,18778,18779,18780,18781,18782,18783,18784,18785,18786,18787,18788,18789,18790,18791,18792,18793,18794,18795,18796,18797,18798,18799,18800,18801,18802,18803,18804,18805,18806,18807,18808,18809,18810,18811,18812,18813,18814,18815,18816,18817,18818,18819,18820,18821,18822,18823,18824,18825,18826,18827,18828,18829,30022,30023,30024,30025,30026,30027,30028,30029,30030,30031,30032,30033,30034,30035,30036,30037,30038,30039,30040,30041,30042,30043,30044,30045,30046,30047,30048,30049,30050,30051,30052,30053,30054,30055,30056,30057,30058,30059,30060,30061,30062,30063,30064,30065,30066,30067,30068,30069,30070,30071,30072,30073,30074,30075,30076,30077,30078,30079,30080,30081,30082,30083,30084,30085,30086,30087,30088,30089,30090,30091,30092,30093,30094,30095,30096,30097,30098,30099,30100,30101,30102,30103,30104,30105,34509,34510,34511,34512,34513,34514,34515,34516,34516,34517,34518,34519,34520,34521,34522,34523,34524,34525,34526,34527,34528,34529,34530,34531,34532,34533,34534,34535,34536,34537,34538,34539,34540,34541,34542,34543,34544,34545,34546,34547,34548,34549,34550,34551,34552,34553,34554,34556,34557,34558,34559,34560,34561,34562,34563,34564,34565,34566,34567,34567,34568,34569,34570,34571,34572,34573,34574,34719,34720,34721,34722,34723,34724,34725,34726,34727,34728,34729,34730,45823,45824,45825,45826,45827,45828,45829,45830,45831,45832,45833,45834,45835,45836
- Clan Reputation
- Fame
+
+
-
- Enchant 1 Apocalypse weapon to +15.
+
+
85
255
+ 15
+ 17324,17325,17326,17327,17328,17329,17330,17331,17332,17333,17334,17335,17336,17337,17865,17866,17867,17868,17869,17870,17871,17872,17873,17874,17875,17876,17877,17878,18001,18002,18003,18004,18005,18006,18007,18008,18009,18010,18011,18012,18013,18014,18704,18705,18706,18707,18708,18709,18710,18711,18712,18713,18714,18715,18716,18717,18718,18719,18720,18721,18722,18723,18724,18725,18726,18727,18728,18729,18730,18731,18732,18733,18734,18734,18735,18736,18737,18738,18739,18740,18741,18742,18743,18744,18745,18746,18747,18748,18749,18750,18751,18752,18753,18754,18755,18756,18757,18758,18759,18760,18761,18762,18763,18764,18765,18766,18767,18768,18769,18770,18771,18772,18773,18774,18775,18776,18777,18778,18779,18780,18781,18782,18783,18784,18785,18786,18787,18788,18789,18790,18791,18792,18793,18794,18795,18796,18797,18798,18799,18800,18801,18802,18803,18804,18805,18806,18807,18808,18809,18810,18811,18812,18813,18814,18815,18816,18817,18818,18819,18820,18821,18822,18823,18824,18825,18826,18827,18828,18829,30022,30023,30024,30025,30026,30027,30028,30029,30030,30031,30032,30033,30034,30035,30036,30037,30038,30039,30040,30041,30042,30043,30044,30045,30046,30047,30048,30049,30050,30051,30052,30053,30054,30055,30056,30057,30058,30059,30060,30061,30062,30063,30064,30065,30066,30067,30068,30069,30070,30071,30072,30073,30074,30075,30076,30077,30078,30079,30080,30081,30082,30083,30084,30085,30086,30087,30088,30089,30090,30091,30092,30093,30094,30095,30096,30097,30098,30099,30100,30101,30102,30103,30104,30105,34509,34510,34511,34512,34513,34514,34515,34516,34516,34517,34518,34519,34520,34521,34522,34523,34524,34525,34526,34527,34528,34529,34530,34531,34532,34533,34534,34535,34536,34537,34538,34539,34540,34541,34542,34543,34544,34545,34546,34547,34548,34549,34550,34551,34552,34553,34554,34556,34557,34558,34559,34560,34561,34562,34563,34564,34565,34566,34567,34567,34568,34569,34570,34571,34572,34573,34574,34719,34720,34721,34722,34723,34724,34725,34726,34727,34728,34729,34730,45823,45824,45825,45826,45827,45828,45829,45830,45831,45832,45833,45834,45835,45836
- Clan Reputation
- Fame
+
+
-
- Enchant 1 Apocalypse weapon to +20.
+
+
85
255
+ 20
+ 17324,17325,17326,17327,17328,17329,17330,17331,17332,17333,17334,17335,17336,17337,17865,17866,17867,17868,17869,17870,17871,17872,17873,17874,17875,17876,17877,17878,18001,18002,18003,18004,18005,18006,18007,18008,18009,18010,18011,18012,18013,18014,18704,18705,18706,18707,18708,18709,18710,18711,18712,18713,18714,18715,18716,18717,18718,18719,18720,18721,18722,18723,18724,18725,18726,18727,18728,18729,18730,18731,18732,18733,18734,18734,18735,18736,18737,18738,18739,18740,18741,18742,18743,18744,18745,18746,18747,18748,18749,18750,18751,18752,18753,18754,18755,18756,18757,18758,18759,18760,18761,18762,18763,18764,18765,18766,18767,18768,18769,18770,18771,18772,18773,18774,18775,18776,18777,18778,18779,18780,18781,18782,18783,18784,18785,18786,18787,18788,18789,18790,18791,18792,18793,18794,18795,18796,18797,18798,18799,18800,18801,18802,18803,18804,18805,18806,18807,18808,18809,18810,18811,18812,18813,18814,18815,18816,18817,18818,18819,18820,18821,18822,18823,18824,18825,18826,18827,18828,18829,30022,30023,30024,30025,30026,30027,30028,30029,30030,30031,30032,30033,30034,30035,30036,30037,30038,30039,30040,30041,30042,30043,30044,30045,30046,30047,30048,30049,30050,30051,30052,30053,30054,30055,30056,30057,30058,30059,30060,30061,30062,30063,30064,30065,30066,30067,30068,30069,30070,30071,30072,30073,30074,30075,30076,30077,30078,30079,30080,30081,30082,30083,30084,30085,30086,30087,30088,30089,30090,30091,30092,30093,30094,30095,30096,30097,30098,30099,30100,30101,30102,30103,30104,30105,34509,34510,34511,34512,34513,34514,34515,34516,34516,34517,34518,34519,34520,34521,34522,34523,34524,34525,34526,34527,34528,34529,34530,34531,34532,34533,34534,34535,34536,34537,34538,34539,34540,34541,34542,34543,34544,34545,34546,34547,34548,34549,34550,34551,34552,34553,34554,34556,34557,34558,34559,34560,34561,34562,34563,34564,34565,34566,34567,34567,34568,34569,34570,34571,34572,34573,34574,34719,34720,34721,34722,34723,34724,34725,34726,34727,34728,34729,34730,45823,45824,45825,45826,45827,45828,45829,45830,45831,45832,45833,45834,45835,45836
- Clan Reputation
- Fame
+
+
- Enchant 1 Specter weapon to +10.
+
85
255
+ 10
+ 17382,17383,17384,17385,17386,17387,17388,17389,17390,17391,17392,17392,17393,17394,17395,17899,17900,17901,17902,17903,17904,17905,17906,17907,17908,17909,17910,17911,17912,18035,18036,18037,18038,18039,18040,18041,18042,18043,18044,18045,18046,18047,18048,18830,18831,18832,18833,18834,18835,18836,18837,18838,18839,18840,18841,18842,18843,18844,18845,18846,18847,18848,18849,18850,18851,18852,18853,18854,18855,18856,18857,18858,18859,18860,18861,18862,18863,18864,18865,18866,18867,18868,18869,18870,18871,18872,18873,18874,18875,18876,18877,18878,18879,18880,18881,18882,18883,18884,18885,18886,18887,18888,18889,18890,18891,18892,18893,18894,18895,18896,18897,18898,18899,18900,18901,18902,18903,18904,18905,18906,18907,18908,18909,18910,18911,18912,18913,18914,18915,18916,18917,18918,18919,18920,19821,18922,18923,18924,18925,18926,18927,18928,18929,18930,18931,18932,18933,18934,18935,18936,18937,18938,18939,18940,18941,18942,18943,18944,18945,18946,18947,18948,18949,18950,18951,18952,18953,18954,18955,30107,30108,30109,30110,30111,30112,30113,30114,30115,30116,30117,30118,30119,30120,30121,30122,30123,30124,30125,30126,30127,30128,30129,30130,30131,30132,30133,30134,30135,30136,30137,30138,30139,30140,30141,30142,30143,30144,30145,30146,30147,30148,30149,30150,30151,30152,30153,30154,30155,30156,30157,30158,30159,30160,30161,30162,30163,30164,30165,30166,30167,30168,30169,30170,30171,30172,30173,30174,30175,30176,30177,30178,30179,30180,30181,30182,30183,30184,30185,30186,30187,30188,30189,45851,45852,45853,45854,45855,45856,45857,45858,45859,45860,45861,45862,45863,45864
- Clan Reputation
- Fame
+
+
-
- Enchant 1 Specter weapon to +15.
+
+
85
255
+ 15
+ 17382,17383,17384,17385,17386,17387,17388,17389,17390,17391,17392,17392,17393,17394,17395,17899,17900,17901,17902,17903,17904,17905,17906,17907,17908,17909,17910,17911,17912,18035,18036,18037,18038,18039,18040,18041,18042,18043,18044,18045,18046,18047,18048,18830,18831,18832,18833,18834,18835,18836,18837,18838,18839,18840,18841,18842,18843,18844,18845,18846,18847,18848,18849,18850,18851,18852,18853,18854,18855,18856,18857,18858,18859,18860,18861,18862,18863,18864,18865,18866,18867,18868,18869,18870,18871,18872,18873,18874,18875,18876,18877,18878,18879,18880,18881,18882,18883,18884,18885,18886,18887,18888,18889,18890,18891,18892,18893,18894,18895,18896,18897,18898,18899,18900,18901,18902,18903,18904,18905,18906,18907,18908,18909,18910,18911,18912,18913,18914,18915,18916,18917,18918,18919,18920,19821,18922,18923,18924,18925,18926,18927,18928,18929,18930,18931,18932,18933,18934,18935,18936,18937,18938,18939,18940,18941,18942,18943,18944,18945,18946,18947,18948,18949,18950,18951,18952,18953,18954,18955,30107,30108,30109,30110,30111,30112,30113,30114,30115,30116,30117,30118,30119,30120,30121,30122,30123,30124,30125,30126,30127,30128,30129,30130,30131,30132,30133,30134,30135,30136,30137,30138,30139,30140,30141,30142,30143,30144,30145,30146,30147,30148,30149,30150,30151,30152,30153,30154,30155,30156,30157,30158,30159,30160,30161,30162,30163,30164,30165,30166,30167,30168,30169,30170,30171,30172,30173,30174,30175,30176,30177,30178,30179,30180,30181,30182,30183,30184,30185,30186,30187,30188,30189,45851,45852,45853,45854,45855,45856,45857,45858,45859,45860,45861,45862,45863,45864
- Clan Reputation
- Fame
+
+
-
- Enchant 1 Specter weapon to +20.
+
+
85
255
+ 20
+ 17382,17383,17384,17385,17386,17387,17388,17389,17390,17391,17392,17392,17393,17394,17395,17899,17900,17901,17902,17903,17904,17905,17906,17907,17908,17909,17910,17911,17912,18035,18036,18037,18038,18039,18040,18041,18042,18043,18044,18045,18046,18047,18048,18830,18831,18832,18833,18834,18835,18836,18837,18838,18839,18840,18841,18842,18843,18844,18845,18846,18847,18848,18849,18850,18851,18852,18853,18854,18855,18856,18857,18858,18859,18860,18861,18862,18863,18864,18865,18866,18867,18868,18869,18870,18871,18872,18873,18874,18875,18876,18877,18878,18879,18880,18881,18882,18883,18884,18885,18886,18887,18888,18889,18890,18891,18892,18893,18894,18895,18896,18897,18898,18899,18900,18901,18902,18903,18904,18905,18906,18907,18908,18909,18910,18911,18912,18913,18914,18915,18916,18917,18918,18919,18920,19821,18922,18923,18924,18925,18926,18927,18928,18929,18930,18931,18932,18933,18934,18935,18936,18937,18938,18939,18940,18941,18942,18943,18944,18945,18946,18947,18948,18949,18950,18951,18952,18953,18954,18955,30107,30108,30109,30110,30111,30112,30113,30114,30115,30116,30117,30118,30119,30120,30121,30122,30123,30124,30125,30126,30127,30128,30129,30130,30131,30132,30133,30134,30135,30136,30137,30138,30139,30140,30141,30142,30143,30144,30145,30146,30147,30148,30149,30150,30151,30152,30153,30154,30155,30156,30157,30158,30159,30160,30161,30162,30163,30164,30165,30166,30167,30168,30169,30170,30171,30172,30173,30174,30175,30176,30177,30178,30179,30180,30181,30182,30183,30184,30185,30186,30187,30188,30189,45851,45852,45853,45854,45855,45856,45857,45858,45859,45860,45861,45862,45863,45864
- Clan Reputation
- Fame
+
+
- Enchant 1 Helios weapon to +10.
+
85
255
+ 10
+ 17416,17417,17418,17419,17420,17421,17422,17423,17424,17425,17426,17427,17428,17429,17933,17934,17935,17936,17937,17938,17939,17940,17941,17942,17943,17944,17945,17946,18069,18070,18071,18072,18073,18074,18075,18076,18077,18078,18079,18080,18081,18082,18956,18957,18958,18959,18960,18961,18962,18963,18964,18965,18966,18967,18968,18969,18970,18971,18972,18973,18974,18975,18976,18977,18978,18979,18980,18981,18982,18983,18984,18985,18986,18987,18988,18989,18990,18991,18992,18993,18994,18995,18996,18997,18998,18999,19000,19001,19002,19003,19004,19005,19006,19007,19008,19009,19010,19011,19012,19013,19014,19015,19016,19017,19018,19019,19020,19021,19022,19023,19024,19025,19026,19027,19028,19029,19030,19031,19032,19033,19034,19035,19036,19037,19038,19039,19040,19041,19042,19043,19044,19045,19046,19047,19048,19049,19050,19051,19052,19053,19054,19055,19056,19057,19058,19059,19060,19061,19062,19063,19064,19065,19066,19067,19068,19069,19070,19071,19072,19073,19074,19075,19076,19077,19078,19079,19080,19081,30190,30191,30192,30193,30194,30195,30196,30197,30198,30199,30200,30201,30202,30203,30204,30205,30206,30207,30208,30209,30210,30211,30212,30213,30214,30215,30216,30217,30218,30219,30220,30221,30222,30223,30224,30225,30226,30227,30228,30229,30230,30231,30232,30233,30234,30235,30236,30237,30238,30239,30240,30241,30242,30243,30244,30245,30246,30247,30248,30249,30250,30251,30252,30253,30254,30255,30256,30257,30258,30259,30260,30261,30262,30263,30264,30265,30266,30267,30268,30269,30270,30271,30272,30273,45879,45880,45881,45882,45883,45884,45885,45886,45887,45888,45889,45890,45891,45892
- Clan Reputation
- Fame
+
+
-
- Enchant 1 Helios weapon to +15.
+
+
85
255
+ 15
+ 17416,17417,17418,17419,17420,17421,17422,17423,17424,17425,17426,17427,17428,17429,17933,17934,17935,17936,17937,17938,17939,17940,17941,17942,17943,17944,17945,17946,18069,18070,18071,18072,18073,18074,18075,18076,18077,18078,18079,18080,18081,18082,18956,18957,18958,18959,18960,18961,18962,18963,18964,18965,18966,18967,18968,18969,18970,18971,18972,18973,18974,18975,18976,18977,18978,18979,18980,18981,18982,18983,18984,18985,18986,18987,18988,18989,18990,18991,18992,18993,18994,18995,18996,18997,18998,18999,19000,19001,19002,19003,19004,19005,19006,19007,19008,19009,19010,19011,19012,19013,19014,19015,19016,19017,19018,19019,19020,19021,19022,19023,19024,19025,19026,19027,19028,19029,19030,19031,19032,19033,19034,19035,19036,19037,19038,19039,19040,19041,19042,19043,19044,19045,19046,19047,19048,19049,19050,19051,19052,19053,19054,19055,19056,19057,19058,19059,19060,19061,19062,19063,19064,19065,19066,19067,19068,19069,19070,19071,19072,19073,19074,19075,19076,19077,19078,19079,19080,19081,30190,30191,30192,30193,30194,30195,30196,30197,30198,30199,30200,30201,30202,30203,30204,30205,30206,30207,30208,30209,30210,30211,30212,30213,30214,30215,30216,30217,30218,30219,30220,30221,30222,30223,30224,30225,30226,30227,30228,30229,30230,30231,30232,30233,30234,30235,30236,30237,30238,30239,30240,30241,30242,30243,30244,30245,30246,30247,30248,30249,30250,30251,30252,30253,30254,30255,30256,30257,30258,30259,30260,30261,30262,30263,30264,30265,30266,30267,30268,30269,30270,30271,30272,30273,45879,45880,45881,45882,45883,45884,45885,45886,45887,45888,45889,45890,45891,45892
- Clan Reputation
- Fame
+
+
-
- Enchant 1 Helios weapon to +20.
+
+
85
255
+ 20
+ 17416,17417,17418,17419,17420,17421,17422,17423,17424,17425,17426,17427,17428,17429,17933,17934,17935,17936,17937,17938,17939,17940,17941,17942,17943,17944,17945,17946,18069,18070,18071,18072,18073,18074,18075,18076,18077,18078,18079,18080,18081,18082,18956,18957,18958,18959,18960,18961,18962,18963,18964,18965,18966,18967,18968,18969,18970,18971,18972,18973,18974,18975,18976,18977,18978,18979,18980,18981,18982,18983,18984,18985,18986,18987,18988,18989,18990,18991,18992,18993,18994,18995,18996,18997,18998,18999,19000,19001,19002,19003,19004,19005,19006,19007,19008,19009,19010,19011,19012,19013,19014,19015,19016,19017,19018,19019,19020,19021,19022,19023,19024,19025,19026,19027,19028,19029,19030,19031,19032,19033,19034,19035,19036,19037,19038,19039,19040,19041,19042,19043,19044,19045,19046,19047,19048,19049,19050,19051,19052,19053,19054,19055,19056,19057,19058,19059,19060,19061,19062,19063,19064,19065,19066,19067,19068,19069,19070,19071,19072,19073,19074,19075,19076,19077,19078,19079,19080,19081,30190,30191,30192,30193,30194,30195,30196,30197,30198,30199,30200,30201,30202,30203,30204,30205,30206,30207,30208,30209,30210,30211,30212,30213,30214,30215,30216,30217,30218,30219,30220,30221,30222,30223,30224,30225,30226,30227,30228,30229,30230,30231,30232,30233,30234,30235,30236,30237,30238,30239,30240,30241,30242,30243,30244,30245,30246,30247,30248,30249,30250,30251,30252,30253,30254,30255,30256,30257,30258,30259,30260,30261,30262,30263,30264,30265,30266,30267,30268,30269,30270,30271,30272,30273,45879,45880,45881,45882,45883,45884,45885,45886,45887,45888,45889,45890,45891,45892
- Clan Reputation
- Fame
+
+
- Enchant 1 Bloody Helios weapon to +10.
+
85
255
+ 10
+ 35193,35194,35195,35196,35197,35198,35199,35200,35201,35202,35203,35204,35205,35206,35207,35208,35209,35210,35211,35212,35213,35214,35215,35216,35217,35218,35219,35220,35221,35222,35223,35224,35225,35226,35227,35228,35229,35230,35231,35232,35233,35234,35235,35236,35237,35238,35239,35240,35241,35242,35243,35244,35245,35246,35247,35248,35249,35250,35251,35252,35253,35254,35255,35256,35257,35258,35259,35260,35261,35262,35263,35264,35265,35266,35267,35268,35269,35270,35271,35272,35273,35274,35275,35276,35277,35278,35279,35280,35281,35282,35283,35284,35285,35286,35287,35288,35289,35290,80337,80338,80339,80340,80341,80342,80343,80344,80345,80346,80347,80348,80349,80350
- Clan Reputation
- Fame
+
+
-
- Enchant 1 Bloody Helios weapon to +15.
+
+
85
255
+ 15
+ 35193,35194,35195,35196,35197,35198,35199,35200,35201,35202,35203,35204,35205,35206,35207,35208,35209,35210,35211,35212,35213,35214,35215,35216,35217,35218,35219,35220,35221,35222,35223,35224,35225,35226,35227,35228,35229,35230,35231,35232,35233,35234,35235,35236,35237,35238,35239,35240,35241,35242,35243,35244,35245,35246,35247,35248,35249,35250,35251,35252,35253,35254,35255,35256,35257,35258,35259,35260,35261,35262,35263,35264,35265,35266,35267,35268,35269,35270,35271,35272,35273,35274,35275,35276,35277,35278,35279,35280,35281,35282,35283,35284,35285,35286,35287,35288,35289,35290,80337,80338,80339,80340,80341,80342,80343,80344,80345,80346,80347,80348,80349,80350
- Clan Reputation
- Fame
+
+
-
- Enchant 1 Bloody Helios weapon to +20.
+
+
85
255
+ 20
+ 35193,35194,35195,35196,35197,35198,35199,35200,35201,35202,35203,35204,35205,35206,35207,35208,35209,35210,35211,35212,35213,35214,35215,35216,35217,35218,35219,35220,35221,35222,35223,35224,35225,35226,35227,35228,35229,35230,35231,35232,35233,35234,35235,35236,35237,35238,35239,35240,35241,35242,35243,35244,35245,35246,35247,35248,35249,35250,35251,35252,35253,35254,35255,35256,35257,35258,35259,35260,35261,35262,35263,35264,35265,35266,35267,35268,35269,35270,35271,35272,35273,35274,35275,35276,35277,35278,35279,35280,35281,35282,35283,35284,35285,35286,35287,35288,35289,35290,80337,80338,80339,80340,80341,80342,80343,80344,80345,80346,80347,80348,80349,80350
- Clan Reputation
- Fame
+
+
- Enchant 1 Dark Helios weapon to +10.
+
85
255
+ 10
+ 35095,35096,35097,35098,35099,35100,35101,35102,35103,35104,35105,35106,35107,35108,35109,35110,35111,35112,35113,35114,35115,35116,35117,35118,35119,35120,35121,35122,35123,35124,35125,35126,35127,35128,35129,35130,35131,35132,35133,35134,35135,35136,35137,35138,35139,35140,35141,35142,35143,35144,35145,35146,35147,35148,35149,35150,35151,35152,35153,35154,35155,35156,35157,35158,35159,35160,35161,35162,35163,35164,35165,35166,35167,35168,35169,35170,35171,35172,35173,35174,35175,35176,35177,35178,35179,35180,35181,35182,35183,35184,35185,35186,35187,35188,35189,35190,35191,35192
- Clan Reputation
- Fame
+
+
-
- Enchant 1 Dark Helios weapon to +15.
+
+
85
255
+ 15
+ 35095,35096,35097,35098,35099,35100,35101,35102,35103,35104,35105,35106,35107,35108,35109,35110,35111,35112,35113,35114,35115,35116,35117,35118,35119,35120,35121,35122,35123,35124,35125,35126,35127,35128,35129,35130,35131,35132,35133,35134,35135,35136,35137,35138,35139,35140,35141,35142,35143,35144,35145,35146,35147,35148,35149,35150,35151,35152,35153,35154,35155,35156,35157,35158,35159,35160,35161,35162,35163,35164,35165,35166,35167,35168,35169,35170,35171,35172,35173,35174,35175,35176,35177,35178,35179,35180,35181,35182,35183,35184,35185,35186,35187,35188,35189,35190,35191,35192
- Clan Reputation
- Fame
+
+
-
- Enchant 1 Dark Helios weapon to +20.
+
+
85
255
+ 20
+ 35095,35096,35097,35098,35099,35100,35101,35102,35103,35104,35105,35106,35107,35108,35109,35110,35111,35112,35113,35114,35115,35116,35117,35118,35119,35120,35121,35122,35123,35124,35125,35126,35127,35128,35129,35130,35131,35132,35133,35134,35135,35136,35137,35138,35139,35140,35141,35142,35143,35144,35145,35146,35147,35148,35149,35150,35151,35152,35153,35154,35155,35156,35157,35158,35159,35160,35161,35162,35163,35164,35165,35166,35167,35168,35169,35170,35171,35172,35173,35174,35175,35176,35177,35178,35179,35180,35181,35182,35183,35184,35185,35186,35187,35188,35189,35190,35191,35192
- Clan Reputation
- Fame
+
+
- Complete the 'Savior's Path - Hall of Etina' quest.
-
+
+
+ 10890
+
- Clan Reputation
- Fame
+
+
+
+
+
+
+
+ 99
+
+
+
+
+
+
+
+
+
+
+ 100
+
+
+
+
+
+
+
+
+
+
+ 101
+
+
+
+
+
+
+
+
+
+
+ 102
+
+
+
+
+
+
+
+
+
+
+ 103
+
+
+
+
+
+
+
+
+
+
+ 104
+
+
+
+
+
+
+
+
+
+
+ 105
+
+
+
+
+
+
+
+
+
+
+ 106
+
+
+
+
+
+
+
+
+
+
+
+ 107
+
+
+
+
+
+
+
+
+
+
+
+ 108
+
+
+
+
+
+
+
+
+
+
+
+ 109
+
+
+
+
+
+
+
+
+
+
+
+ 110
+
+
+
+
+
+
+
+
+
+
+ 111
+
+
+
+
+
+
+
+
+
+
+ 112
+
+
+
+
+
+
+
+
+
+
+ 113
+
+
+
+
+
+
+
+
+
+
+ 114
+
+
+
+
+
+
+
+
+
+
+ 115
+
+
+
+
+
+
+
+
+
+
+ 116
+
+
+
+
+
+
+
+
+
+
+ 117
+
+
+
+
+
+
+
+
+
+
+ 118
+
+
+
+
+
+
+
+
+
+
+ 119
+
+
+
+
+
+
+
+
+
+
+ 120
+
+
+
+
+
+
+
+
+
+
+ 99
+
+
+
+
+
+
+
+
+
+
+ 100
+
+
+
+
+
+
+
+
+
+
+ 101
+
+
+
+
+
+
+
+
+
+
+ 102
+
+
+
+
+
+
+
+
+
+
+ 103
+
+
+
+
+
+
+
+
+
+
+ 104
+
+
+
+
+
+
+
+
+
+
+ 105
+
+
+
+
+
+
+
+
+
+
+ 106
+
+
+
+
+
+
+
+
+
+
+
+ 107
+
+
+
+
+
+
+
+
+
+
+
+ 108
+
+
+
+
+
+
+
+
+
+
+
+ 109
+
+
+
+
+
+
+
+
+
+
+
+ 110
+
+
+
+
+
+
+
+
+
+
+ 111
+
+
+
+
+
+
+
+
+
+
+ 112
+
+
+
+
+
+
+
+
+
+
+ 113
+
+
+
+
+
+
+
+
+
+
+ 114
+
+
+
+
+
+
+
+
+
+
+ 115
+
+
+
+
+
+
+
+
+
+
+ 116
+
+
+
+
+
+
+
+
+
+
+ 117
+
+
+
+
+
+
+
+
+
+
+ 118
+
+
+
+
+
+
+
+
+
+
+ 119
+
+
+
+
+
+
+
+
+
+
+ 120
+
+
+
+
+
- Use any of the following scrolls 24 times: Freya's Frozen Scroll Freya's Frozen Scroll (Event) Freya's Scroll of Storm Freya's Scroll of Storm (Event) PA Scroll of Storm
+
+ 40227,40231,47382,27673,47428,81054,81140
85
255
- Clan Reputation
- Fame
+
+
- Use any of the following items 8 times: Freya's Ice Rose Freya's Ice Rose (Event) PA Ice Rose
+
+ 48830,80441,80442,29789,48848,60000,80612
85
255
- Clan Reputation
- Fame
+
+
- Use any of the following items 8 times: Glowing Dragon's Attribute Potion (XP) Glowing Dragon's Attribute Potion (XP, Event) PA Glowing Dragon's Attribute Potion (XP)
+
+ 29776,48497,48755,48857,60182,60186,80748,81759
85
255
- Clan Reputation
- Fame
+
+
- Use any of the following items 8 times: Honey Dark Beer PA Honey Dark Beer
+
+ 60179,80747,80842,81011,81460,81747
85
255
- Clan Reputation
- Fame
+
+
- Use any of the following items 4 times: Emperor's Special Cocktail Emperor's Special Cocktail (Event) PA Emperor's Special Cocktail
+
+ 29791,80061,80062,80063,80435,80436,80437,80438,80439,80440,80753,80754,80755,80817,80818,80819,80820,80832,81012
85
255
- Clan Reputation
- Fame
+
+
- Use one of the following items 8 times: Shining Nevit's Gold Hourglass Shining Nevit's Gold Hourglass (Event) PA Shining Nevit's Gold Hourglass
+
+ 48642,60183,60187,80797,80852,81013,81892
85
255
- Clan Reputation
- Fame
+
+
- Use any of the following items 3 times. Abandoned Coal Mines' Time Stone, Storm Isle's Time Stone, Primeval Isle's Time Stone, Golden Altar's Time Stone
+
+ 81358,82134,80996,80905,80997,80906,80998,80960
100
255
- Clan Reputation
- Fame
+
+
-
- Kill 300 monsters in any hunting zone. (A monster kill counts only when XP is gained from it.) Available daily from 11:30 a.m. till 2:30 p.m. The quest progress is saved.
+
+
101
255
+ 11:30
+ 14:30
- Clan Reputation
- Fame
- Special Clan Reward Lv. 1
+
+
+
-
- Kill 300 monsters in any hunting zone. (A monster kill counts only when XP is gained from it.) Available daily from 5:30 p.m. till 8:30 p.m. The quest progress is saved.
+
+
101
255
+ 17:30
+ 20:30
- Clan Reputation
- Fame
- Special Clan Reward Lv. 1
+
+
+
- Kill 900 monsters in the Corroded Fields.
+
- TODO: Add correct monster ids.
100
255
- Clan Reputation
- Fame
- Vitality
+
+
+
+
-
- Fight fire with fire! Kill 1800 monsters in any hunting zone. (A monster kill counts only when XP is gained from it.)
-
- TODO: Add correct monster ids.
+
+
+
105
255
- Clan Reputation
- Fame
- Watermelon Seed
+
+
+
-
- Fight fire with fire! Defeat any of the bosses in the following group instance zones of any difficulty level 3 times: Crystal Prison (Baylor), Nightmare Kamaloka, Ashen Shadow Camp, Krofin's Nest
-
- TODO: Add correct monster ids.
+
+
+
+ 29213,29380,26093,26094,26096,26099,26102,26461,26462,26463,26464,26465,23653,23654,23655,23656,23657,23658,23659,23660,23661,23662,23663,23664,24813,24814,24815,24816,24817,24818,24819,24820,24821,24822,24823,24824,26390,26467
105
255
- Clan Reputation
- Fame
- Watermelon Seed
+
+
+
-
- Train 2 Mentees. (Mentorship lasts until the Mentee reaches Lv. 105.) To add a Mentee open the Friend Manager window (Alt+Y) and open the Mentorship tab.
+
+
85
255
- Clan Reputation
- Fame
-
-
-
- -->
-
-
- 85
- 255
-
-
-
-
+
+
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
index b846e23668..60c4b0c985 100644
--- a/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
+++ b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
@@ -20,17 +20,27 @@ import java.util.logging.Logger;
import org.l2jmobius.gameserver.handler.DailyMissionHandler;
+import handlers.dailymissionhandlers.AuctionDailyMissionHandler;
+import handlers.dailymissionhandlers.AugmentationDailyMissionHandler;
import handlers.dailymissionhandlers.BossDailyMissionHandler;
import handlers.dailymissionhandlers.CeremonyOfChaosDailyMissionHandler;
+import handlers.dailymissionhandlers.CombinationDailyMissionHandler;
+import handlers.dailymissionhandlers.CompoundDailyMissionHandler;
+import handlers.dailymissionhandlers.EnchantDailyMissionHandler;
+import handlers.dailymissionhandlers.EnsoulDailyMissionHandler;
+import handlers.dailymissionhandlers.ExaltedDailyMissionHandler;
import handlers.dailymissionhandlers.FishingDailyMissionHandler;
import handlers.dailymissionhandlers.JoinClanDailyMissionHandler;
import handlers.dailymissionhandlers.LevelDailyMissionHandler;
import handlers.dailymissionhandlers.LoginMonthDailyMissionHandler;
import handlers.dailymissionhandlers.LoginWeekendDailyMissionHandler;
+import handlers.dailymissionhandlers.MentorDailyMissionHandler;
import handlers.dailymissionhandlers.MonsterDailyMissionHandler;
+import handlers.dailymissionhandlers.NoblesseDailyMissionHandler;
import handlers.dailymissionhandlers.OlympiadDailyMissionHandler;
import handlers.dailymissionhandlers.QuestDailyMissionHandler;
import handlers.dailymissionhandlers.SiegeDailyMissionHandler;
+import handlers.dailymissionhandlers.UseItemDailyMissionHandler;
/**
* @author UnAfraid
@@ -41,17 +51,27 @@ public class DailyMissionMasterHandler
public static void main(String[] args)
{
- DailyMissionHandler.getInstance().registerHandler("level", LevelDailyMissionHandler::new);
- DailyMissionHandler.getInstance().registerHandler("loginweekend", LoginWeekendDailyMissionHandler::new);
- DailyMissionHandler.getInstance().registerHandler("loginmonth", LoginMonthDailyMissionHandler::new);
- DailyMissionHandler.getInstance().registerHandler("quest", QuestDailyMissionHandler::new);
- DailyMissionHandler.getInstance().registerHandler("olympiad", OlympiadDailyMissionHandler::new);
- DailyMissionHandler.getInstance().registerHandler("siege", SiegeDailyMissionHandler::new);
- DailyMissionHandler.getInstance().registerHandler("ceremonyofchaos", CeremonyOfChaosDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("auction", AuctionDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("augment", AugmentationDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("boss", BossDailyMissionHandler::new);
- DailyMissionHandler.getInstance().registerHandler("monster", MonsterDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("ceremonyofchaos", CeremonyOfChaosDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("combine", CombinationDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("compound", CompoundDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("enchant", EnchantDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("ensoul", EnsoulDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("exalted", ExaltedDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("fishing", FishingDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("joinclan", JoinClanDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("level", LevelDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("loginmonth", LoginMonthDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("loginweekend", LoginWeekendDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("mentor", MentorDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("monster", MonsterDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("noblesse", NoblesseDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("olympiad", OlympiadDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("quest", QuestDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("siege", SiegeDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("useitem", UseItemDailyMissionHandler::new);
LOGGER.info(DailyMissionMasterHandler.class.getSimpleName() + ": Loaded " + DailyMissionHandler.getInstance().size() + " handlers.");
}
}
diff --git a/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/AuctionDailyMissionHandler.java b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/AuctionDailyMissionHandler.java
new file mode 100644
index 0000000000..870f51f95b
--- /dev/null
+++ b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/AuctionDailyMissionHandler.java
@@ -0,0 +1,93 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package handlers.dailymissionhandlers;
+
+import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
+import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
+import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.Containers;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerAuctionWin;
+import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
+
+/**
+ * @author CostyKiller
+ */
+public class AuctionDailyMissionHandler extends AbstractDailyMissionHandler
+{
+ private final int _amount;
+
+ public AuctionDailyMissionHandler(DailyMissionDataHolder holder)
+ {
+ super(holder);
+ _amount = holder.getRequiredCompletions();
+ }
+
+ @Override
+ public void init()
+ {
+ Containers.Players().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_AUCTION_WIN, (OnPlayerAuctionWin event) -> onPlayerAuctionWin(event), this));
+ }
+
+ @Override
+ public boolean isAvailable(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
+ if (entry != null)
+ {
+ switch (entry.getStatus())
+ {
+ case NOT_AVAILABLE: // Initial state
+ {
+ if (entry.getProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ storePlayerEntry(entry);
+ }
+ break;
+ }
+ case AVAILABLE:
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ private void onPlayerAuctionWin(OnPlayerAuctionWin event)
+ {
+ final Player player = event.getPlayer();
+ // Check if any condition needed here
+ processPlayerProgress(player);
+ }
+
+ private void processPlayerProgress(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), true);
+ if (entry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
+ {
+ if (entry.increaseProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(entry);
+ }
+ }
+}
diff --git a/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/AugmentationDailyMissionHandler.java b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/AugmentationDailyMissionHandler.java
new file mode 100644
index 0000000000..5ac00ece33
--- /dev/null
+++ b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/AugmentationDailyMissionHandler.java
@@ -0,0 +1,133 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package handlers.dailymissionhandlers;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
+import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
+import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.Containers;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerAugment;
+import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
+
+/**
+ * @author CostyKiller
+ */
+public class AugmentationDailyMissionHandler extends AbstractDailyMissionHandler
+{
+ private final int _missionId;
+ private final int _amount;
+ private final int _minLevel;
+ private final int _maxLevel;
+ private final Set _mineralIds = new HashSet<>();
+
+ public AugmentationDailyMissionHandler(DailyMissionDataHolder holder)
+ {
+ super(holder);
+ _missionId = holder.getId();
+ _amount = holder.getRequiredCompletions();
+ _minLevel = holder.getParams().getInt("minLevel", 0);
+ _maxLevel = holder.getParams().getInt("maxLevel", Integer.MAX_VALUE);
+ final String mineralIds = holder.getParams().getString("mineralIds", "");
+ if (!mineralIds.isEmpty())
+ {
+ for (String s : mineralIds.split(","))
+ {
+ final int id = Integer.parseInt(s);
+ if (!_mineralIds.contains(id))
+ {
+ _mineralIds.add(id);
+ }
+ }
+ }
+ }
+
+ @Override
+ public void init()
+ {
+ Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_PLAYER_AUGMENT, (OnPlayerAugment event) -> onPlayerAugment(event), this));
+ }
+
+ @Override
+ public boolean isAvailable(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
+ if (entry != null)
+ {
+ switch (entry.getStatus())
+ {
+ case NOT_AVAILABLE: // Initial state
+ {
+ if (entry.getProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ storePlayerEntry(entry);
+ }
+ break;
+ }
+ case AVAILABLE:
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ private void onPlayerAugment(OnPlayerAugment event)
+ {
+ final Player player = event.getPlayer();
+ if ((player.getLevel() < _minLevel) || (player.getLevel() > _maxLevel))
+ {
+ return;
+ }
+ // Only missions with specific augment stones
+ if ((_missionId == 3055) || (_missionId == 3056) || (_missionId == 3057))
+ {
+ for (int mineralId : _mineralIds)
+ {
+ // Check if used item has been augmented with specified stones
+ if (player.getInventory().getItemByItemId(event.getItem().getId()).isAugmented() && (event.getItem().getAugmentation().getMineralId() == mineralId))
+ {
+ processPlayerProgress(player);
+ }
+ }
+ }
+ else if (_mineralIds.isEmpty())
+ {
+ processPlayerProgress(player);
+ }
+ }
+
+ private void processPlayerProgress(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), true);
+ if (entry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
+ {
+ if (entry.increaseProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(entry);
+ }
+ }
+}
diff --git a/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/CeremonyOfChaosDailyMissionHandler.java b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/CeremonyOfChaosDailyMissionHandler.java
index 82e8d58a4f..efc96f9f07 100644
--- a/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/CeremonyOfChaosDailyMissionHandler.java
+++ b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/CeremonyOfChaosDailyMissionHandler.java
@@ -32,17 +32,19 @@ import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
public class CeremonyOfChaosDailyMissionHandler extends AbstractDailyMissionHandler
{
private final int _amount;
+ private final int _requiredMissionCompleteId;
public CeremonyOfChaosDailyMissionHandler(DailyMissionDataHolder holder)
{
super(holder);
+ _requiredMissionCompleteId = holder.getRequiredMissionCompleteId();
_amount = holder.getRequiredCompletions();
}
@Override
public void init()
{
- Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_CEREMONY_OF_CHAOS_MATCH_RESULT, (OnCeremonyOfChaosMatchResult event) -> onCeremonyOfChaosMatchResult(event), this));
+ Containers.Players().addListener(new ConsumerEventListener(this, EventType.ON_CEREMONY_OF_CHAOS_MATCH_RESULT, (OnCeremonyOfChaosMatchResult event) -> onCeremonyOfChaosMatchResult(event), this));
}
@Override
@@ -75,15 +77,34 @@ public class CeremonyOfChaosDailyMissionHandler extends AbstractDailyMissionHand
{
event.getMembers().forEach(member ->
{
- final DailyMissionPlayerEntry entry = getPlayerEntry(member.getObjectId(), true);
- if (entry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
+ if (((_requiredMissionCompleteId != 0) && checkRequiredMission(member)) || (_requiredMissionCompleteId == 0))
{
- if (entry.increaseProgress() >= _amount)
- {
- entry.setStatus(DailyMissionStatus.AVAILABLE);
- }
- storePlayerEntry(entry);
+ processPlayerProgress(member);
}
});
}
+
+ private void processPlayerProgress(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), true);
+ if (entry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
+ {
+ if (entry.increaseProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(entry);
+ }
+ }
+
+ private boolean checkRequiredMission(Player player)
+ {
+ final int missionId = getPlayerEntry(player.getObjectId(), false).getRewardId();
+ final int missionStatus = getStatus(player);
+ if ((missionId != 0) && (_requiredMissionCompleteId != 0) && (missionId == _requiredMissionCompleteId) && (missionStatus == DailyMissionStatus.COMPLETED.getClientId()))
+ {
+ return true;
+ }
+ return false;
+ }
}
diff --git a/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/CombinationDailyMissionHandler.java b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/CombinationDailyMissionHandler.java
new file mode 100644
index 0000000000..5d17c6be72
--- /dev/null
+++ b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/CombinationDailyMissionHandler.java
@@ -0,0 +1,152 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package handlers.dailymissionhandlers;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
+import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
+import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.Containers;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.item.OnItemCombination;
+import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
+
+/**
+ * @author CostyKiller
+ */
+public class CombinationDailyMissionHandler extends AbstractDailyMissionHandler
+{
+ private final int _requiredMissionCompleteId;
+ private final int _amount;
+ private final int _minLevel;
+ private final int _maxLevel;
+ private final Set _itemIds = new HashSet<>();
+ private final int _itemId;
+
+ public CombinationDailyMissionHandler(DailyMissionDataHolder holder)
+ {
+ super(holder);
+ _requiredMissionCompleteId = holder.getRequiredMissionCompleteId();
+ _amount = holder.getRequiredCompletions();
+ _minLevel = holder.getParams().getInt("minLevel", 0);
+ _maxLevel = holder.getParams().getInt("maxLevel", Integer.MAX_VALUE);
+ _itemId = holder.getParams().getInt("itemId", 0);
+ final String itemIds = holder.getParams().getString("itemIds", "");
+ if (!itemIds.isEmpty())
+ {
+ for (String s : itemIds.split(","))
+ {
+ final int id = Integer.parseInt(s);
+ if (!_itemIds.contains(id))
+ {
+ _itemIds.add(id);
+ }
+ }
+ }
+ else if (_itemId != 0)
+ {
+ _itemIds.add(holder.getParams().getInt("itemId"));
+ }
+ }
+
+ @Override
+ public void init()
+ {
+ Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_ITEM_COMBINATION, (OnItemCombination event) -> onItemCombination(event), this));
+ }
+
+ @Override
+ public boolean isAvailable(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
+ if (entry != null)
+ {
+ switch (entry.getStatus())
+ {
+ case NOT_AVAILABLE: // Initial state
+ {
+ if (entry.getProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ storePlayerEntry(entry);
+ }
+ break;
+ }
+ case AVAILABLE:
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ private void onItemCombination(OnItemCombination event)
+ {
+ final Player player = event.getPlayer();
+ if ((player.getLevel() < _minLevel) || (player.getLevel() > _maxLevel))
+ {
+ return;
+ }
+ if (((_requiredMissionCompleteId != 0) && checkRequiredMission(player)) || (_requiredMissionCompleteId == 0))
+ {
+ if (!_itemIds.isEmpty())
+ {
+ for (int item : _itemIds)
+ {
+ // Check if used item has been obtained from item combination or alchemy
+ if (event.getItem().getId() == item)
+ {
+ processPlayerProgress(player);
+ }
+ }
+ }
+ else
+ {
+ processPlayerProgress(player);
+ }
+ }
+ }
+
+ private void processPlayerProgress(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), true);
+ if (entry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
+ {
+ if (entry.increaseProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(entry);
+ }
+ }
+
+ private boolean checkRequiredMission(Player player)
+ {
+ final int missionId = getPlayerEntry(player.getObjectId(), false).getRewardId();
+ final int missionStatus = getStatus(player);
+ if ((missionId != 0) && (_requiredMissionCompleteId != 0) && (missionId == _requiredMissionCompleteId) && (missionStatus == DailyMissionStatus.COMPLETED.getClientId()))
+ {
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/CompoundDailyMissionHandler.java b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/CompoundDailyMissionHandler.java
new file mode 100644
index 0000000000..6d2b8baf35
--- /dev/null
+++ b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/CompoundDailyMissionHandler.java
@@ -0,0 +1,152 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package handlers.dailymissionhandlers;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
+import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
+import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.Containers;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.item.OnItemCompound;
+import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
+
+/**
+ * @author CostyKiller
+ */
+public class CompoundDailyMissionHandler extends AbstractDailyMissionHandler
+{
+ private final int _requiredMissionCompleteId;
+ private final int _amount;
+ private final int _minLevel;
+ private final int _maxLevel;
+ private final Set _itemIds = new HashSet<>();
+ private final int _itemId;
+
+ public CompoundDailyMissionHandler(DailyMissionDataHolder holder)
+ {
+ super(holder);
+ _requiredMissionCompleteId = holder.getRequiredMissionCompleteId();
+ _amount = holder.getRequiredCompletions();
+ _minLevel = holder.getParams().getInt("minLevel", 0);
+ _maxLevel = holder.getParams().getInt("maxLevel", Integer.MAX_VALUE);
+ _itemId = holder.getParams().getInt("itemId", 0);
+ final String itemIds = holder.getParams().getString("itemIds", "");
+ if (!itemIds.isEmpty())
+ {
+ for (String s : itemIds.split(","))
+ {
+ final int id = Integer.parseInt(s);
+ if (!_itemIds.contains(id))
+ {
+ _itemIds.add(id);
+ }
+ }
+ }
+ else if (_itemId != 0)
+ {
+ _itemIds.add(holder.getParams().getInt("itemId"));
+ }
+ }
+
+ @Override
+ public void init()
+ {
+ Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_ITEM_COMPOUND, (OnItemCompound event) -> onItemCompound(event), this));
+ }
+
+ @Override
+ public boolean isAvailable(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
+ if (entry != null)
+ {
+ switch (entry.getStatus())
+ {
+ case NOT_AVAILABLE: // Initial state
+ {
+ if (entry.getProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ storePlayerEntry(entry);
+ }
+ break;
+ }
+ case AVAILABLE:
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ private void onItemCompound(OnItemCompound event)
+ {
+ final Player player = event.getPlayer();
+ if ((player.getLevel() < _minLevel) || (player.getLevel() > _maxLevel))
+ {
+ return;
+ }
+ if (((_requiredMissionCompleteId != 0) && checkRequiredMission(player)) || (_requiredMissionCompleteId == 0))
+ {
+ if (!_itemIds.isEmpty())
+ {
+ for (int item : _itemIds)
+ {
+ // Check if used item has been obtained from item combination or alchemy
+ if (event.getItem().getId() == item)
+ {
+ processPlayerProgress(player);
+ }
+ }
+ }
+ else
+ {
+ processPlayerProgress(player);
+ }
+ }
+ }
+
+ private void processPlayerProgress(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), true);
+ if (entry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
+ {
+ if (entry.increaseProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(entry);
+ }
+ }
+
+ private boolean checkRequiredMission(Player player)
+ {
+ final int missionId = getPlayerEntry(player.getObjectId(), false).getRewardId();
+ final int missionStatus = getStatus(player);
+ if ((missionId != 0) && (_requiredMissionCompleteId != 0) && (missionId == _requiredMissionCompleteId) && (missionStatus == DailyMissionStatus.COMPLETED.getClientId()))
+ {
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/EnchantDailyMissionHandler.java b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/EnchantDailyMissionHandler.java
new file mode 100644
index 0000000000..0e0f5dedbd
--- /dev/null
+++ b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/EnchantDailyMissionHandler.java
@@ -0,0 +1,137 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package handlers.dailymissionhandlers;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
+import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
+import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.Containers;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.item.OnItemEnchantAdd;
+import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
+
+/**
+ * @author CostyKiller
+ */
+public class EnchantDailyMissionHandler extends AbstractDailyMissionHandler
+{
+ private final int _requiredMissionCompleteId;
+ private final int _amount;
+ private final int _minLevel;
+ private final int _maxLevel;
+ private final int _targetValue;
+ private final Set _itemIds = new HashSet<>();
+
+ public EnchantDailyMissionHandler(DailyMissionDataHolder holder)
+ {
+ super(holder);
+ _requiredMissionCompleteId = holder.getRequiredMissionCompleteId();
+ _amount = holder.getRequiredCompletions();
+ _minLevel = holder.getParams().getInt("minLevel", 0);
+ _maxLevel = holder.getParams().getInt("maxLevel", Integer.MAX_VALUE);
+ _targetValue = holder.getParams().getInt("targetValue", 0);
+ final String itemIds = holder.getParams().getString("itemIds", "");
+ if (!itemIds.isEmpty())
+ {
+ for (String s : itemIds.split(","))
+ {
+ final int id = Integer.parseInt(s);
+ if (!_itemIds.contains(id))
+ {
+ _itemIds.add(id);
+ }
+ }
+ }
+ }
+
+ @Override
+ public void init()
+ {
+ Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_ITEM_ENCHANT_ADD, (OnItemEnchantAdd event) -> onItemEnchantAdd(event), this));
+ }
+
+ @Override
+ public boolean isAvailable(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
+ if (entry != null)
+ {
+ switch (entry.getStatus())
+ {
+ case NOT_AVAILABLE: // Initial state
+ {
+ if (entry.getProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ storePlayerEntry(entry);
+ }
+ break;
+ }
+ case AVAILABLE:
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ private void onItemEnchantAdd(OnItemEnchantAdd event)
+ {
+ final Player player = event.getPlayer();
+ if ((player.getLevel() < _minLevel) || (player.getLevel() > _maxLevel))
+ {
+ return;
+ }
+ if (((_requiredMissionCompleteId != 0) && checkRequiredMission(player)) || (_requiredMissionCompleteId == 0))
+ {
+ if (_itemIds.contains(event.getItem().getId()) && (player.getInventory().getItemByObjectId(event.getItem().getObjectId()).getEnchantLevel() >= _targetValue))
+ {
+ processPlayerProgress(player);
+ }
+ }
+ }
+
+ private void processPlayerProgress(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), true);
+ if (entry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
+ {
+ if (entry.increaseProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(entry);
+ }
+ }
+
+ private boolean checkRequiredMission(Player player)
+ {
+ final int missionId = getPlayerEntry(player.getObjectId(), false).getRewardId();
+ final int missionStatus = getStatus(player);
+ if ((missionId != 0) && (_requiredMissionCompleteId != 0) && (missionId == _requiredMissionCompleteId) && (missionStatus == DailyMissionStatus.COMPLETED.getClientId()))
+ {
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/EnsoulDailyMissionHandler.java b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/EnsoulDailyMissionHandler.java
new file mode 100644
index 0000000000..e577729a0a
--- /dev/null
+++ b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/EnsoulDailyMissionHandler.java
@@ -0,0 +1,119 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package handlers.dailymissionhandlers;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
+import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
+import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.Containers;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.item.OnItemSoulCrystalAdd;
+import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
+
+/**
+ * @author CostyKiller
+ */
+public class EnsoulDailyMissionHandler extends AbstractDailyMissionHandler
+{
+ private final int _amount;
+ private final int _minLevel;
+ private final int _maxLevel;
+ private final Set _crystalIds = new HashSet<>();
+
+ public EnsoulDailyMissionHandler(DailyMissionDataHolder holder)
+ {
+ super(holder);
+ _amount = holder.getRequiredCompletions();
+ _minLevel = holder.getParams().getInt("minLevel", 0);
+ _maxLevel = holder.getParams().getInt("maxLevel", Integer.MAX_VALUE);
+ final String crystalIds = holder.getParams().getString("crystalIds", "");
+ if (!crystalIds.isEmpty())
+ {
+ for (String s : crystalIds.split(","))
+ {
+ final int id = Integer.parseInt(s);
+ if (!_crystalIds.contains(id))
+ {
+ _crystalIds.add(id);
+ }
+ }
+ }
+ }
+
+ @Override
+ public void init()
+ {
+ Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_ITEM_SOUL_CRYSTAL_ADD, (OnItemSoulCrystalAdd event) -> onItemSoulCrystalAdd(event), this));
+ }
+
+ @Override
+ public boolean isAvailable(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
+ if (entry != null)
+ {
+ switch (entry.getStatus())
+ {
+ case NOT_AVAILABLE: // Initial state
+ {
+ if (entry.getProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ storePlayerEntry(entry);
+ }
+ break;
+ }
+ case AVAILABLE:
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ private void onItemSoulCrystalAdd(OnItemSoulCrystalAdd event)
+ {
+ final Player player = event.getPlayer();
+ if ((player.getLevel() < _minLevel) || (player.getLevel() > _maxLevel))
+ {
+ return;
+ }
+ if (_crystalIds.contains(event.getEnsoulStone().getId()))
+ {
+ processPlayerProgress(player);
+ }
+ }
+
+ private void processPlayerProgress(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), true);
+ if (entry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
+ {
+ if (entry.increaseProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(entry);
+ }
+ }
+}
diff --git a/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/ExaltedDailyMissionHandler.java b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/ExaltedDailyMissionHandler.java
new file mode 100644
index 0000000000..9faa879fe2
--- /dev/null
+++ b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/ExaltedDailyMissionHandler.java
@@ -0,0 +1,107 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package handlers.dailymissionhandlers;
+
+import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
+import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
+import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.Containers;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerBecomeExalted;
+import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
+
+/**
+ * @author CostyKiller
+ */
+public class ExaltedDailyMissionHandler extends AbstractDailyMissionHandler
+{
+ private final int _amount;
+ private final int _minLevel;
+ private final int _maxLevel;
+
+ public ExaltedDailyMissionHandler(DailyMissionDataHolder holder)
+ {
+ super(holder);
+ _amount = holder.getRequiredCompletions();
+ _minLevel = holder.getParams().getInt("minLevel", 0);
+ _maxLevel = holder.getParams().getInt("maxLevel", Integer.MAX_VALUE);
+ }
+
+ @Override
+ public void init()
+ {
+ Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_PLAYER_BECOME_EXALTED, (OnPlayerBecomeExalted event) -> onPlayerBecomeExalted(event), this));
+ }
+
+ @Override
+ public boolean isAvailable(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
+ if (entry != null)
+ {
+ switch (entry.getStatus())
+ {
+ case NOT_AVAILABLE: // Initial state
+ {
+ if (entry.getProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ storePlayerEntry(entry);
+ }
+ break;
+ }
+ case AVAILABLE:
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ private void onPlayerBecomeExalted(OnPlayerBecomeExalted event)
+ {
+ final Player player = event.getPlayer();
+ if ((player.getLevel() < _minLevel) || (player.getLevel() > _maxLevel))
+ {
+ return;
+ }
+ // Check if player is belonging to a clan and is exalted
+ if ((player.getClan() != null) && (player.getNobleLevel() > 0))
+ {
+ if (player.getNobleLevel() == 2)
+ {
+ processPlayerProgress(player);
+ }
+ }
+ }
+
+ private void processPlayerProgress(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), true);
+ if (entry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
+ {
+ if (entry.increaseProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(entry);
+ }
+ }
+}
diff --git a/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/FishingDailyMissionHandler.java b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/FishingDailyMissionHandler.java
index a0f04e2473..b954e977aa 100644
--- a/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/FishingDailyMissionHandler.java
+++ b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/FishingDailyMissionHandler.java
@@ -47,7 +47,7 @@ public class FishingDailyMissionHandler extends AbstractDailyMissionHandler
@Override
public void init()
{
- Containers.Players().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_FISHING, (OnPlayerFishing event) -> onPlayerFishing(event), this));
+ Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_PLAYER_FISHING, (OnPlayerFishing event) -> onPlayerFishing(event), this));
}
@Override
diff --git a/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/MentorDailyMissionHandler.java b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/MentorDailyMissionHandler.java
new file mode 100644
index 0000000000..6b7fd6c298
--- /dev/null
+++ b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/MentorDailyMissionHandler.java
@@ -0,0 +1,107 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package handlers.dailymissionhandlers;
+
+import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
+import org.l2jmobius.gameserver.instancemanager.MentorManager;
+import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
+import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
+import org.l2jmobius.gameserver.model.Mentee;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.Containers;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMenteeTrainingComplete;
+import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
+
+/**
+ * @author CostyKiller
+ */
+public class MentorDailyMissionHandler extends AbstractDailyMissionHandler
+{
+ private final int _amount;
+ private final int _minLevel;
+ private final int _maxLevel;
+
+ public MentorDailyMissionHandler(DailyMissionDataHolder holder)
+ {
+ super(holder);
+ _amount = holder.getRequiredCompletions();
+ _minLevel = holder.getParams().getInt("minLevel", 0);
+ _maxLevel = holder.getParams().getInt("maxLevel", Integer.MAX_VALUE);
+ }
+
+ @Override
+ public void init()
+ {
+ Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_PLAYER_MENTEE_TRAINING_COMPLETE, (OnPlayerMenteeTrainingComplete event) -> onPlayerMenteeTrainingComplete(event), this));
+ }
+
+ @Override
+ public boolean isAvailable(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
+ if (entry != null)
+ {
+ switch (entry.getStatus())
+ {
+ case NOT_AVAILABLE: // Initial state
+ {
+ if (entry.getProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ storePlayerEntry(entry);
+ }
+ break;
+ }
+ case AVAILABLE:
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ private void onPlayerMenteeTrainingComplete(OnPlayerMenteeTrainingComplete event)
+ {
+ final Player player = event.getMentor();
+ final Mentee mentor = MentorManager.getInstance().getMentor(event.getMentee().getObjectId());
+ if ((player.getLevel() < _minLevel) || (player.getLevel() > _maxLevel))
+ {
+ return;
+ }
+ // TODO: Check mentor for mentee training complete
+ if (player == mentor.getPlayer())
+ {
+ processPlayerProgress(player);
+ }
+ }
+
+ private void processPlayerProgress(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), true);
+ if (entry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
+ {
+ if (entry.increaseProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(entry);
+ }
+ }
+}
diff --git a/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java
index c1a738fe3c..5a792ba6ec 100644
--- a/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java
+++ b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java
@@ -16,6 +16,9 @@
*/
package handlers.dailymissionhandlers;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -39,14 +42,18 @@ import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
*/
public class MonsterDailyMissionHandler extends AbstractDailyMissionHandler
{
+ private final int _requiredMissionCompleteId;
private final int _amount;
private final int _minLevel;
private final int _maxLevel;
private final Set _ids = new HashSet<>();
+ private final String _startHour;
+ private final String _endHour;
public MonsterDailyMissionHandler(DailyMissionDataHolder holder)
{
super(holder);
+ _requiredMissionCompleteId = holder.getRequiredMissionCompleteId();
_amount = holder.getRequiredCompletions();
_minLevel = holder.getParams().getInt("minLevel", 0);
_maxLevel = holder.getParams().getInt("maxLevel", Integer.MAX_VALUE);
@@ -62,6 +69,8 @@ public class MonsterDailyMissionHandler extends AbstractDailyMissionHandler
}
}
}
+ _startHour = holder.getParams().getString("startHour", "");
+ _endHour = holder.getParams().getString("endHour", "");
}
@Override
@@ -110,24 +119,29 @@ public class MonsterDailyMissionHandler extends AbstractDailyMissionHandler
{
return;
}
-
- final Party party = player.getParty();
- if (party != null)
+ if (((_requiredMissionCompleteId != 0) && checkRequiredMission(player)) || (_requiredMissionCompleteId == 0))
{
- final CommandChannel channel = party.getCommandChannel();
- final List members = channel != null ? channel.getMembers() : party.getMembers();
- for (Player member : members)
+ if (checkTimeInterval() || ((_startHour == "") && (_endHour == "")))
{
- if ((member.getLevel() >= (monsterLevel - 5)) && (member.calculateDistance3D(monster) <= Config.ALT_PARTY_RANGE))
+ final Party party = player.getParty();
+ if (party != null)
{
- processPlayerProgress(member);
+ final CommandChannel channel = party.getCommandChannel();
+ final List members = channel != null ? channel.getMembers() : party.getMembers();
+ for (Player member : members)
+ {
+ if ((member.getLevel() >= (monsterLevel - 5)) && (member.calculateDistance3D(monster) <= Config.ALT_PARTY_RANGE))
+ {
+ processPlayerProgress(member);
+ }
+ }
+ }
+ else
+ {
+ processPlayerProgress(player);
}
}
}
- else
- {
- processPlayerProgress(player);
- }
}
private void processPlayerProgress(Player player)
@@ -142,4 +156,39 @@ public class MonsterDailyMissionHandler extends AbstractDailyMissionHandler
storePlayerEntry(entry);
}
}
+
+ private boolean checkTimeInterval()
+ {
+ if ((_startHour != "") && (_endHour != ""))
+ {
+ Date date = new Date();
+ SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm");
+ dateFormat.format(date);
+
+ try
+ {
+ // Check param hours
+ if (dateFormat.parse(dateFormat.format(date)).after(dateFormat.parse(_startHour)) && dateFormat.parse(dateFormat.format(date)).before(dateFormat.parse(_endHour)))
+ {
+ return true;
+ }
+ }
+ catch (ParseException e)
+ {
+ e.printStackTrace();
+ }
+ }
+ return false;
+ }
+
+ private boolean checkRequiredMission(Player player)
+ {
+ final int missionId = getPlayerEntry(player.getObjectId(), false).getRewardId();
+ final int missionStatus = getStatus(player);
+ if ((missionId != 0) && (_requiredMissionCompleteId != 0) && (missionId == _requiredMissionCompleteId) && (missionStatus == DailyMissionStatus.COMPLETED.getClientId()))
+ {
+ return true;
+ }
+ return false;
+ }
}
diff --git a/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/NoblesseDailyMissionHandler.java b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/NoblesseDailyMissionHandler.java
new file mode 100644
index 0000000000..fa4d2333bc
--- /dev/null
+++ b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/NoblesseDailyMissionHandler.java
@@ -0,0 +1,107 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package handlers.dailymissionhandlers;
+
+import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
+import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
+import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.Containers;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerBecomeNoblesse;
+import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
+
+/**
+ * @author CostyKiller
+ */
+public class NoblesseDailyMissionHandler extends AbstractDailyMissionHandler
+{
+ private final int _amount;
+ private final int _minLevel;
+ private final int _maxLevel;
+
+ public NoblesseDailyMissionHandler(DailyMissionDataHolder holder)
+ {
+ super(holder);
+ _amount = holder.getRequiredCompletions();
+ _minLevel = holder.getParams().getInt("minLevel", 0);
+ _maxLevel = holder.getParams().getInt("maxLevel", Integer.MAX_VALUE);
+ }
+
+ @Override
+ public void init()
+ {
+ Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_PLAYER_BECOME_NOBLESSE, (OnPlayerBecomeNoblesse event) -> onPlayerBecomeNoblesse(event), this));
+ }
+
+ @Override
+ public boolean isAvailable(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
+ if (entry != null)
+ {
+ switch (entry.getStatus())
+ {
+ case NOT_AVAILABLE: // Initial state
+ {
+ if (entry.getProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ storePlayerEntry(entry);
+ }
+ break;
+ }
+ case AVAILABLE:
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ private void onPlayerBecomeNoblesse(OnPlayerBecomeNoblesse event)
+ {
+ final Player player = event.getPlayer();
+ if ((player.getLevel() < _minLevel) || (player.getLevel() > _maxLevel))
+ {
+ return;
+ }
+ // Check if player is belonging to a clan and is noble
+ if ((player.getClan() != null) && (player.getNobleLevel() > 0))
+ {
+ if (player.getNobleLevel() == 1)
+ {
+ processPlayerProgress(player);
+ }
+ }
+ }
+
+ private void processPlayerProgress(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), true);
+ if (entry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
+ {
+ if (entry.increaseProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(entry);
+ }
+ }
+}
diff --git a/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/OlympiadDailyMissionHandler.java b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/OlympiadDailyMissionHandler.java
index 4a6f76bc58..51d3bbb148 100644
--- a/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/OlympiadDailyMissionHandler.java
+++ b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/OlympiadDailyMissionHandler.java
@@ -33,10 +33,12 @@ public class OlympiadDailyMissionHandler extends AbstractDailyMissionHandler
{
private final int _amount;
private final boolean _winOnly;
+ private final int _requiredMissionCompleteId;
public OlympiadDailyMissionHandler(DailyMissionDataHolder holder)
{
super(holder);
+ _requiredMissionCompleteId = holder.getRequiredMissionCompleteId();
_amount = holder.getRequiredCompletions();
_winOnly = holder.getParams().getBoolean("winOnly", false);
}
@@ -78,27 +80,44 @@ public class OlympiadDailyMissionHandler extends AbstractDailyMissionHandler
if (event.getWinner() != null)
{
final DailyMissionPlayerEntry winnerEntry = getPlayerEntry(event.getWinner().getObjectId(), true);
- if (winnerEntry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
+ if (((_requiredMissionCompleteId != 0) && checkRequiredMission(event.getWinner().getPlayer())) || (_requiredMissionCompleteId == 0))
{
- if (winnerEntry.increaseProgress() >= _amount)
+ if (winnerEntry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
{
- winnerEntry.setStatus(DailyMissionStatus.AVAILABLE);
+ if (winnerEntry.increaseProgress() >= _amount)
+ {
+ winnerEntry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(winnerEntry);
}
- storePlayerEntry(winnerEntry);
}
}
if (!_winOnly && (event.getLoser() != null))
{
final DailyMissionPlayerEntry loseEntry = getPlayerEntry(event.getLoser().getObjectId(), true);
- if (loseEntry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
+ if (((_requiredMissionCompleteId != 0) && checkRequiredMission(event.getLoser().getPlayer())) || (_requiredMissionCompleteId == 0))
{
- if (loseEntry.increaseProgress() >= _amount)
+ if (loseEntry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
{
- loseEntry.setStatus(DailyMissionStatus.AVAILABLE);
+ if (loseEntry.increaseProgress() >= _amount)
+ {
+ loseEntry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(loseEntry);
}
- storePlayerEntry(loseEntry);
}
}
}
+
+ private boolean checkRequiredMission(Player player)
+ {
+ final int missionId = getPlayerEntry(player.getObjectId(), false).getRewardId();
+ final int missionStatus = getStatus(player);
+ if ((missionId != 0) && (_requiredMissionCompleteId != 0) && (missionId == _requiredMissionCompleteId) && (missionStatus == DailyMissionStatus.COMPLETED.getClientId()))
+ {
+ return true;
+ }
+ return false;
+ }
}
diff --git a/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/QuestDailyMissionHandler.java b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/QuestDailyMissionHandler.java
index e98360c19a..4759f13b67 100644
--- a/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/QuestDailyMissionHandler.java
+++ b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/QuestDailyMissionHandler.java
@@ -17,7 +17,6 @@
package handlers.dailymissionhandlers;
import org.l2jmobius.gameserver.enums.DailyMissionStatus;
-import org.l2jmobius.gameserver.enums.QuestType;
import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
@@ -33,11 +32,13 @@ import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
public class QuestDailyMissionHandler extends AbstractDailyMissionHandler
{
private final int _amount;
+ private final int _questId;
public QuestDailyMissionHandler(DailyMissionDataHolder holder)
{
super(holder);
_amount = holder.getRequiredCompletions();
+ _questId = holder.getParams().getInt("questId", 0);
}
@Override
@@ -75,17 +76,23 @@ public class QuestDailyMissionHandler extends AbstractDailyMissionHandler
private void onQuestComplete(OnPlayerQuestComplete event)
{
final Player player = event.getPlayer();
- if (event.getQuestType() == QuestType.DAILY)
+ // Check if player has active quest the quest id specified
+ if ((_questId == event.getQuestId()) && player.getQuestState(event.getQuestName()).isCompleted())
{
- final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), true);
- if (entry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
+ processPlayerProgress(player);
+ }
+ }
+
+ private void processPlayerProgress(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), true);
+ if (entry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
+ {
+ if (entry.increaseProgress() >= _amount)
{
- if (entry.increaseProgress() >= _amount)
- {
- entry.setStatus(DailyMissionStatus.AVAILABLE);
- }
- storePlayerEntry(entry);
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
}
+ storePlayerEntry(entry);
}
}
}
diff --git a/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/UseItemDailyMissionHandler.java b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/UseItemDailyMissionHandler.java
new file mode 100644
index 0000000000..7267f6ec1e
--- /dev/null
+++ b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/UseItemDailyMissionHandler.java
@@ -0,0 +1,122 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package handlers.dailymissionhandlers;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
+import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
+import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.Containers;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.item.OnItemUse;
+import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
+
+/**
+ * @author CostyKiller
+ */
+public class UseItemDailyMissionHandler extends AbstractDailyMissionHandler
+{
+ private final int _amount;
+ private final int _minLevel;
+ private final int _maxLevel;
+ private final Set _itemIds = new HashSet<>();
+
+ public UseItemDailyMissionHandler(DailyMissionDataHolder holder)
+ {
+ super(holder);
+ _amount = holder.getRequiredCompletions();
+ _minLevel = holder.getParams().getInt("minLevel", 0);
+ _maxLevel = holder.getParams().getInt("maxLevel", Integer.MAX_VALUE);
+ final String itemIds = holder.getParams().getString("itemIds", "");
+ if (!itemIds.isEmpty())
+ {
+ for (String s : itemIds.split(","))
+ {
+ final int id = Integer.parseInt(s);
+ if (!_itemIds.contains(id))
+ {
+ _itemIds.add(id);
+ }
+ }
+ }
+ }
+
+ @Override
+ public void init()
+ {
+ Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_ITEM_USE, (OnItemUse event) -> onItemUse(event), this));
+ }
+
+ @Override
+ public boolean isAvailable(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
+ if (entry != null)
+ {
+ switch (entry.getStatus())
+ {
+ case NOT_AVAILABLE: // Initial state
+ {
+ if (entry.getProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ storePlayerEntry(entry);
+ }
+ break;
+ }
+ case AVAILABLE:
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ private void onItemUse(OnItemUse event)
+ {
+ final Player player = event.getPlayer();
+ if (_minLevel > 0)
+ {
+ if ((player.getLevel() < _minLevel) || (player.getLevel() > _maxLevel) || _itemIds.isEmpty())
+ {
+ return;
+ }
+ if (_itemIds.contains(event.getItem().getId()))
+ {
+ processPlayerProgress(player);
+ }
+ }
+ }
+
+ private void processPlayerProgress(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), true);
+ if (entry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
+ {
+ if (entry.increaseProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(entry);
+ }
+ }
+}
diff --git a/L2J_Mobius_10.2_MasterClass/dist/game/data/xsd/DailyMission.xsd b/L2J_Mobius_10.2_MasterClass/dist/game/data/xsd/DailyMission.xsd
index 35f2f6dc35..345337ffa1 100644
--- a/L2J_Mobius_10.2_MasterClass/dist/game/data/xsd/DailyMission.xsd
+++ b/L2J_Mobius_10.2_MasterClass/dist/game/data/xsd/DailyMission.xsd
@@ -36,6 +36,7 @@
+
diff --git a/L2J_Mobius_10.2_MasterClass/dist/game/data/xsd/skills.xsd b/L2J_Mobius_10.2_MasterClass/dist/game/data/xsd/skills.xsd
index 9edf95c23b..3fef9b94d0 100644
--- a/L2J_Mobius_10.2_MasterClass/dist/game/data/xsd/skills.xsd
+++ b/L2J_Mobius_10.2_MasterClass/dist/game/data/xsd/skills.xsd
@@ -2086,6 +2086,7 @@
+
@@ -2094,7 +2095,9 @@
-
+
+
+
@@ -2842,6 +2845,8 @@
+
+
diff --git a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
index 892f3b75df..82455ddda6 100644
--- a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
+++ b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
@@ -36,6 +36,7 @@ public class DailyMissionDataHolder
private final int _id;
private final List _rewardsItems;
private final List _classRestriction;
+ private final int _requiredMissionCompleteId;
private final int _requiredCompletions;
private final StatSet _params;
private final boolean _dailyReset;
@@ -50,6 +51,7 @@ public class DailyMissionDataHolder
{
final Function handler = DailyMissionHandler.getInstance().getHandler(set.getString("handler"));
_id = set.getInt("id");
+ _requiredMissionCompleteId = set.getInt("requiredMissionCompleteId", 0);
_requiredCompletions = set.getInt("requiredCompletion", 0);
_rewardsItems = set.getList("items", ItemHolder.class);
_classRestriction = set.getList("classRestriction", ClassId.class);
@@ -78,6 +80,11 @@ public class DailyMissionDataHolder
return _rewardsItems;
}
+ public int getRequiredMissionCompleteId()
+ {
+ return _requiredMissionCompleteId;
+ }
+
public int getRequiredCompletions()
{
return _requiredCompletions;
diff --git a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/events/EventType.java b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/events/EventType.java
index 69d29692df..df1fd25e1c 100644
--- a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/events/EventType.java
+++ b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/events/EventType.java
@@ -59,7 +59,10 @@ import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnNpcTeleport;
import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnNpcTeleportRequest;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayableExpChanged;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerAbilityPointsChanged;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerAuctionWin;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerAugment;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerBecomeExalted;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerBecomeNoblesse;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerBypass;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerCallToChangeClass;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerChangeToAwakenedClass;
@@ -94,6 +97,7 @@ import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMentee
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMenteeLeft;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMenteeRemove;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMenteeStatus;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMenteeTrainingComplete;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMentorStatus;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMoveRequest;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerPKChanged;
@@ -124,6 +128,8 @@ import org.l2jmobius.gameserver.model.events.impl.instance.OnInstanceLeave;
import org.l2jmobius.gameserver.model.events.impl.instance.OnInstanceStatusChange;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemAttributeAdd;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemBypassEvent;
+import org.l2jmobius.gameserver.model.events.impl.item.OnItemCombination;
+import org.l2jmobius.gameserver.model.events.impl.item.OnItemCompound;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemCreate;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemEnchantAdd;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemSoulCrystalAdd;
@@ -189,6 +195,8 @@ public enum EventType
ON_ITEM_ATTRIBUTE_ADD(OnItemAttributeAdd.class, void.class),
ON_ITEM_SOUL_CRYSTAL_ADD(OnItemSoulCrystalAdd.class, void.class),
ON_ITEM_ENCHANT_ADD(OnItemEnchantAdd.class, void.class),
+ ON_ITEM_COMBINATION(OnItemCombination.class, void.class),
+ ON_ITEM_COMPOUND(OnItemCompound.class, void.class),
// NPC events
ON_NPC_CAN_BE_SEEN(OnNpcCanBeSeen.class, void.class, TerminateReturn.class),
@@ -219,9 +227,12 @@ public enum EventType
ON_PLAYABLE_EXP_CHANGED(OnPlayableExpChanged.class, void.class, TerminateReturn.class),
// Player events
+ ON_PLAYER_AUCTION_WIN(OnPlayerAuctionWin.class, void.class),
ON_PLAYER_AUGMENT(OnPlayerAugment.class, void.class),
ON_PLAYER_BYPASS(OnPlayerBypass.class, void.class, TerminateReturn.class),
ON_PLAYER_CALL_TO_CHANGE_CLASS(OnPlayerCallToChangeClass.class, void.class),
+ ON_PLAYER_BECOME_NOBLESSE(OnPlayerBecomeNoblesse.class, void.class),
+ ON_PLAYER_BECOME_EXALTED(OnPlayerBecomeExalted.class, void.class),
ON_PLAYER_CHAT(OnPlayerChat.class, void.class, ChatFilterReturn.class),
ON_PLAYER_ABILITY_POINTS_CHANGED(OnPlayerAbilityPointsChanged.class, void.class),
// Clan events
@@ -256,6 +267,7 @@ public enum EventType
ON_PLAYER_MENTEE_LEFT(OnPlayerMenteeLeft.class, void.class),
ON_PLAYER_MENTEE_REMOVE(OnPlayerMenteeRemove.class, void.class),
ON_PLAYER_MENTEE_STATUS(OnPlayerMenteeStatus.class, void.class),
+ ON_PLAYER_MENTEE_TRAINING_COMPLETE(OnPlayerMenteeTrainingComplete.class, void.class),
ON_PLAYER_MENTOR_STATUS(OnPlayerMentorStatus.class, void.class),
// Other player events
ON_PLAYER_REPUTATION_CHANGED(OnPlayerReputationChanged.class, void.class),
diff --git a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/creature/player/OnPlayerAuctionWin.java b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/creature/player/OnPlayerAuctionWin.java
new file mode 100644
index 0000000000..b520fcda0b
--- /dev/null
+++ b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/creature/player/OnPlayerAuctionWin.java
@@ -0,0 +1,53 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.l2jmobius.gameserver.model.events.impl.creature.player;
+
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.IBaseEvent;
+import org.l2jmobius.gameserver.model.item.instance.Item;
+
+/**
+ * @author CostyKiller
+ */
+public class OnPlayerAuctionWin implements IBaseEvent
+{
+ private final Player _player;
+ private final Item _item;
+
+ public OnPlayerAuctionWin(Player player, Item item)
+ {
+ _player = player;
+ _item = item;
+ }
+
+ public Player getPlayer()
+ {
+ return _player;
+ }
+
+ public Item getItem()
+ {
+ return _item;
+ }
+
+ @Override
+ public EventType getType()
+ {
+ return EventType.ON_PLAYER_AUCTION_WIN;
+ }
+}
diff --git a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/creature/player/OnPlayerBecomeExalted.java b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/creature/player/OnPlayerBecomeExalted.java
new file mode 100644
index 0000000000..e1592af046
--- /dev/null
+++ b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/creature/player/OnPlayerBecomeExalted.java
@@ -0,0 +1,45 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.l2jmobius.gameserver.model.events.impl.creature.player;
+
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.IBaseEvent;
+
+/**
+ * @author CostyKiller
+ */
+public class OnPlayerBecomeExalted implements IBaseEvent
+{
+ private final Player _player;
+
+ public OnPlayerBecomeExalted(Player player)
+ {
+ _player = player;
+ }
+
+ public Player getPlayer()
+ {
+ return _player;
+ }
+
+ @Override
+ public EventType getType()
+ {
+ return EventType.ON_PLAYER_BECOME_EXALTED;
+ }
+}
diff --git a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/creature/player/OnPlayerBecomeNoblesse.java b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/creature/player/OnPlayerBecomeNoblesse.java
new file mode 100644
index 0000000000..fd96682233
--- /dev/null
+++ b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/creature/player/OnPlayerBecomeNoblesse.java
@@ -0,0 +1,45 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.l2jmobius.gameserver.model.events.impl.creature.player;
+
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.IBaseEvent;
+
+/**
+ * @author CostyKiller
+ */
+public class OnPlayerBecomeNoblesse implements IBaseEvent
+{
+ private final Player _player;
+
+ public OnPlayerBecomeNoblesse(Player player)
+ {
+ _player = player;
+ }
+
+ public Player getPlayer()
+ {
+ return _player;
+ }
+
+ @Override
+ public EventType getType()
+ {
+ return EventType.ON_PLAYER_BECOME_NOBLESSE;
+ }
+}
diff --git a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/creature/player/OnPlayerMenteeTrainingComplete.java b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/creature/player/OnPlayerMenteeTrainingComplete.java
new file mode 100644
index 0000000000..c6c2bf4b19
--- /dev/null
+++ b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/creature/player/OnPlayerMenteeTrainingComplete.java
@@ -0,0 +1,52 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.l2jmobius.gameserver.model.events.impl.creature.player;
+
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.IBaseEvent;
+
+/**
+ * @author CostyKiller
+ */
+public class OnPlayerMenteeTrainingComplete implements IBaseEvent
+{
+ private final Player _mentor;
+ private final Player _mentee;
+
+ public OnPlayerMenteeTrainingComplete(Player mentor, Player mentee)
+ {
+ _mentor = mentor;
+ _mentee = mentee;
+ }
+
+ public Player getMentor()
+ {
+ return _mentor;
+ }
+
+ public Player getMentee()
+ {
+ return _mentee;
+ }
+
+ @Override
+ public EventType getType()
+ {
+ return EventType.ON_PLAYER_MENTEE_TRAINING_COMPLETE;
+ }
+}
diff --git a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/creature/player/OnPlayerQuestComplete.java b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/creature/player/OnPlayerQuestComplete.java
index cf7f160512..7212bf9412 100644
--- a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/creature/player/OnPlayerQuestComplete.java
+++ b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/creature/player/OnPlayerQuestComplete.java
@@ -28,12 +28,14 @@ public class OnPlayerQuestComplete implements IBaseEvent
{
private final Player _player;
private final int _questId;
+ private final String _questName;
private final QuestType _questType;
- public OnPlayerQuestComplete(Player player, int questId, QuestType questType)
+ public OnPlayerQuestComplete(Player player, int questId, String questName, QuestType questType)
{
_player = player;
_questId = questId;
+ _questName = questName;
_questType = questType;
}
@@ -47,6 +49,11 @@ public class OnPlayerQuestComplete implements IBaseEvent
return _questId;
}
+ public String getQuestName()
+ {
+ return _questName;
+ }
+
public QuestType getQuestType()
{
return _questType;
diff --git a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/item/OnItemCombination.java b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/item/OnItemCombination.java
new file mode 100644
index 0000000000..6ac566d70f
--- /dev/null
+++ b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/item/OnItemCombination.java
@@ -0,0 +1,53 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.l2jmobius.gameserver.model.events.impl.item;
+
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.IBaseEvent;
+import org.l2jmobius.gameserver.model.item.instance.Item;
+
+/**
+ * @author CostyKiller
+ */
+public class OnItemCombination implements IBaseEvent
+{
+ private final Player _player;
+ private final Item _item;
+
+ public OnItemCombination(Player player, Item item)
+ {
+ _player = player;
+ _item = item;
+ }
+
+ public Player getPlayer()
+ {
+ return _player;
+ }
+
+ public Item getItem()
+ {
+ return _item;
+ }
+
+ @Override
+ public EventType getType()
+ {
+ return EventType.ON_ITEM_COMBINATION;
+ }
+}
diff --git a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/item/OnItemCompound.java b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/item/OnItemCompound.java
new file mode 100644
index 0000000000..bd926ee420
--- /dev/null
+++ b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/item/OnItemCompound.java
@@ -0,0 +1,53 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.l2jmobius.gameserver.model.events.impl.item;
+
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.IBaseEvent;
+import org.l2jmobius.gameserver.model.item.instance.Item;
+
+/**
+ * @author CostyKiller
+ */
+public class OnItemCompound implements IBaseEvent
+{
+ private final Player _player;
+ private final Item _item;
+
+ public OnItemCompound(Player player, Item item)
+ {
+ _player = player;
+ _item = item;
+ }
+
+ public Player getPlayer()
+ {
+ return _player;
+ }
+
+ public Item getItem()
+ {
+ return _item;
+ }
+
+ @Override
+ public EventType getType()
+ {
+ return EventType.ON_ITEM_COMPOUND;
+ }
+}
diff --git a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/item/OnItemSoulCrystalAdd.java b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/item/OnItemSoulCrystalAdd.java
index bf1d1237f1..54eb9ffbad 100644
--- a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/item/OnItemSoulCrystalAdd.java
+++ b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/item/OnItemSoulCrystalAdd.java
@@ -17,6 +17,7 @@
package org.l2jmobius.gameserver.model.events.impl.item;
import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.ensoul.EnsoulStone;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.IBaseEvent;
import org.l2jmobius.gameserver.model.item.instance.Item;
@@ -28,11 +29,13 @@ public class OnItemSoulCrystalAdd implements IBaseEvent
{
private final Player _player;
private final Item _item;
+ private final EnsoulStone _stone;
- public OnItemSoulCrystalAdd(Player player, Item item)
+ public OnItemSoulCrystalAdd(Player player, Item item, EnsoulStone stone)
{
_player = player;
_item = item;
+ _stone = stone;
}
public Player getPlayer()
@@ -45,6 +48,11 @@ public class OnItemSoulCrystalAdd implements IBaseEvent
return _item;
}
+ public EnsoulStone getEnsoulStone()
+ {
+ return _stone;
+ }
+
@Override
public EventType getType()
{
diff --git a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/item/instance/Item.java b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/item/instance/Item.java
index a969e84a51..78d1bf5df7 100644
--- a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/item/instance/Item.java
+++ b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/item/instance/Item.java
@@ -71,7 +71,6 @@ import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemPi
import org.l2jmobius.gameserver.model.events.impl.item.OnItemAttributeAdd;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemBypassEvent;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemEnchantAdd;
-import org.l2jmobius.gameserver.model.events.impl.item.OnItemSoulCrystalAdd;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemTalk;
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.instancezone.Instance;
@@ -2250,12 +2249,6 @@ public class Item extends WorldObject
{
updateSpecialAbilities();
}
-
- // Notify to Scripts
- if (EventDispatcher.getInstance().hasListener(EventType.ON_ITEM_SOUL_CRYSTAL_ADD))
- {
- EventDispatcher.getInstance().notifyEventAsync(new OnItemSoulCrystalAdd(getActingPlayer(), this));
- }
}
public void removeSpecialAbility(int position, int type)
diff --git a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/quest/QuestState.java b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/quest/QuestState.java
index 7a829f764f..12c74a204d 100644
--- a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/quest/QuestState.java
+++ b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/quest/QuestState.java
@@ -729,7 +729,7 @@ public class QuestState
// Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_QUEST_COMPLETE, _player))
{
- EventDispatcher.getInstance().notifyEventAsync(new OnPlayerQuestComplete(_player, getQuest().getId(), type), _player);
+ EventDispatcher.getInstance().notifyEventAsync(new OnPlayerQuestComplete(_player, getQuest().getId(), getQuestName(), type), _player);
}
}
@@ -819,7 +819,7 @@ public class QuestState
// Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_QUEST_COMPLETE, _player))
{
- EventDispatcher.getInstance().notifyEventAsync(new OnPlayerQuestComplete(_player, getQuest().getId(), repeatable ? QuestType.REPEATABLE : QuestType.ONE_TIME), _player);
+ EventDispatcher.getInstance().notifyEventAsync(new OnPlayerQuestComplete(_player, getQuest().getId(), getQuestName(), repeatable ? QuestType.REPEATABLE : QuestType.ONE_TIME), _player);
}
}
diff --git a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/RequestCrystallizeItem.java b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/RequestCrystallizeItem.java
index 8a8560e98f..3caadffa20 100644
--- a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/RequestCrystallizeItem.java
+++ b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/RequestCrystallizeItem.java
@@ -25,6 +25,9 @@ import org.l2jmobius.gameserver.data.xml.ItemCrystallizationData;
import org.l2jmobius.gameserver.enums.PrivateStoreType;
import org.l2jmobius.gameserver.enums.Race;
import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.EventDispatcher;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.item.OnItemCombination;
import org.l2jmobius.gameserver.model.holders.ItemChanceHolder;
import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.item.type.CrystalType;
@@ -249,7 +252,11 @@ public class RequestCrystallizeItem implements ClientPacket
sm = new SystemMessage(SystemMessageId.S1_HAS_BEEN_CRYSTALLIZED);
sm.addItemName(removedItem);
player.sendPacket(sm);
-
+ // Notify to scripts.
+ if (EventDispatcher.getInstance().hasListener(EventType.ON_ITEM_COMBINATION))
+ {
+ EventDispatcher.getInstance().notifyEventAsync(new OnItemCombination(player, removedItem));
+ }
player.broadcastUserInfo();
player.setInCrystallize(false);
diff --git a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/alchemy/RequestAlchemyConversion.java b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/alchemy/RequestAlchemyConversion.java
index d232ce73de..bcf77e286c 100644
--- a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/alchemy/RequestAlchemyConversion.java
+++ b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/alchemy/RequestAlchemyConversion.java
@@ -24,6 +24,9 @@ import org.l2jmobius.gameserver.enums.PrivateStoreType;
import org.l2jmobius.gameserver.enums.Race;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.alchemy.AlchemyCraftData;
+import org.l2jmobius.gameserver.model.events.EventDispatcher;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.item.OnItemCombination;
import org.l2jmobius.gameserver.model.holders.ItemHolder;
import org.l2jmobius.gameserver.model.item.ItemTemplate;
import org.l2jmobius.gameserver.model.item.instance.Item;
@@ -197,6 +200,16 @@ public class RequestAlchemyConversion implements ClientPacket
player.getInventory().addItem("Alchemy", data.getProductionFailure().getId(), data.getProductionFailure().getCount() * failureCount, player, null);
}
+ // Notify to scripts.
+ if (EventDispatcher.getInstance().hasListener(EventType.ON_ITEM_COMBINATION))
+ {
+ for (ItemHolder ingredient : data.getIngredients())
+ {
+ final Item item = player.getInventory().getItemByItemId(ingredient.getId());
+ EventDispatcher.getInstance().notifyEventAsync(new OnItemCombination(player, item));
+ }
+ }
+
player.sendPacket(new ExAlchemyConversion(successCount, failureCount));
}
}
diff --git a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/compound/RequestNewEnchantTry.java b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/compound/RequestNewEnchantTry.java
index 9ec1e045ba..a15f675416 100644
--- a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/compound/RequestNewEnchantTry.java
+++ b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/compound/RequestNewEnchantTry.java
@@ -20,6 +20,9 @@ import org.l2jmobius.commons.util.Rnd;
import org.l2jmobius.gameserver.data.xml.CombinationItemsData;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.request.CompoundRequest;
+import org.l2jmobius.gameserver.model.events.EventDispatcher;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.item.OnItemCompound;
import org.l2jmobius.gameserver.model.item.combination.CombinationItem;
import org.l2jmobius.gameserver.model.item.combination.CombinationItemReward;
import org.l2jmobius.gameserver.model.item.combination.CombinationItemType;
@@ -118,6 +121,11 @@ public class RequestNewEnchantTry implements ClientPacket
{
player.sendPacket(new ExEnchantFail(itemOne.getId(), itemTwo.getId()));
}
+ // Notify to scripts.
+ if (EventDispatcher.getInstance().hasListener(EventType.ON_ITEM_COMPOUND))
+ {
+ EventDispatcher.getInstance().notifyEventAsync(new OnItemCompound(player, success ? item : itemOne));
+ }
}
final InventoryUpdate iu = new InventoryUpdate();
diff --git a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java
index e722c66d02..aa85c1c8f9 100644
--- a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java
+++ b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java
@@ -22,6 +22,9 @@ import org.l2jmobius.gameserver.enums.PrivateStoreType;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.ensoul.EnsoulOption;
import org.l2jmobius.gameserver.model.ensoul.EnsoulStone;
+import org.l2jmobius.gameserver.model.events.EventDispatcher;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.item.OnItemSoulCrystalAdd;
import org.l2jmobius.gameserver.model.holders.ItemHolder;
import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.skill.AbnormalType;
@@ -60,7 +63,6 @@ public class RequestItemEnsoul implements ClientPacket
_options[i] = new EnsoulItemOption(type, position, soulCrystalObjectId, soulCrystalOption);
}
}
- return;
}
}
@@ -217,6 +219,12 @@ public class RequestItemEnsoul implements ClientPacket
{
item.addSpecialAbility(option, position, stone.getSlotType(), true);
success = 1;
+
+ // Notify to Scripts
+ if (EventDispatcher.getInstance().hasListener(EventType.ON_ITEM_SOUL_CRYSTAL_ADD))
+ {
+ EventDispatcher.getInstance().notifyEventAsync(new OnItemSoulCrystalAdd(player, item, stone));
+ }
}
if (soulCrystal.isStackable() && (soulCrystal.getCount() > 0))
diff --git a/L2J_Mobius_10.3_MasterClass/dist/game/data/DailyMission.xml b/L2J_Mobius_10.3_MasterClass/dist/game/data/DailyMission.xml
index 0bf8ede484..79bb4f6c91 100644
--- a/L2J_Mobius_10.3_MasterClass/dist/game/data/DailyMission.xml
+++ b/L2J_Mobius_10.3_MasterClass/dist/game/data/DailyMission.xml
@@ -9,12 +9,11 @@
-
-
+
-
-
+
+
26431,26433,26435,26437,26439,26441,26443,26444
99
@@ -23,50 +22,43 @@
-
-
+
-
+
-
-
+
-
- Clan Reputation
- Fame
- Vitality
- Prophecy Fragment
+
+
+
-
- Attempt Combining 5 times with any item.
-
+
+
+
- Clan Reputation
- Fame
- Vitality
- Prophecy Fragment
+
+
+
- -->
-
-
+
@@ -75,22 +67,20 @@
-
-
+
24427,24428,24429,24430,24431,24432
- 99
+ 100
255
-
-
+
@@ -103,12 +93,11 @@
-
-
+
-
-
+
+
24470,24471,24472,24473,24474,24475
107
@@ -117,8 +106,7 @@
-
-
+
@@ -131,35 +119,33 @@
-
-
+
-
+ 29213,29380,26093,26094,26096,26099,26102,26461,26462,26463,26464,26465,23653,23654,23655,23656,23657,23658,23659,23660,23661,23662,23663,23664,24813,24814,24815,24816,24817,24818,24819,24820,24821,24822,24823,24824,26390,26467
105
255
-
+
-
-
+
+
-
+ 24849,24850,24851,24852,24853,24854,24855,24856,24857
112
255
-
-
+
@@ -172,17 +158,7 @@
-
-
-
- 29261,25892,29275,29280,29285,25922,25929,29300
-
-
-
-
-
-
-
+
@@ -198,22 +174,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -246,524 +206,28 @@
-
-
-
- 99
-
-
-
-
-
-
-
-
-
-
- 100
-
-
-
-
-
-
-
-
-
-
- 101
-
-
-
-
-
-
-
-
-
-
- 102
-
-
-
-
-
-
-
-
-
-
- 103
-
-
-
-
-
-
-
-
-
-
- 104
-
-
-
-
-
-
-
-
-
-
- 105
-
-
-
-
-
-
-
-
-
-
- 106
-
-
-
-
-
-
-
-
-
-
-
- 107
-
-
-
-
-
-
-
-
-
-
-
- 108
-
-
-
-
-
-
-
-
-
-
-
- 109
-
-
-
-
-
-
-
-
-
-
-
- 110
-
-
-
-
-
-
-
-
-
-
- 111
-
-
-
-
-
-
-
-
-
-
- 112
-
-
-
-
-
-
-
-
-
-
- 113
-
-
-
-
-
-
-
-
-
-
- 114
-
-
-
-
-
-
-
-
-
-
- 115
-
-
-
-
-
-
-
-
-
-
- 116
-
-
-
-
-
-
-
-
-
-
- 117
-
-
-
-
-
-
-
-
-
-
- 118
-
-
-
-
-
-
-
-
-
-
- 119
-
-
-
-
-
-
-
-
-
-
- 120
-
-
-
-
-
-
-
-
-
-
- 99
-
-
-
-
-
-
-
-
-
-
- 100
-
-
-
-
-
-
-
-
-
-
- 101
-
-
-
-
-
-
-
-
-
-
- 102
-
-
-
-
-
-
-
-
-
-
- 103
-
-
-
-
-
-
-
-
-
-
- 104
-
-
-
-
-
-
-
-
-
-
- 105
-
-
-
-
-
-
-
-
-
-
- 106
-
-
-
-
-
-
-
-
-
-
-
- 107
-
-
-
-
-
-
-
-
-
-
-
- 108
-
-
-
-
-
-
-
-
-
-
-
- 109
-
-
-
-
-
-
-
-
-
-
-
- 110
-
-
-
-
-
-
-
-
-
-
- 111
-
-
-
-
-
-
-
-
-
-
- 112
-
-
-
-
-
-
-
-
-
-
- 113
-
-
-
-
-
-
-
-
-
-
- 114
-
-
-
-
-
-
-
-
-
-
- 115
-
-
-
-
-
-
-
-
-
-
- 116
-
-
-
-
-
-
-
-
-
-
- 117
-
-
-
-
-
-
-
-
-
-
- 118
-
-
-
-
-
-
-
-
-
-
- 119
-
-
-
-
-
-
-
-
-
-
- 120
-
-
-
-
-
-
-
-
-
+
85
255
- Clan Reputation
- Fame
+
+
- Obtain the Exalted status while in a clan.
-
+
+
85
255
- Clan Reputation
- Fame
+
+
- -->
-
@@ -775,7 +239,7 @@
-
+
85
@@ -786,7 +250,7 @@
-
+
85
@@ -817,7 +281,7 @@
-
+
29068,29028,29240,29361,29362,29363,29364,29365,29366,29367,29305,29320
@@ -827,7 +291,7 @@
-
+
29068,29028,29240,29361,29362,29363,29364,29365,29366,29367,29305,29320
@@ -845,7 +309,7 @@
-
+
@@ -853,7 +317,7 @@
-
+
@@ -893,7 +357,7 @@
-
+
@@ -901,7 +365,7 @@
-
+
@@ -949,450 +413,1019 @@
-
- Clan Reputation
- Fame
+
+
- Perform Crystallization or Alchemy Combination 10 times.
+
- Clan Reputation
- Fame
+
+
-
- Perform Crystallization or Alchemy Combination 50 times.
+
+
- Clan Reputation
- Fame
+
+
-
- Perform Crystallization or Alchemy Combination 100 times.
+
+
- Clan Reputation
- Fame
+
+
- Successfully compound 1 Talisman of Insanity.
-
+
+
85
255
+ 39572
- Clan Reputation
- Fame
+
+
- Successfully combine Venir's Talisman Lv. 15 once.
-
+
+
85
255
+ 39648
- Clan Reputation
- Fame
+
+
-
- Successfully combine Venir's Talisman Lv. 24 once.
-
+
+
+
85
255
+ 39657
- Clan Reputation
- Fame
+
+
- Use the following Spirit Stones to augment weapons 100 times: High-grade Spirit Stone Top-grade Spirit Stone Life Stone: Giant's Power
+
85
255
+ 45931,45932,36731
- Clan Reputation
- Fame
+
+
- Use the following Spirit Stones to augment accessories 100 times. High-grade Accessory Spirit Stone Top-grade Accessory Spirit Stone
+
85
255
+ 81729,38571
- Clan Reputation
- Fame
+
+
- Use the following Spirit Stones to augment hair accessories 100 times. Hair Accessory Spirit Stone Circlet Spirit Stone
+
85
255
+ 45937,48215
- Clan Reputation
- Fame
+
+
- Enhance your equipment 3 times with any of the following Soul Crystals. Kain's Soul Crystal Lv. 8 Mermoden's Soul Crystal Lv. 8 Leona's Soul Crystal Lv. 8 Pantheon's Soul Crystal Lv. 8 Lionel's Soul Crystal Lv. 8
+
85
255
+ 46451,46466,46481,46496,46511
- Clan Reputation
- Fame
+
+
+
+
+
+
+
+ 85
+ 255
+ 10
+ 28769,28770,28771,28772,28773,28774,28775,28776,28777,28778,28779,28780,28781,28782,28783,28784,28785,28786,28787,28788,28789,28790,28791,28792,28793,28794,28795,28796,28797,28798,28799,28800,28801,28802,28803,28804,28805,28806,28807,28808,28809,28810,28811,28812,28813,28814,28815,28816,28817,18818,28819,28820,28821,28822,28823,28824,28825,28826,28827,28828,28829,28830,28831,28832,28833,28834,28835,28836,28837,28838,28839,28840,28841,28842,28843,28844,28845,28846,28847,28848,28849,28850,28851,28852,28853,28854,28855,28856,28857,28858,28859,28860,28861,28862,28863,28864,28865,28866,28867,28868,28869,28870,28871,28872,28873,28874,28875,28876,28877,28878,28879,28880,28881,28882,28883,28884,28885,28886,28887,28888,28889,28890,28891,28892,28893,28894,28895,28896,28897,28898,28899,28900,28901,28902,28903,28904,28905,28906,28907,28908,28909,28910,28911,28912,28913,28914,28915,28916,28927,28918,28919,28920,28921,28922,28923,28924,28925,28926,28927,28928,28929,28930,28931,28932,28933,28934,28935,28936,28937,28938,28939,28940,28941,28942,28943,28944,28945,28946,28947,28948,28949,28950,28951,28952,28953,28954,28955,28960,28961,28962,28963,28964,28965,28966,28967,28968,28969,28970,28971,28972,28973,28974,28975,28976,28977,28978,28979,28980,28981,28982,28983,28984,28985,28986,28987,28988,28989,28990,28991,28992,28993,28994,28995,28996,28997,28998,28999,29010,29011,29012,29013,29014,29015,29016,29017,29018,29019,29020,29021,29022,29023,29024,29025,29026,29027,29028,29029,29030,29031,29032,29033,29034,29035,29036,29037,29038,29039,29040,29041,29042,29043,29044,29045,29046,29047,29048,29049,29050,29051,29052,29053,29054,29055,29056,48048,48049,48050,48051,48052,48053,48054,48055,48056,48057,48058,48059,80936,80937,80938,80939,80940,80941,80942,80943,80944,80945,80946,80947
+
+
+
+
+
+
+
+
+
+ 85
+ 255
+ 10
+ 28769,28770,28771,28772,28773,28774,28775,28776,28777,28778,28779,28780,28781,28782,28783,28784,28785,28786,28787,28788,28789,28790,28791,28792,28793,28794,28795,28796,28797,28798,28799,28800,28801,28802,28803,28804,28805,28806,28807,28808,28809,28810,28811,28812,28813,28814,28815,28816,28817,18818,28819,28820,28821,28822,28823,28824,28825,28826,28827,28828,28829,28830,28831,28832,28833,28834,28835,28836,28837,28838,28839,28840,28841,28842,28843,28844,28845,28846,28847,28848,28849,28850,28851,28852,28853,28854,28855,28856,28857,28858,28859,28860,28861,28862,28863,28864,28865,28866,28867,28868,28869,28870,28871,28872,28873,28874,28875,28876,28877,28878,28879,28880,28881,28882,28883,28884,28885,28886,28887,28888,28889,28890,28891,28892,28893,28894,28895,28896,28897,28898,28899,28900,28901,28902,28903,28904,28905,28906,28907,28908,28909,28910,28911,28912,28913,28914,28915,28916,28927,28918,28919,28920,28921,28922,28923,28924,28925,28926,28927,28928,28929,28930,28931,28932,28933,28934,28935,28936,28937,28938,28939,28940,28941,28942,28943,28944,28945,28946,28947,28948,28949,28950,28951,28952,28953,28954,28955,28960,28961,28962,28963,28964,28965,28966,28967,28968,28969,28970,28971,28972,28973,28974,28975,28976,28977,28978,28979,28980,28981,28982,28983,28984,28985,28986,28987,28988,28989,28990,28991,28992,28993,28994,28995,28996,28997,28998,28999,29010,29011,29012,29013,29014,29015,29016,29017,29018,29019,29020,29021,29022,29023,29024,29025,29026,29027,29028,29029,29030,29031,29032,29033,29034,29035,29036,29037,29038,29039,29040,29041,29042,29043,29044,29045,29046,29047,29048,29049,29050,29051,29052,29053,29054,29055,29056,48048,48049,48050,48051,48052,48053,48054,48055,48056,48057,48058,48059,80936,80937,80938,80939,80940,80941,80942,80943,80944,80945,80946,80947
+
+
+
+
+
+
+
+
+
+ 85
+ 255
+ 10
+ 28769,28770,28771,28772,28773,28774,28775,28776,28777,28778,28779,28780,28781,28782,28783,28784,28785,28786,28787,28788,28789,28790,28791,28792,28793,28794,28795,28796,28797,28798,28799,28800,28801,28802,28803,28804,28805,28806,28807,28808,28809,28810,28811,28812,28813,28814,28815,28816,28817,18818,28819,28820,28821,28822,28823,28824,28825,28826,28827,28828,28829,28830,28831,28832,28833,28834,28835,28836,28837,28838,28839,28840,28841,28842,28843,28844,28845,28846,28847,28848,28849,28850,28851,28852,28853,28854,28855,28856,28857,28858,28859,28860,28861,28862,28863,28864,28865,28866,28867,28868,28869,28870,28871,28872,28873,28874,28875,28876,28877,28878,28879,28880,28881,28882,28883,28884,28885,28886,28887,28888,28889,28890,28891,28892,28893,28894,28895,28896,28897,28898,28899,28900,28901,28902,28903,28904,28905,28906,28907,28908,28909,28910,28911,28912,28913,28914,28915,28916,28927,28918,28919,28920,28921,28922,28923,28924,28925,28926,28927,28928,28929,28930,28931,28932,28933,28934,28935,28936,28937,28938,28939,28940,28941,28942,28943,28944,28945,28946,28947,28948,28949,28950,28951,28952,28953,28954,28955,28960,28961,28962,28963,28964,28965,28966,28967,28968,28969,28970,28971,28972,28973,28974,28975,28976,28977,28978,28979,28980,28981,28982,28983,28984,28985,28986,28987,28988,28989,28990,28991,28992,28993,28994,28995,28996,28997,28998,28999,29010,29011,29012,29013,29014,29015,29016,29017,29018,29019,29020,29021,29022,29023,29024,29025,29026,29027,29028,29029,29030,29031,29032,29033,29034,29035,29036,29037,29038,29039,29040,29041,29042,29043,29044,29045,29046,29047,29048,29049,29050,29051,29052,29053,29054,29055,29056,48048,48049,48050,48051,48052,48053,48054,48055,48056,48057,48058,48059,80936,80937,80938,80939,80940,80941,80942,80943,80944,80945,80946,80947
+
+
+
+
- Enchant 1 Apocalypse weapon to +10.
+
85
255
+ 10
+ 17324,17325,17326,17327,17328,17329,17330,17331,17332,17333,17334,17335,17336,17337,17865,17866,17867,17868,17869,17870,17871,17872,17873,17874,17875,17876,17877,17878,18001,18002,18003,18004,18005,18006,18007,18008,18009,18010,18011,18012,18013,18014,18704,18705,18706,18707,18708,18709,18710,18711,18712,18713,18714,18715,18716,18717,18718,18719,18720,18721,18722,18723,18724,18725,18726,18727,18728,18729,18730,18731,18732,18733,18734,18734,18735,18736,18737,18738,18739,18740,18741,18742,18743,18744,18745,18746,18747,18748,18749,18750,18751,18752,18753,18754,18755,18756,18757,18758,18759,18760,18761,18762,18763,18764,18765,18766,18767,18768,18769,18770,18771,18772,18773,18774,18775,18776,18777,18778,18779,18780,18781,18782,18783,18784,18785,18786,18787,18788,18789,18790,18791,18792,18793,18794,18795,18796,18797,18798,18799,18800,18801,18802,18803,18804,18805,18806,18807,18808,18809,18810,18811,18812,18813,18814,18815,18816,18817,18818,18819,18820,18821,18822,18823,18824,18825,18826,18827,18828,18829,30022,30023,30024,30025,30026,30027,30028,30029,30030,30031,30032,30033,30034,30035,30036,30037,30038,30039,30040,30041,30042,30043,30044,30045,30046,30047,30048,30049,30050,30051,30052,30053,30054,30055,30056,30057,30058,30059,30060,30061,30062,30063,30064,30065,30066,30067,30068,30069,30070,30071,30072,30073,30074,30075,30076,30077,30078,30079,30080,30081,30082,30083,30084,30085,30086,30087,30088,30089,30090,30091,30092,30093,30094,30095,30096,30097,30098,30099,30100,30101,30102,30103,30104,30105,34509,34510,34511,34512,34513,34514,34515,34516,34516,34517,34518,34519,34520,34521,34522,34523,34524,34525,34526,34527,34528,34529,34530,34531,34532,34533,34534,34535,34536,34537,34538,34539,34540,34541,34542,34543,34544,34545,34546,34547,34548,34549,34550,34551,34552,34553,34554,34556,34557,34558,34559,34560,34561,34562,34563,34564,34565,34566,34567,34567,34568,34569,34570,34571,34572,34573,34574,34719,34720,34721,34722,34723,34724,34725,34726,34727,34728,34729,34730,45823,45824,45825,45826,45827,45828,45829,45830,45831,45832,45833,45834,45835,45836
- Clan Reputation
- Fame
+
+
-
- Enchant 1 Apocalypse weapon to +15.
+
+
85
255
+ 15
+ 17324,17325,17326,17327,17328,17329,17330,17331,17332,17333,17334,17335,17336,17337,17865,17866,17867,17868,17869,17870,17871,17872,17873,17874,17875,17876,17877,17878,18001,18002,18003,18004,18005,18006,18007,18008,18009,18010,18011,18012,18013,18014,18704,18705,18706,18707,18708,18709,18710,18711,18712,18713,18714,18715,18716,18717,18718,18719,18720,18721,18722,18723,18724,18725,18726,18727,18728,18729,18730,18731,18732,18733,18734,18734,18735,18736,18737,18738,18739,18740,18741,18742,18743,18744,18745,18746,18747,18748,18749,18750,18751,18752,18753,18754,18755,18756,18757,18758,18759,18760,18761,18762,18763,18764,18765,18766,18767,18768,18769,18770,18771,18772,18773,18774,18775,18776,18777,18778,18779,18780,18781,18782,18783,18784,18785,18786,18787,18788,18789,18790,18791,18792,18793,18794,18795,18796,18797,18798,18799,18800,18801,18802,18803,18804,18805,18806,18807,18808,18809,18810,18811,18812,18813,18814,18815,18816,18817,18818,18819,18820,18821,18822,18823,18824,18825,18826,18827,18828,18829,30022,30023,30024,30025,30026,30027,30028,30029,30030,30031,30032,30033,30034,30035,30036,30037,30038,30039,30040,30041,30042,30043,30044,30045,30046,30047,30048,30049,30050,30051,30052,30053,30054,30055,30056,30057,30058,30059,30060,30061,30062,30063,30064,30065,30066,30067,30068,30069,30070,30071,30072,30073,30074,30075,30076,30077,30078,30079,30080,30081,30082,30083,30084,30085,30086,30087,30088,30089,30090,30091,30092,30093,30094,30095,30096,30097,30098,30099,30100,30101,30102,30103,30104,30105,34509,34510,34511,34512,34513,34514,34515,34516,34516,34517,34518,34519,34520,34521,34522,34523,34524,34525,34526,34527,34528,34529,34530,34531,34532,34533,34534,34535,34536,34537,34538,34539,34540,34541,34542,34543,34544,34545,34546,34547,34548,34549,34550,34551,34552,34553,34554,34556,34557,34558,34559,34560,34561,34562,34563,34564,34565,34566,34567,34567,34568,34569,34570,34571,34572,34573,34574,34719,34720,34721,34722,34723,34724,34725,34726,34727,34728,34729,34730,45823,45824,45825,45826,45827,45828,45829,45830,45831,45832,45833,45834,45835,45836
- Clan Reputation
- Fame
+
+
-
- Enchant 1 Apocalypse weapon to +20.
+
+
85
255
+ 20
+ 17324,17325,17326,17327,17328,17329,17330,17331,17332,17333,17334,17335,17336,17337,17865,17866,17867,17868,17869,17870,17871,17872,17873,17874,17875,17876,17877,17878,18001,18002,18003,18004,18005,18006,18007,18008,18009,18010,18011,18012,18013,18014,18704,18705,18706,18707,18708,18709,18710,18711,18712,18713,18714,18715,18716,18717,18718,18719,18720,18721,18722,18723,18724,18725,18726,18727,18728,18729,18730,18731,18732,18733,18734,18734,18735,18736,18737,18738,18739,18740,18741,18742,18743,18744,18745,18746,18747,18748,18749,18750,18751,18752,18753,18754,18755,18756,18757,18758,18759,18760,18761,18762,18763,18764,18765,18766,18767,18768,18769,18770,18771,18772,18773,18774,18775,18776,18777,18778,18779,18780,18781,18782,18783,18784,18785,18786,18787,18788,18789,18790,18791,18792,18793,18794,18795,18796,18797,18798,18799,18800,18801,18802,18803,18804,18805,18806,18807,18808,18809,18810,18811,18812,18813,18814,18815,18816,18817,18818,18819,18820,18821,18822,18823,18824,18825,18826,18827,18828,18829,30022,30023,30024,30025,30026,30027,30028,30029,30030,30031,30032,30033,30034,30035,30036,30037,30038,30039,30040,30041,30042,30043,30044,30045,30046,30047,30048,30049,30050,30051,30052,30053,30054,30055,30056,30057,30058,30059,30060,30061,30062,30063,30064,30065,30066,30067,30068,30069,30070,30071,30072,30073,30074,30075,30076,30077,30078,30079,30080,30081,30082,30083,30084,30085,30086,30087,30088,30089,30090,30091,30092,30093,30094,30095,30096,30097,30098,30099,30100,30101,30102,30103,30104,30105,34509,34510,34511,34512,34513,34514,34515,34516,34516,34517,34518,34519,34520,34521,34522,34523,34524,34525,34526,34527,34528,34529,34530,34531,34532,34533,34534,34535,34536,34537,34538,34539,34540,34541,34542,34543,34544,34545,34546,34547,34548,34549,34550,34551,34552,34553,34554,34556,34557,34558,34559,34560,34561,34562,34563,34564,34565,34566,34567,34567,34568,34569,34570,34571,34572,34573,34574,34719,34720,34721,34722,34723,34724,34725,34726,34727,34728,34729,34730,45823,45824,45825,45826,45827,45828,45829,45830,45831,45832,45833,45834,45835,45836
- Clan Reputation
- Fame
+
+
- Enchant 1 Specter weapon to +10.
+
85
255
+ 10
+ 17382,17383,17384,17385,17386,17387,17388,17389,17390,17391,17392,17392,17393,17394,17395,17899,17900,17901,17902,17903,17904,17905,17906,17907,17908,17909,17910,17911,17912,18035,18036,18037,18038,18039,18040,18041,18042,18043,18044,18045,18046,18047,18048,18830,18831,18832,18833,18834,18835,18836,18837,18838,18839,18840,18841,18842,18843,18844,18845,18846,18847,18848,18849,18850,18851,18852,18853,18854,18855,18856,18857,18858,18859,18860,18861,18862,18863,18864,18865,18866,18867,18868,18869,18870,18871,18872,18873,18874,18875,18876,18877,18878,18879,18880,18881,18882,18883,18884,18885,18886,18887,18888,18889,18890,18891,18892,18893,18894,18895,18896,18897,18898,18899,18900,18901,18902,18903,18904,18905,18906,18907,18908,18909,18910,18911,18912,18913,18914,18915,18916,18917,18918,18919,18920,19821,18922,18923,18924,18925,18926,18927,18928,18929,18930,18931,18932,18933,18934,18935,18936,18937,18938,18939,18940,18941,18942,18943,18944,18945,18946,18947,18948,18949,18950,18951,18952,18953,18954,18955,30107,30108,30109,30110,30111,30112,30113,30114,30115,30116,30117,30118,30119,30120,30121,30122,30123,30124,30125,30126,30127,30128,30129,30130,30131,30132,30133,30134,30135,30136,30137,30138,30139,30140,30141,30142,30143,30144,30145,30146,30147,30148,30149,30150,30151,30152,30153,30154,30155,30156,30157,30158,30159,30160,30161,30162,30163,30164,30165,30166,30167,30168,30169,30170,30171,30172,30173,30174,30175,30176,30177,30178,30179,30180,30181,30182,30183,30184,30185,30186,30187,30188,30189,45851,45852,45853,45854,45855,45856,45857,45858,45859,45860,45861,45862,45863,45864
- Clan Reputation
- Fame
+
+
-
- Enchant 1 Specter weapon to +15.
+
+
85
255
+ 15
+ 17382,17383,17384,17385,17386,17387,17388,17389,17390,17391,17392,17392,17393,17394,17395,17899,17900,17901,17902,17903,17904,17905,17906,17907,17908,17909,17910,17911,17912,18035,18036,18037,18038,18039,18040,18041,18042,18043,18044,18045,18046,18047,18048,18830,18831,18832,18833,18834,18835,18836,18837,18838,18839,18840,18841,18842,18843,18844,18845,18846,18847,18848,18849,18850,18851,18852,18853,18854,18855,18856,18857,18858,18859,18860,18861,18862,18863,18864,18865,18866,18867,18868,18869,18870,18871,18872,18873,18874,18875,18876,18877,18878,18879,18880,18881,18882,18883,18884,18885,18886,18887,18888,18889,18890,18891,18892,18893,18894,18895,18896,18897,18898,18899,18900,18901,18902,18903,18904,18905,18906,18907,18908,18909,18910,18911,18912,18913,18914,18915,18916,18917,18918,18919,18920,19821,18922,18923,18924,18925,18926,18927,18928,18929,18930,18931,18932,18933,18934,18935,18936,18937,18938,18939,18940,18941,18942,18943,18944,18945,18946,18947,18948,18949,18950,18951,18952,18953,18954,18955,30107,30108,30109,30110,30111,30112,30113,30114,30115,30116,30117,30118,30119,30120,30121,30122,30123,30124,30125,30126,30127,30128,30129,30130,30131,30132,30133,30134,30135,30136,30137,30138,30139,30140,30141,30142,30143,30144,30145,30146,30147,30148,30149,30150,30151,30152,30153,30154,30155,30156,30157,30158,30159,30160,30161,30162,30163,30164,30165,30166,30167,30168,30169,30170,30171,30172,30173,30174,30175,30176,30177,30178,30179,30180,30181,30182,30183,30184,30185,30186,30187,30188,30189,45851,45852,45853,45854,45855,45856,45857,45858,45859,45860,45861,45862,45863,45864
- Clan Reputation
- Fame
+
+
-
- Enchant 1 Specter weapon to +20.
+
+
85
255
+ 20
+ 17382,17383,17384,17385,17386,17387,17388,17389,17390,17391,17392,17392,17393,17394,17395,17899,17900,17901,17902,17903,17904,17905,17906,17907,17908,17909,17910,17911,17912,18035,18036,18037,18038,18039,18040,18041,18042,18043,18044,18045,18046,18047,18048,18830,18831,18832,18833,18834,18835,18836,18837,18838,18839,18840,18841,18842,18843,18844,18845,18846,18847,18848,18849,18850,18851,18852,18853,18854,18855,18856,18857,18858,18859,18860,18861,18862,18863,18864,18865,18866,18867,18868,18869,18870,18871,18872,18873,18874,18875,18876,18877,18878,18879,18880,18881,18882,18883,18884,18885,18886,18887,18888,18889,18890,18891,18892,18893,18894,18895,18896,18897,18898,18899,18900,18901,18902,18903,18904,18905,18906,18907,18908,18909,18910,18911,18912,18913,18914,18915,18916,18917,18918,18919,18920,19821,18922,18923,18924,18925,18926,18927,18928,18929,18930,18931,18932,18933,18934,18935,18936,18937,18938,18939,18940,18941,18942,18943,18944,18945,18946,18947,18948,18949,18950,18951,18952,18953,18954,18955,30107,30108,30109,30110,30111,30112,30113,30114,30115,30116,30117,30118,30119,30120,30121,30122,30123,30124,30125,30126,30127,30128,30129,30130,30131,30132,30133,30134,30135,30136,30137,30138,30139,30140,30141,30142,30143,30144,30145,30146,30147,30148,30149,30150,30151,30152,30153,30154,30155,30156,30157,30158,30159,30160,30161,30162,30163,30164,30165,30166,30167,30168,30169,30170,30171,30172,30173,30174,30175,30176,30177,30178,30179,30180,30181,30182,30183,30184,30185,30186,30187,30188,30189,45851,45852,45853,45854,45855,45856,45857,45858,45859,45860,45861,45862,45863,45864
- Clan Reputation
- Fame
+
+
- Enchant 1 Helios weapon to +10.
+
85
255
+ 10
+ 17416,17417,17418,17419,17420,17421,17422,17423,17424,17425,17426,17427,17428,17429,17933,17934,17935,17936,17937,17938,17939,17940,17941,17942,17943,17944,17945,17946,18069,18070,18071,18072,18073,18074,18075,18076,18077,18078,18079,18080,18081,18082,18956,18957,18958,18959,18960,18961,18962,18963,18964,18965,18966,18967,18968,18969,18970,18971,18972,18973,18974,18975,18976,18977,18978,18979,18980,18981,18982,18983,18984,18985,18986,18987,18988,18989,18990,18991,18992,18993,18994,18995,18996,18997,18998,18999,19000,19001,19002,19003,19004,19005,19006,19007,19008,19009,19010,19011,19012,19013,19014,19015,19016,19017,19018,19019,19020,19021,19022,19023,19024,19025,19026,19027,19028,19029,19030,19031,19032,19033,19034,19035,19036,19037,19038,19039,19040,19041,19042,19043,19044,19045,19046,19047,19048,19049,19050,19051,19052,19053,19054,19055,19056,19057,19058,19059,19060,19061,19062,19063,19064,19065,19066,19067,19068,19069,19070,19071,19072,19073,19074,19075,19076,19077,19078,19079,19080,19081,30190,30191,30192,30193,30194,30195,30196,30197,30198,30199,30200,30201,30202,30203,30204,30205,30206,30207,30208,30209,30210,30211,30212,30213,30214,30215,30216,30217,30218,30219,30220,30221,30222,30223,30224,30225,30226,30227,30228,30229,30230,30231,30232,30233,30234,30235,30236,30237,30238,30239,30240,30241,30242,30243,30244,30245,30246,30247,30248,30249,30250,30251,30252,30253,30254,30255,30256,30257,30258,30259,30260,30261,30262,30263,30264,30265,30266,30267,30268,30269,30270,30271,30272,30273,45879,45880,45881,45882,45883,45884,45885,45886,45887,45888,45889,45890,45891,45892
- Clan Reputation
- Fame
+
+
-
- Enchant 1 Helios weapon to +15.
+
+
85
255
+ 15
+ 17416,17417,17418,17419,17420,17421,17422,17423,17424,17425,17426,17427,17428,17429,17933,17934,17935,17936,17937,17938,17939,17940,17941,17942,17943,17944,17945,17946,18069,18070,18071,18072,18073,18074,18075,18076,18077,18078,18079,18080,18081,18082,18956,18957,18958,18959,18960,18961,18962,18963,18964,18965,18966,18967,18968,18969,18970,18971,18972,18973,18974,18975,18976,18977,18978,18979,18980,18981,18982,18983,18984,18985,18986,18987,18988,18989,18990,18991,18992,18993,18994,18995,18996,18997,18998,18999,19000,19001,19002,19003,19004,19005,19006,19007,19008,19009,19010,19011,19012,19013,19014,19015,19016,19017,19018,19019,19020,19021,19022,19023,19024,19025,19026,19027,19028,19029,19030,19031,19032,19033,19034,19035,19036,19037,19038,19039,19040,19041,19042,19043,19044,19045,19046,19047,19048,19049,19050,19051,19052,19053,19054,19055,19056,19057,19058,19059,19060,19061,19062,19063,19064,19065,19066,19067,19068,19069,19070,19071,19072,19073,19074,19075,19076,19077,19078,19079,19080,19081,30190,30191,30192,30193,30194,30195,30196,30197,30198,30199,30200,30201,30202,30203,30204,30205,30206,30207,30208,30209,30210,30211,30212,30213,30214,30215,30216,30217,30218,30219,30220,30221,30222,30223,30224,30225,30226,30227,30228,30229,30230,30231,30232,30233,30234,30235,30236,30237,30238,30239,30240,30241,30242,30243,30244,30245,30246,30247,30248,30249,30250,30251,30252,30253,30254,30255,30256,30257,30258,30259,30260,30261,30262,30263,30264,30265,30266,30267,30268,30269,30270,30271,30272,30273,45879,45880,45881,45882,45883,45884,45885,45886,45887,45888,45889,45890,45891,45892
- Clan Reputation
- Fame
+
+
-
- Enchant 1 Helios weapon to +20.
+
+
85
255
+ 20
+ 17416,17417,17418,17419,17420,17421,17422,17423,17424,17425,17426,17427,17428,17429,17933,17934,17935,17936,17937,17938,17939,17940,17941,17942,17943,17944,17945,17946,18069,18070,18071,18072,18073,18074,18075,18076,18077,18078,18079,18080,18081,18082,18956,18957,18958,18959,18960,18961,18962,18963,18964,18965,18966,18967,18968,18969,18970,18971,18972,18973,18974,18975,18976,18977,18978,18979,18980,18981,18982,18983,18984,18985,18986,18987,18988,18989,18990,18991,18992,18993,18994,18995,18996,18997,18998,18999,19000,19001,19002,19003,19004,19005,19006,19007,19008,19009,19010,19011,19012,19013,19014,19015,19016,19017,19018,19019,19020,19021,19022,19023,19024,19025,19026,19027,19028,19029,19030,19031,19032,19033,19034,19035,19036,19037,19038,19039,19040,19041,19042,19043,19044,19045,19046,19047,19048,19049,19050,19051,19052,19053,19054,19055,19056,19057,19058,19059,19060,19061,19062,19063,19064,19065,19066,19067,19068,19069,19070,19071,19072,19073,19074,19075,19076,19077,19078,19079,19080,19081,30190,30191,30192,30193,30194,30195,30196,30197,30198,30199,30200,30201,30202,30203,30204,30205,30206,30207,30208,30209,30210,30211,30212,30213,30214,30215,30216,30217,30218,30219,30220,30221,30222,30223,30224,30225,30226,30227,30228,30229,30230,30231,30232,30233,30234,30235,30236,30237,30238,30239,30240,30241,30242,30243,30244,30245,30246,30247,30248,30249,30250,30251,30252,30253,30254,30255,30256,30257,30258,30259,30260,30261,30262,30263,30264,30265,30266,30267,30268,30269,30270,30271,30272,30273,45879,45880,45881,45882,45883,45884,45885,45886,45887,45888,45889,45890,45891,45892
- Clan Reputation
- Fame
+
+
- Enchant 1 Bloody Helios weapon to +10.
+
85
255
+ 10
+ 35193,35194,35195,35196,35197,35198,35199,35200,35201,35202,35203,35204,35205,35206,35207,35208,35209,35210,35211,35212,35213,35214,35215,35216,35217,35218,35219,35220,35221,35222,35223,35224,35225,35226,35227,35228,35229,35230,35231,35232,35233,35234,35235,35236,35237,35238,35239,35240,35241,35242,35243,35244,35245,35246,35247,35248,35249,35250,35251,35252,35253,35254,35255,35256,35257,35258,35259,35260,35261,35262,35263,35264,35265,35266,35267,35268,35269,35270,35271,35272,35273,35274,35275,35276,35277,35278,35279,35280,35281,35282,35283,35284,35285,35286,35287,35288,35289,35290,80337,80338,80339,80340,80341,80342,80343,80344,80345,80346,80347,80348,80349,80350
- Clan Reputation
- Fame
+
+
-
- Enchant 1 Bloody Helios weapon to +15.
+
+
85
255
+ 15
+ 35193,35194,35195,35196,35197,35198,35199,35200,35201,35202,35203,35204,35205,35206,35207,35208,35209,35210,35211,35212,35213,35214,35215,35216,35217,35218,35219,35220,35221,35222,35223,35224,35225,35226,35227,35228,35229,35230,35231,35232,35233,35234,35235,35236,35237,35238,35239,35240,35241,35242,35243,35244,35245,35246,35247,35248,35249,35250,35251,35252,35253,35254,35255,35256,35257,35258,35259,35260,35261,35262,35263,35264,35265,35266,35267,35268,35269,35270,35271,35272,35273,35274,35275,35276,35277,35278,35279,35280,35281,35282,35283,35284,35285,35286,35287,35288,35289,35290,80337,80338,80339,80340,80341,80342,80343,80344,80345,80346,80347,80348,80349,80350
- Clan Reputation
- Fame
+
+
-
- Enchant 1 Bloody Helios weapon to +20.
+
+
85
255
+ 20
+ 35193,35194,35195,35196,35197,35198,35199,35200,35201,35202,35203,35204,35205,35206,35207,35208,35209,35210,35211,35212,35213,35214,35215,35216,35217,35218,35219,35220,35221,35222,35223,35224,35225,35226,35227,35228,35229,35230,35231,35232,35233,35234,35235,35236,35237,35238,35239,35240,35241,35242,35243,35244,35245,35246,35247,35248,35249,35250,35251,35252,35253,35254,35255,35256,35257,35258,35259,35260,35261,35262,35263,35264,35265,35266,35267,35268,35269,35270,35271,35272,35273,35274,35275,35276,35277,35278,35279,35280,35281,35282,35283,35284,35285,35286,35287,35288,35289,35290,80337,80338,80339,80340,80341,80342,80343,80344,80345,80346,80347,80348,80349,80350
- Clan Reputation
- Fame
+
+
- Enchant 1 Dark Helios weapon to +10.
+
85
255
+ 10
+ 35095,35096,35097,35098,35099,35100,35101,35102,35103,35104,35105,35106,35107,35108,35109,35110,35111,35112,35113,35114,35115,35116,35117,35118,35119,35120,35121,35122,35123,35124,35125,35126,35127,35128,35129,35130,35131,35132,35133,35134,35135,35136,35137,35138,35139,35140,35141,35142,35143,35144,35145,35146,35147,35148,35149,35150,35151,35152,35153,35154,35155,35156,35157,35158,35159,35160,35161,35162,35163,35164,35165,35166,35167,35168,35169,35170,35171,35172,35173,35174,35175,35176,35177,35178,35179,35180,35181,35182,35183,35184,35185,35186,35187,35188,35189,35190,35191,35192
- Clan Reputation
- Fame
+
+
-
- Enchant 1 Dark Helios weapon to +15.
+
+
85
255
+ 15
+ 35095,35096,35097,35098,35099,35100,35101,35102,35103,35104,35105,35106,35107,35108,35109,35110,35111,35112,35113,35114,35115,35116,35117,35118,35119,35120,35121,35122,35123,35124,35125,35126,35127,35128,35129,35130,35131,35132,35133,35134,35135,35136,35137,35138,35139,35140,35141,35142,35143,35144,35145,35146,35147,35148,35149,35150,35151,35152,35153,35154,35155,35156,35157,35158,35159,35160,35161,35162,35163,35164,35165,35166,35167,35168,35169,35170,35171,35172,35173,35174,35175,35176,35177,35178,35179,35180,35181,35182,35183,35184,35185,35186,35187,35188,35189,35190,35191,35192
- Clan Reputation
- Fame
+
+
-
- Enchant 1 Dark Helios weapon to +20.
+
+
85
255
+ 20
+ 35095,35096,35097,35098,35099,35100,35101,35102,35103,35104,35105,35106,35107,35108,35109,35110,35111,35112,35113,35114,35115,35116,35117,35118,35119,35120,35121,35122,35123,35124,35125,35126,35127,35128,35129,35130,35131,35132,35133,35134,35135,35136,35137,35138,35139,35140,35141,35142,35143,35144,35145,35146,35147,35148,35149,35150,35151,35152,35153,35154,35155,35156,35157,35158,35159,35160,35161,35162,35163,35164,35165,35166,35167,35168,35169,35170,35171,35172,35173,35174,35175,35176,35177,35178,35179,35180,35181,35182,35183,35184,35185,35186,35187,35188,35189,35190,35191,35192
- Clan Reputation
- Fame
+
+
- Complete the 'Savior's Path - Hall of Etina' quest.
-
+
+
+ 10890
+
- Clan Reputation
- Fame
+
+
+
+
+
+
+
+ 99
+
+
+
+
+
+
+
+
+
+
+ 100
+
+
+
+
+
+
+
+
+
+
+ 101
+
+
+
+
+
+
+
+
+
+
+ 102
+
+
+
+
+
+
+
+
+
+
+ 103
+
+
+
+
+
+
+
+
+
+
+ 104
+
+
+
+
+
+
+
+
+
+
+ 105
+
+
+
+
+
+
+
+
+
+
+ 106
+
+
+
+
+
+
+
+
+
+
+
+ 107
+
+
+
+
+
+
+
+
+
+
+
+ 108
+
+
+
+
+
+
+
+
+
+
+
+ 109
+
+
+
+
+
+
+
+
+
+
+
+ 110
+
+
+
+
+
+
+
+
+
+
+ 111
+
+
+
+
+
+
+
+
+
+
+ 112
+
+
+
+
+
+
+
+
+
+
+ 113
+
+
+
+
+
+
+
+
+
+
+ 114
+
+
+
+
+
+
+
+
+
+
+ 115
+
+
+
+
+
+
+
+
+
+
+ 116
+
+
+
+
+
+
+
+
+
+
+ 117
+
+
+
+
+
+
+
+
+
+
+ 118
+
+
+
+
+
+
+
+
+
+
+ 119
+
+
+
+
+
+
+
+
+
+
+ 120
+
+
+
+
+
+
+
+
+
+
+ 99
+
+
+
+
+
+
+
+
+
+
+ 100
+
+
+
+
+
+
+
+
+
+
+ 101
+
+
+
+
+
+
+
+
+
+
+ 102
+
+
+
+
+
+
+
+
+
+
+ 103
+
+
+
+
+
+
+
+
+
+
+ 104
+
+
+
+
+
+
+
+
+
+
+ 105
+
+
+
+
+
+
+
+
+
+
+ 106
+
+
+
+
+
+
+
+
+
+
+
+ 107
+
+
+
+
+
+
+
+
+
+
+
+ 108
+
+
+
+
+
+
+
+
+
+
+
+ 109
+
+
+
+
+
+
+
+
+
+
+
+ 110
+
+
+
+
+
+
+
+
+
+
+ 111
+
+
+
+
+
+
+
+
+
+
+ 112
+
+
+
+
+
+
+
+
+
+
+ 113
+
+
+
+
+
+
+
+
+
+
+ 114
+
+
+
+
+
+
+
+
+
+
+ 115
+
+
+
+
+
+
+
+
+
+
+ 116
+
+
+
+
+
+
+
+
+
+
+ 117
+
+
+
+
+
+
+
+
+
+
+ 118
+
+
+
+
+
+
+
+
+
+
+ 119
+
+
+
+
+
+
+
+
+
+
+ 120
+
+
+
+
+
- Use any of the following scrolls 24 times: Freya's Frozen Scroll Freya's Frozen Scroll (Event) Freya's Scroll of Storm Freya's Scroll of Storm (Event) PA Scroll of Storm
+
+ 40227,40231,47382,27673,47428,81054,81140
85
255
- Clan Reputation
- Fame
+
+
- Use any of the following items 8 times: Freya's Ice Rose Freya's Ice Rose (Event) PA Ice Rose
+
+ 48830,80441,80442,29789,48848,60000,80612
85
255
- Clan Reputation
- Fame
+
+
- Use any of the following items 8 times: Glowing Dragon's Attribute Potion (XP) Glowing Dragon's Attribute Potion (XP, Event) PA Glowing Dragon's Attribute Potion (XP)
+
+ 29776,48497,48755,48857,60182,60186,80748,81759
85
255
- Clan Reputation
- Fame
+
+
- Use any of the following items 8 times: Honey Dark Beer PA Honey Dark Beer
+
+ 60179,80747,80842,81011,81460,81747
85
255
- Clan Reputation
- Fame
+
+
- Use any of the following items 4 times: Emperor's Special Cocktail Emperor's Special Cocktail (Event) PA Emperor's Special Cocktail
+
+ 29791,80061,80062,80063,80435,80436,80437,80438,80439,80440,80753,80754,80755,80817,80818,80819,80820,80832,81012
85
255
- Clan Reputation
- Fame
+
+
- Use one of the following items 8 times: Shining Nevit's Gold Hourglass Shining Nevit's Gold Hourglass (Event) PA Shining Nevit's Gold Hourglass
+
+ 48642,60183,60187,80797,80852,81013,81892
85
255
- Clan Reputation
- Fame
+
+
- Use any of the following items 3 times. Abandoned Coal Mines' Time Stone, Storm Isle's Time Stone, Primeval Isle's Time Stone, Golden Altar's Time Stone
+
+ 81358,82134,80996,80905,80997,80906,80998,80960
100
255
- Clan Reputation
- Fame
+
+
-
- Kill 300 monsters in any hunting zone. (A monster kill counts only when XP is gained from it.) Available daily from 11:30 a.m. till 2:30 p.m. The quest progress is saved.
+
+
101
255
+ 11:30
+ 14:30
- Clan Reputation
- Fame
- Special Clan Reward Lv. 1
+
+
+
-
- Kill 300 monsters in any hunting zone. (A monster kill counts only when XP is gained from it.) Available daily from 5:30 p.m. till 8:30 p.m. The quest progress is saved.
+
+
101
255
+ 17:30
+ 20:30
- Clan Reputation
- Fame
- Special Clan Reward Lv. 1
+
+
+
- Kill 900 monsters in the Corroded Fields.
+
- TODO: Add correct monster ids.
100
255
- Clan Reputation
- Fame
- Vitality
+
+
+
+
-
- Fight fire with fire! Kill 1800 monsters in any hunting zone. (A monster kill counts only when XP is gained from it.)
-
- TODO: Add correct monster ids.
+
+
+
105
255
- Clan Reputation
- Fame
- Watermelon Seed
+
+
+
-
- Fight fire with fire! Defeat any of the bosses in the following group instance zones of any difficulty level 3 times: Crystal Prison (Baylor), Nightmare Kamaloka, Ashen Shadow Camp, Krofin's Nest
-
- TODO: Add correct monster ids.
+
+
+
+ 29213,29380,26093,26094,26096,26099,26102,26461,26462,26463,26464,26465,23653,23654,23655,23656,23657,23658,23659,23660,23661,23662,23663,23664,24813,24814,24815,24816,24817,24818,24819,24820,24821,24822,24823,24824,26390,26467
105
255
- Clan Reputation
- Fame
- Watermelon Seed
+
+
+
-
- Train 2 Mentees. (Mentorship lasts until the Mentee reaches Lv. 105.) To add a Mentee open the Friend Manager window (Alt+Y) and open the Mentorship tab.
+
+
85
255
- Clan Reputation
- Fame
-
-
-
- -->
-
-
- 85
- 255
-
-
-
-
+
+
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java b/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
index b846e23668..60c4b0c985 100644
--- a/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
+++ b/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
@@ -20,17 +20,27 @@ import java.util.logging.Logger;
import org.l2jmobius.gameserver.handler.DailyMissionHandler;
+import handlers.dailymissionhandlers.AuctionDailyMissionHandler;
+import handlers.dailymissionhandlers.AugmentationDailyMissionHandler;
import handlers.dailymissionhandlers.BossDailyMissionHandler;
import handlers.dailymissionhandlers.CeremonyOfChaosDailyMissionHandler;
+import handlers.dailymissionhandlers.CombinationDailyMissionHandler;
+import handlers.dailymissionhandlers.CompoundDailyMissionHandler;
+import handlers.dailymissionhandlers.EnchantDailyMissionHandler;
+import handlers.dailymissionhandlers.EnsoulDailyMissionHandler;
+import handlers.dailymissionhandlers.ExaltedDailyMissionHandler;
import handlers.dailymissionhandlers.FishingDailyMissionHandler;
import handlers.dailymissionhandlers.JoinClanDailyMissionHandler;
import handlers.dailymissionhandlers.LevelDailyMissionHandler;
import handlers.dailymissionhandlers.LoginMonthDailyMissionHandler;
import handlers.dailymissionhandlers.LoginWeekendDailyMissionHandler;
+import handlers.dailymissionhandlers.MentorDailyMissionHandler;
import handlers.dailymissionhandlers.MonsterDailyMissionHandler;
+import handlers.dailymissionhandlers.NoblesseDailyMissionHandler;
import handlers.dailymissionhandlers.OlympiadDailyMissionHandler;
import handlers.dailymissionhandlers.QuestDailyMissionHandler;
import handlers.dailymissionhandlers.SiegeDailyMissionHandler;
+import handlers.dailymissionhandlers.UseItemDailyMissionHandler;
/**
* @author UnAfraid
@@ -41,17 +51,27 @@ public class DailyMissionMasterHandler
public static void main(String[] args)
{
- DailyMissionHandler.getInstance().registerHandler("level", LevelDailyMissionHandler::new);
- DailyMissionHandler.getInstance().registerHandler("loginweekend", LoginWeekendDailyMissionHandler::new);
- DailyMissionHandler.getInstance().registerHandler("loginmonth", LoginMonthDailyMissionHandler::new);
- DailyMissionHandler.getInstance().registerHandler("quest", QuestDailyMissionHandler::new);
- DailyMissionHandler.getInstance().registerHandler("olympiad", OlympiadDailyMissionHandler::new);
- DailyMissionHandler.getInstance().registerHandler("siege", SiegeDailyMissionHandler::new);
- DailyMissionHandler.getInstance().registerHandler("ceremonyofchaos", CeremonyOfChaosDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("auction", AuctionDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("augment", AugmentationDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("boss", BossDailyMissionHandler::new);
- DailyMissionHandler.getInstance().registerHandler("monster", MonsterDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("ceremonyofchaos", CeremonyOfChaosDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("combine", CombinationDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("compound", CompoundDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("enchant", EnchantDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("ensoul", EnsoulDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("exalted", ExaltedDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("fishing", FishingDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("joinclan", JoinClanDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("level", LevelDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("loginmonth", LoginMonthDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("loginweekend", LoginWeekendDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("mentor", MentorDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("monster", MonsterDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("noblesse", NoblesseDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("olympiad", OlympiadDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("quest", QuestDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("siege", SiegeDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("useitem", UseItemDailyMissionHandler::new);
LOGGER.info(DailyMissionMasterHandler.class.getSimpleName() + ": Loaded " + DailyMissionHandler.getInstance().size() + " handlers.");
}
}
diff --git a/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/AuctionDailyMissionHandler.java b/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/AuctionDailyMissionHandler.java
new file mode 100644
index 0000000000..870f51f95b
--- /dev/null
+++ b/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/AuctionDailyMissionHandler.java
@@ -0,0 +1,93 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package handlers.dailymissionhandlers;
+
+import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
+import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
+import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.Containers;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerAuctionWin;
+import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
+
+/**
+ * @author CostyKiller
+ */
+public class AuctionDailyMissionHandler extends AbstractDailyMissionHandler
+{
+ private final int _amount;
+
+ public AuctionDailyMissionHandler(DailyMissionDataHolder holder)
+ {
+ super(holder);
+ _amount = holder.getRequiredCompletions();
+ }
+
+ @Override
+ public void init()
+ {
+ Containers.Players().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_AUCTION_WIN, (OnPlayerAuctionWin event) -> onPlayerAuctionWin(event), this));
+ }
+
+ @Override
+ public boolean isAvailable(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
+ if (entry != null)
+ {
+ switch (entry.getStatus())
+ {
+ case NOT_AVAILABLE: // Initial state
+ {
+ if (entry.getProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ storePlayerEntry(entry);
+ }
+ break;
+ }
+ case AVAILABLE:
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ private void onPlayerAuctionWin(OnPlayerAuctionWin event)
+ {
+ final Player player = event.getPlayer();
+ // Check if any condition needed here
+ processPlayerProgress(player);
+ }
+
+ private void processPlayerProgress(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), true);
+ if (entry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
+ {
+ if (entry.increaseProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(entry);
+ }
+ }
+}
diff --git a/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/AugmentationDailyMissionHandler.java b/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/AugmentationDailyMissionHandler.java
new file mode 100644
index 0000000000..5ac00ece33
--- /dev/null
+++ b/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/AugmentationDailyMissionHandler.java
@@ -0,0 +1,133 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package handlers.dailymissionhandlers;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
+import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
+import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.Containers;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerAugment;
+import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
+
+/**
+ * @author CostyKiller
+ */
+public class AugmentationDailyMissionHandler extends AbstractDailyMissionHandler
+{
+ private final int _missionId;
+ private final int _amount;
+ private final int _minLevel;
+ private final int _maxLevel;
+ private final Set _mineralIds = new HashSet<>();
+
+ public AugmentationDailyMissionHandler(DailyMissionDataHolder holder)
+ {
+ super(holder);
+ _missionId = holder.getId();
+ _amount = holder.getRequiredCompletions();
+ _minLevel = holder.getParams().getInt("minLevel", 0);
+ _maxLevel = holder.getParams().getInt("maxLevel", Integer.MAX_VALUE);
+ final String mineralIds = holder.getParams().getString("mineralIds", "");
+ if (!mineralIds.isEmpty())
+ {
+ for (String s : mineralIds.split(","))
+ {
+ final int id = Integer.parseInt(s);
+ if (!_mineralIds.contains(id))
+ {
+ _mineralIds.add(id);
+ }
+ }
+ }
+ }
+
+ @Override
+ public void init()
+ {
+ Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_PLAYER_AUGMENT, (OnPlayerAugment event) -> onPlayerAugment(event), this));
+ }
+
+ @Override
+ public boolean isAvailable(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
+ if (entry != null)
+ {
+ switch (entry.getStatus())
+ {
+ case NOT_AVAILABLE: // Initial state
+ {
+ if (entry.getProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ storePlayerEntry(entry);
+ }
+ break;
+ }
+ case AVAILABLE:
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ private void onPlayerAugment(OnPlayerAugment event)
+ {
+ final Player player = event.getPlayer();
+ if ((player.getLevel() < _minLevel) || (player.getLevel() > _maxLevel))
+ {
+ return;
+ }
+ // Only missions with specific augment stones
+ if ((_missionId == 3055) || (_missionId == 3056) || (_missionId == 3057))
+ {
+ for (int mineralId : _mineralIds)
+ {
+ // Check if used item has been augmented with specified stones
+ if (player.getInventory().getItemByItemId(event.getItem().getId()).isAugmented() && (event.getItem().getAugmentation().getMineralId() == mineralId))
+ {
+ processPlayerProgress(player);
+ }
+ }
+ }
+ else if (_mineralIds.isEmpty())
+ {
+ processPlayerProgress(player);
+ }
+ }
+
+ private void processPlayerProgress(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), true);
+ if (entry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
+ {
+ if (entry.increaseProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(entry);
+ }
+ }
+}
diff --git a/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/CeremonyOfChaosDailyMissionHandler.java b/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/CeremonyOfChaosDailyMissionHandler.java
index 82e8d58a4f..efc96f9f07 100644
--- a/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/CeremonyOfChaosDailyMissionHandler.java
+++ b/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/CeremonyOfChaosDailyMissionHandler.java
@@ -32,17 +32,19 @@ import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
public class CeremonyOfChaosDailyMissionHandler extends AbstractDailyMissionHandler
{
private final int _amount;
+ private final int _requiredMissionCompleteId;
public CeremonyOfChaosDailyMissionHandler(DailyMissionDataHolder holder)
{
super(holder);
+ _requiredMissionCompleteId = holder.getRequiredMissionCompleteId();
_amount = holder.getRequiredCompletions();
}
@Override
public void init()
{
- Containers.Global().addListener(new ConsumerEventListener(this, EventType.ON_CEREMONY_OF_CHAOS_MATCH_RESULT, (OnCeremonyOfChaosMatchResult event) -> onCeremonyOfChaosMatchResult(event), this));
+ Containers.Players().addListener(new ConsumerEventListener(this, EventType.ON_CEREMONY_OF_CHAOS_MATCH_RESULT, (OnCeremonyOfChaosMatchResult event) -> onCeremonyOfChaosMatchResult(event), this));
}
@Override
@@ -75,15 +77,34 @@ public class CeremonyOfChaosDailyMissionHandler extends AbstractDailyMissionHand
{
event.getMembers().forEach(member ->
{
- final DailyMissionPlayerEntry entry = getPlayerEntry(member.getObjectId(), true);
- if (entry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
+ if (((_requiredMissionCompleteId != 0) && checkRequiredMission(member)) || (_requiredMissionCompleteId == 0))
{
- if (entry.increaseProgress() >= _amount)
- {
- entry.setStatus(DailyMissionStatus.AVAILABLE);
- }
- storePlayerEntry(entry);
+ processPlayerProgress(member);
}
});
}
+
+ private void processPlayerProgress(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), true);
+ if (entry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
+ {
+ if (entry.increaseProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(entry);
+ }
+ }
+
+ private boolean checkRequiredMission(Player player)
+ {
+ final int missionId = getPlayerEntry(player.getObjectId(), false).getRewardId();
+ final int missionStatus = getStatus(player);
+ if ((missionId != 0) && (_requiredMissionCompleteId != 0) && (missionId == _requiredMissionCompleteId) && (missionStatus == DailyMissionStatus.COMPLETED.getClientId()))
+ {
+ return true;
+ }
+ return false;
+ }
}
diff --git a/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/CombinationDailyMissionHandler.java b/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/CombinationDailyMissionHandler.java
new file mode 100644
index 0000000000..5d17c6be72
--- /dev/null
+++ b/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/CombinationDailyMissionHandler.java
@@ -0,0 +1,152 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package handlers.dailymissionhandlers;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
+import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
+import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.Containers;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.item.OnItemCombination;
+import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
+
+/**
+ * @author CostyKiller
+ */
+public class CombinationDailyMissionHandler extends AbstractDailyMissionHandler
+{
+ private final int _requiredMissionCompleteId;
+ private final int _amount;
+ private final int _minLevel;
+ private final int _maxLevel;
+ private final Set _itemIds = new HashSet<>();
+ private final int _itemId;
+
+ public CombinationDailyMissionHandler(DailyMissionDataHolder holder)
+ {
+ super(holder);
+ _requiredMissionCompleteId = holder.getRequiredMissionCompleteId();
+ _amount = holder.getRequiredCompletions();
+ _minLevel = holder.getParams().getInt("minLevel", 0);
+ _maxLevel = holder.getParams().getInt("maxLevel", Integer.MAX_VALUE);
+ _itemId = holder.getParams().getInt("itemId", 0);
+ final String itemIds = holder.getParams().getString("itemIds", "");
+ if (!itemIds.isEmpty())
+ {
+ for (String s : itemIds.split(","))
+ {
+ final int id = Integer.parseInt(s);
+ if (!_itemIds.contains(id))
+ {
+ _itemIds.add(id);
+ }
+ }
+ }
+ else if (_itemId != 0)
+ {
+ _itemIds.add(holder.getParams().getInt("itemId"));
+ }
+ }
+
+ @Override
+ public void init()
+ {
+ Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_ITEM_COMBINATION, (OnItemCombination event) -> onItemCombination(event), this));
+ }
+
+ @Override
+ public boolean isAvailable(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
+ if (entry != null)
+ {
+ switch (entry.getStatus())
+ {
+ case NOT_AVAILABLE: // Initial state
+ {
+ if (entry.getProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ storePlayerEntry(entry);
+ }
+ break;
+ }
+ case AVAILABLE:
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ private void onItemCombination(OnItemCombination event)
+ {
+ final Player player = event.getPlayer();
+ if ((player.getLevel() < _minLevel) || (player.getLevel() > _maxLevel))
+ {
+ return;
+ }
+ if (((_requiredMissionCompleteId != 0) && checkRequiredMission(player)) || (_requiredMissionCompleteId == 0))
+ {
+ if (!_itemIds.isEmpty())
+ {
+ for (int item : _itemIds)
+ {
+ // Check if used item has been obtained from item combination or alchemy
+ if (event.getItem().getId() == item)
+ {
+ processPlayerProgress(player);
+ }
+ }
+ }
+ else
+ {
+ processPlayerProgress(player);
+ }
+ }
+ }
+
+ private void processPlayerProgress(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), true);
+ if (entry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
+ {
+ if (entry.increaseProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(entry);
+ }
+ }
+
+ private boolean checkRequiredMission(Player player)
+ {
+ final int missionId = getPlayerEntry(player.getObjectId(), false).getRewardId();
+ final int missionStatus = getStatus(player);
+ if ((missionId != 0) && (_requiredMissionCompleteId != 0) && (missionId == _requiredMissionCompleteId) && (missionStatus == DailyMissionStatus.COMPLETED.getClientId()))
+ {
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/CompoundDailyMissionHandler.java b/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/CompoundDailyMissionHandler.java
new file mode 100644
index 0000000000..6d2b8baf35
--- /dev/null
+++ b/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/CompoundDailyMissionHandler.java
@@ -0,0 +1,152 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package handlers.dailymissionhandlers;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
+import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
+import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.Containers;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.item.OnItemCompound;
+import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
+
+/**
+ * @author CostyKiller
+ */
+public class CompoundDailyMissionHandler extends AbstractDailyMissionHandler
+{
+ private final int _requiredMissionCompleteId;
+ private final int _amount;
+ private final int _minLevel;
+ private final int _maxLevel;
+ private final Set _itemIds = new HashSet<>();
+ private final int _itemId;
+
+ public CompoundDailyMissionHandler(DailyMissionDataHolder holder)
+ {
+ super(holder);
+ _requiredMissionCompleteId = holder.getRequiredMissionCompleteId();
+ _amount = holder.getRequiredCompletions();
+ _minLevel = holder.getParams().getInt("minLevel", 0);
+ _maxLevel = holder.getParams().getInt("maxLevel", Integer.MAX_VALUE);
+ _itemId = holder.getParams().getInt("itemId", 0);
+ final String itemIds = holder.getParams().getString("itemIds", "");
+ if (!itemIds.isEmpty())
+ {
+ for (String s : itemIds.split(","))
+ {
+ final int id = Integer.parseInt(s);
+ if (!_itemIds.contains(id))
+ {
+ _itemIds.add(id);
+ }
+ }
+ }
+ else if (_itemId != 0)
+ {
+ _itemIds.add(holder.getParams().getInt("itemId"));
+ }
+ }
+
+ @Override
+ public void init()
+ {
+ Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_ITEM_COMPOUND, (OnItemCompound event) -> onItemCompound(event), this));
+ }
+
+ @Override
+ public boolean isAvailable(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
+ if (entry != null)
+ {
+ switch (entry.getStatus())
+ {
+ case NOT_AVAILABLE: // Initial state
+ {
+ if (entry.getProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ storePlayerEntry(entry);
+ }
+ break;
+ }
+ case AVAILABLE:
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ private void onItemCompound(OnItemCompound event)
+ {
+ final Player player = event.getPlayer();
+ if ((player.getLevel() < _minLevel) || (player.getLevel() > _maxLevel))
+ {
+ return;
+ }
+ if (((_requiredMissionCompleteId != 0) && checkRequiredMission(player)) || (_requiredMissionCompleteId == 0))
+ {
+ if (!_itemIds.isEmpty())
+ {
+ for (int item : _itemIds)
+ {
+ // Check if used item has been obtained from item combination or alchemy
+ if (event.getItem().getId() == item)
+ {
+ processPlayerProgress(player);
+ }
+ }
+ }
+ else
+ {
+ processPlayerProgress(player);
+ }
+ }
+ }
+
+ private void processPlayerProgress(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), true);
+ if (entry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
+ {
+ if (entry.increaseProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(entry);
+ }
+ }
+
+ private boolean checkRequiredMission(Player player)
+ {
+ final int missionId = getPlayerEntry(player.getObjectId(), false).getRewardId();
+ final int missionStatus = getStatus(player);
+ if ((missionId != 0) && (_requiredMissionCompleteId != 0) && (missionId == _requiredMissionCompleteId) && (missionStatus == DailyMissionStatus.COMPLETED.getClientId()))
+ {
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/EnchantDailyMissionHandler.java b/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/EnchantDailyMissionHandler.java
new file mode 100644
index 0000000000..0e0f5dedbd
--- /dev/null
+++ b/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/EnchantDailyMissionHandler.java
@@ -0,0 +1,137 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package handlers.dailymissionhandlers;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
+import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
+import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.Containers;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.item.OnItemEnchantAdd;
+import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
+
+/**
+ * @author CostyKiller
+ */
+public class EnchantDailyMissionHandler extends AbstractDailyMissionHandler
+{
+ private final int _requiredMissionCompleteId;
+ private final int _amount;
+ private final int _minLevel;
+ private final int _maxLevel;
+ private final int _targetValue;
+ private final Set _itemIds = new HashSet<>();
+
+ public EnchantDailyMissionHandler(DailyMissionDataHolder holder)
+ {
+ super(holder);
+ _requiredMissionCompleteId = holder.getRequiredMissionCompleteId();
+ _amount = holder.getRequiredCompletions();
+ _minLevel = holder.getParams().getInt("minLevel", 0);
+ _maxLevel = holder.getParams().getInt("maxLevel", Integer.MAX_VALUE);
+ _targetValue = holder.getParams().getInt("targetValue", 0);
+ final String itemIds = holder.getParams().getString("itemIds", "");
+ if (!itemIds.isEmpty())
+ {
+ for (String s : itemIds.split(","))
+ {
+ final int id = Integer.parseInt(s);
+ if (!_itemIds.contains(id))
+ {
+ _itemIds.add(id);
+ }
+ }
+ }
+ }
+
+ @Override
+ public void init()
+ {
+ Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_ITEM_ENCHANT_ADD, (OnItemEnchantAdd event) -> onItemEnchantAdd(event), this));
+ }
+
+ @Override
+ public boolean isAvailable(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
+ if (entry != null)
+ {
+ switch (entry.getStatus())
+ {
+ case NOT_AVAILABLE: // Initial state
+ {
+ if (entry.getProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ storePlayerEntry(entry);
+ }
+ break;
+ }
+ case AVAILABLE:
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ private void onItemEnchantAdd(OnItemEnchantAdd event)
+ {
+ final Player player = event.getPlayer();
+ if ((player.getLevel() < _minLevel) || (player.getLevel() > _maxLevel))
+ {
+ return;
+ }
+ if (((_requiredMissionCompleteId != 0) && checkRequiredMission(player)) || (_requiredMissionCompleteId == 0))
+ {
+ if (_itemIds.contains(event.getItem().getId()) && (player.getInventory().getItemByObjectId(event.getItem().getObjectId()).getEnchantLevel() >= _targetValue))
+ {
+ processPlayerProgress(player);
+ }
+ }
+ }
+
+ private void processPlayerProgress(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), true);
+ if (entry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
+ {
+ if (entry.increaseProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(entry);
+ }
+ }
+
+ private boolean checkRequiredMission(Player player)
+ {
+ final int missionId = getPlayerEntry(player.getObjectId(), false).getRewardId();
+ final int missionStatus = getStatus(player);
+ if ((missionId != 0) && (_requiredMissionCompleteId != 0) && (missionId == _requiredMissionCompleteId) && (missionStatus == DailyMissionStatus.COMPLETED.getClientId()))
+ {
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/EnsoulDailyMissionHandler.java b/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/EnsoulDailyMissionHandler.java
new file mode 100644
index 0000000000..e577729a0a
--- /dev/null
+++ b/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/EnsoulDailyMissionHandler.java
@@ -0,0 +1,119 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package handlers.dailymissionhandlers;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
+import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
+import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.Containers;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.item.OnItemSoulCrystalAdd;
+import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
+
+/**
+ * @author CostyKiller
+ */
+public class EnsoulDailyMissionHandler extends AbstractDailyMissionHandler
+{
+ private final int _amount;
+ private final int _minLevel;
+ private final int _maxLevel;
+ private final Set _crystalIds = new HashSet<>();
+
+ public EnsoulDailyMissionHandler(DailyMissionDataHolder holder)
+ {
+ super(holder);
+ _amount = holder.getRequiredCompletions();
+ _minLevel = holder.getParams().getInt("minLevel", 0);
+ _maxLevel = holder.getParams().getInt("maxLevel", Integer.MAX_VALUE);
+ final String crystalIds = holder.getParams().getString("crystalIds", "");
+ if (!crystalIds.isEmpty())
+ {
+ for (String s : crystalIds.split(","))
+ {
+ final int id = Integer.parseInt(s);
+ if (!_crystalIds.contains(id))
+ {
+ _crystalIds.add(id);
+ }
+ }
+ }
+ }
+
+ @Override
+ public void init()
+ {
+ Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_ITEM_SOUL_CRYSTAL_ADD, (OnItemSoulCrystalAdd event) -> onItemSoulCrystalAdd(event), this));
+ }
+
+ @Override
+ public boolean isAvailable(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
+ if (entry != null)
+ {
+ switch (entry.getStatus())
+ {
+ case NOT_AVAILABLE: // Initial state
+ {
+ if (entry.getProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ storePlayerEntry(entry);
+ }
+ break;
+ }
+ case AVAILABLE:
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ private void onItemSoulCrystalAdd(OnItemSoulCrystalAdd event)
+ {
+ final Player player = event.getPlayer();
+ if ((player.getLevel() < _minLevel) || (player.getLevel() > _maxLevel))
+ {
+ return;
+ }
+ if (_crystalIds.contains(event.getEnsoulStone().getId()))
+ {
+ processPlayerProgress(player);
+ }
+ }
+
+ private void processPlayerProgress(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), true);
+ if (entry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
+ {
+ if (entry.increaseProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(entry);
+ }
+ }
+}
diff --git a/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/ExaltedDailyMissionHandler.java b/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/ExaltedDailyMissionHandler.java
new file mode 100644
index 0000000000..9faa879fe2
--- /dev/null
+++ b/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/ExaltedDailyMissionHandler.java
@@ -0,0 +1,107 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package handlers.dailymissionhandlers;
+
+import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
+import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
+import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.Containers;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerBecomeExalted;
+import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
+
+/**
+ * @author CostyKiller
+ */
+public class ExaltedDailyMissionHandler extends AbstractDailyMissionHandler
+{
+ private final int _amount;
+ private final int _minLevel;
+ private final int _maxLevel;
+
+ public ExaltedDailyMissionHandler(DailyMissionDataHolder holder)
+ {
+ super(holder);
+ _amount = holder.getRequiredCompletions();
+ _minLevel = holder.getParams().getInt("minLevel", 0);
+ _maxLevel = holder.getParams().getInt("maxLevel", Integer.MAX_VALUE);
+ }
+
+ @Override
+ public void init()
+ {
+ Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_PLAYER_BECOME_EXALTED, (OnPlayerBecomeExalted event) -> onPlayerBecomeExalted(event), this));
+ }
+
+ @Override
+ public boolean isAvailable(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
+ if (entry != null)
+ {
+ switch (entry.getStatus())
+ {
+ case NOT_AVAILABLE: // Initial state
+ {
+ if (entry.getProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ storePlayerEntry(entry);
+ }
+ break;
+ }
+ case AVAILABLE:
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ private void onPlayerBecomeExalted(OnPlayerBecomeExalted event)
+ {
+ final Player player = event.getPlayer();
+ if ((player.getLevel() < _minLevel) || (player.getLevel() > _maxLevel))
+ {
+ return;
+ }
+ // Check if player is belonging to a clan and is exalted
+ if ((player.getClan() != null) && (player.getNobleLevel() > 0))
+ {
+ if (player.getNobleLevel() == 2)
+ {
+ processPlayerProgress(player);
+ }
+ }
+ }
+
+ private void processPlayerProgress(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), true);
+ if (entry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
+ {
+ if (entry.increaseProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(entry);
+ }
+ }
+}
diff --git a/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/FishingDailyMissionHandler.java b/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/FishingDailyMissionHandler.java
index a0f04e2473..b954e977aa 100644
--- a/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/FishingDailyMissionHandler.java
+++ b/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/FishingDailyMissionHandler.java
@@ -47,7 +47,7 @@ public class FishingDailyMissionHandler extends AbstractDailyMissionHandler
@Override
public void init()
{
- Containers.Players().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_FISHING, (OnPlayerFishing event) -> onPlayerFishing(event), this));
+ Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_PLAYER_FISHING, (OnPlayerFishing event) -> onPlayerFishing(event), this));
}
@Override
diff --git a/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/MentorDailyMissionHandler.java b/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/MentorDailyMissionHandler.java
new file mode 100644
index 0000000000..6b7fd6c298
--- /dev/null
+++ b/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/MentorDailyMissionHandler.java
@@ -0,0 +1,107 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package handlers.dailymissionhandlers;
+
+import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
+import org.l2jmobius.gameserver.instancemanager.MentorManager;
+import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
+import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
+import org.l2jmobius.gameserver.model.Mentee;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.Containers;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMenteeTrainingComplete;
+import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
+
+/**
+ * @author CostyKiller
+ */
+public class MentorDailyMissionHandler extends AbstractDailyMissionHandler
+{
+ private final int _amount;
+ private final int _minLevel;
+ private final int _maxLevel;
+
+ public MentorDailyMissionHandler(DailyMissionDataHolder holder)
+ {
+ super(holder);
+ _amount = holder.getRequiredCompletions();
+ _minLevel = holder.getParams().getInt("minLevel", 0);
+ _maxLevel = holder.getParams().getInt("maxLevel", Integer.MAX_VALUE);
+ }
+
+ @Override
+ public void init()
+ {
+ Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_PLAYER_MENTEE_TRAINING_COMPLETE, (OnPlayerMenteeTrainingComplete event) -> onPlayerMenteeTrainingComplete(event), this));
+ }
+
+ @Override
+ public boolean isAvailable(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
+ if (entry != null)
+ {
+ switch (entry.getStatus())
+ {
+ case NOT_AVAILABLE: // Initial state
+ {
+ if (entry.getProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ storePlayerEntry(entry);
+ }
+ break;
+ }
+ case AVAILABLE:
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ private void onPlayerMenteeTrainingComplete(OnPlayerMenteeTrainingComplete event)
+ {
+ final Player player = event.getMentor();
+ final Mentee mentor = MentorManager.getInstance().getMentor(event.getMentee().getObjectId());
+ if ((player.getLevel() < _minLevel) || (player.getLevel() > _maxLevel))
+ {
+ return;
+ }
+ // TODO: Check mentor for mentee training complete
+ if (player == mentor.getPlayer())
+ {
+ processPlayerProgress(player);
+ }
+ }
+
+ private void processPlayerProgress(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), true);
+ if (entry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
+ {
+ if (entry.increaseProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(entry);
+ }
+ }
+}
diff --git a/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java b/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java
index c1a738fe3c..5a792ba6ec 100644
--- a/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java
+++ b/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java
@@ -16,6 +16,9 @@
*/
package handlers.dailymissionhandlers;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -39,14 +42,18 @@ import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
*/
public class MonsterDailyMissionHandler extends AbstractDailyMissionHandler
{
+ private final int _requiredMissionCompleteId;
private final int _amount;
private final int _minLevel;
private final int _maxLevel;
private final Set _ids = new HashSet<>();
+ private final String _startHour;
+ private final String _endHour;
public MonsterDailyMissionHandler(DailyMissionDataHolder holder)
{
super(holder);
+ _requiredMissionCompleteId = holder.getRequiredMissionCompleteId();
_amount = holder.getRequiredCompletions();
_minLevel = holder.getParams().getInt("minLevel", 0);
_maxLevel = holder.getParams().getInt("maxLevel", Integer.MAX_VALUE);
@@ -62,6 +69,8 @@ public class MonsterDailyMissionHandler extends AbstractDailyMissionHandler
}
}
}
+ _startHour = holder.getParams().getString("startHour", "");
+ _endHour = holder.getParams().getString("endHour", "");
}
@Override
@@ -110,24 +119,29 @@ public class MonsterDailyMissionHandler extends AbstractDailyMissionHandler
{
return;
}
-
- final Party party = player.getParty();
- if (party != null)
+ if (((_requiredMissionCompleteId != 0) && checkRequiredMission(player)) || (_requiredMissionCompleteId == 0))
{
- final CommandChannel channel = party.getCommandChannel();
- final List members = channel != null ? channel.getMembers() : party.getMembers();
- for (Player member : members)
+ if (checkTimeInterval() || ((_startHour == "") && (_endHour == "")))
{
- if ((member.getLevel() >= (monsterLevel - 5)) && (member.calculateDistance3D(monster) <= Config.ALT_PARTY_RANGE))
+ final Party party = player.getParty();
+ if (party != null)
{
- processPlayerProgress(member);
+ final CommandChannel channel = party.getCommandChannel();
+ final List members = channel != null ? channel.getMembers() : party.getMembers();
+ for (Player member : members)
+ {
+ if ((member.getLevel() >= (monsterLevel - 5)) && (member.calculateDistance3D(monster) <= Config.ALT_PARTY_RANGE))
+ {
+ processPlayerProgress(member);
+ }
+ }
+ }
+ else
+ {
+ processPlayerProgress(player);
}
}
}
- else
- {
- processPlayerProgress(player);
- }
}
private void processPlayerProgress(Player player)
@@ -142,4 +156,39 @@ public class MonsterDailyMissionHandler extends AbstractDailyMissionHandler
storePlayerEntry(entry);
}
}
+
+ private boolean checkTimeInterval()
+ {
+ if ((_startHour != "") && (_endHour != ""))
+ {
+ Date date = new Date();
+ SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm");
+ dateFormat.format(date);
+
+ try
+ {
+ // Check param hours
+ if (dateFormat.parse(dateFormat.format(date)).after(dateFormat.parse(_startHour)) && dateFormat.parse(dateFormat.format(date)).before(dateFormat.parse(_endHour)))
+ {
+ return true;
+ }
+ }
+ catch (ParseException e)
+ {
+ e.printStackTrace();
+ }
+ }
+ return false;
+ }
+
+ private boolean checkRequiredMission(Player player)
+ {
+ final int missionId = getPlayerEntry(player.getObjectId(), false).getRewardId();
+ final int missionStatus = getStatus(player);
+ if ((missionId != 0) && (_requiredMissionCompleteId != 0) && (missionId == _requiredMissionCompleteId) && (missionStatus == DailyMissionStatus.COMPLETED.getClientId()))
+ {
+ return true;
+ }
+ return false;
+ }
}
diff --git a/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/NoblesseDailyMissionHandler.java b/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/NoblesseDailyMissionHandler.java
new file mode 100644
index 0000000000..fa4d2333bc
--- /dev/null
+++ b/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/NoblesseDailyMissionHandler.java
@@ -0,0 +1,107 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package handlers.dailymissionhandlers;
+
+import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
+import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
+import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.Containers;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerBecomeNoblesse;
+import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
+
+/**
+ * @author CostyKiller
+ */
+public class NoblesseDailyMissionHandler extends AbstractDailyMissionHandler
+{
+ private final int _amount;
+ private final int _minLevel;
+ private final int _maxLevel;
+
+ public NoblesseDailyMissionHandler(DailyMissionDataHolder holder)
+ {
+ super(holder);
+ _amount = holder.getRequiredCompletions();
+ _minLevel = holder.getParams().getInt("minLevel", 0);
+ _maxLevel = holder.getParams().getInt("maxLevel", Integer.MAX_VALUE);
+ }
+
+ @Override
+ public void init()
+ {
+ Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_PLAYER_BECOME_NOBLESSE, (OnPlayerBecomeNoblesse event) -> onPlayerBecomeNoblesse(event), this));
+ }
+
+ @Override
+ public boolean isAvailable(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
+ if (entry != null)
+ {
+ switch (entry.getStatus())
+ {
+ case NOT_AVAILABLE: // Initial state
+ {
+ if (entry.getProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ storePlayerEntry(entry);
+ }
+ break;
+ }
+ case AVAILABLE:
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ private void onPlayerBecomeNoblesse(OnPlayerBecomeNoblesse event)
+ {
+ final Player player = event.getPlayer();
+ if ((player.getLevel() < _minLevel) || (player.getLevel() > _maxLevel))
+ {
+ return;
+ }
+ // Check if player is belonging to a clan and is noble
+ if ((player.getClan() != null) && (player.getNobleLevel() > 0))
+ {
+ if (player.getNobleLevel() == 1)
+ {
+ processPlayerProgress(player);
+ }
+ }
+ }
+
+ private void processPlayerProgress(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), true);
+ if (entry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
+ {
+ if (entry.increaseProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(entry);
+ }
+ }
+}
diff --git a/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/OlympiadDailyMissionHandler.java b/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/OlympiadDailyMissionHandler.java
index 4a6f76bc58..51d3bbb148 100644
--- a/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/OlympiadDailyMissionHandler.java
+++ b/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/OlympiadDailyMissionHandler.java
@@ -33,10 +33,12 @@ public class OlympiadDailyMissionHandler extends AbstractDailyMissionHandler
{
private final int _amount;
private final boolean _winOnly;
+ private final int _requiredMissionCompleteId;
public OlympiadDailyMissionHandler(DailyMissionDataHolder holder)
{
super(holder);
+ _requiredMissionCompleteId = holder.getRequiredMissionCompleteId();
_amount = holder.getRequiredCompletions();
_winOnly = holder.getParams().getBoolean("winOnly", false);
}
@@ -78,27 +80,44 @@ public class OlympiadDailyMissionHandler extends AbstractDailyMissionHandler
if (event.getWinner() != null)
{
final DailyMissionPlayerEntry winnerEntry = getPlayerEntry(event.getWinner().getObjectId(), true);
- if (winnerEntry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
+ if (((_requiredMissionCompleteId != 0) && checkRequiredMission(event.getWinner().getPlayer())) || (_requiredMissionCompleteId == 0))
{
- if (winnerEntry.increaseProgress() >= _amount)
+ if (winnerEntry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
{
- winnerEntry.setStatus(DailyMissionStatus.AVAILABLE);
+ if (winnerEntry.increaseProgress() >= _amount)
+ {
+ winnerEntry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(winnerEntry);
}
- storePlayerEntry(winnerEntry);
}
}
if (!_winOnly && (event.getLoser() != null))
{
final DailyMissionPlayerEntry loseEntry = getPlayerEntry(event.getLoser().getObjectId(), true);
- if (loseEntry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
+ if (((_requiredMissionCompleteId != 0) && checkRequiredMission(event.getLoser().getPlayer())) || (_requiredMissionCompleteId == 0))
{
- if (loseEntry.increaseProgress() >= _amount)
+ if (loseEntry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
{
- loseEntry.setStatus(DailyMissionStatus.AVAILABLE);
+ if (loseEntry.increaseProgress() >= _amount)
+ {
+ loseEntry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(loseEntry);
}
- storePlayerEntry(loseEntry);
}
}
}
+
+ private boolean checkRequiredMission(Player player)
+ {
+ final int missionId = getPlayerEntry(player.getObjectId(), false).getRewardId();
+ final int missionStatus = getStatus(player);
+ if ((missionId != 0) && (_requiredMissionCompleteId != 0) && (missionId == _requiredMissionCompleteId) && (missionStatus == DailyMissionStatus.COMPLETED.getClientId()))
+ {
+ return true;
+ }
+ return false;
+ }
}
diff --git a/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/QuestDailyMissionHandler.java b/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/QuestDailyMissionHandler.java
index e98360c19a..4759f13b67 100644
--- a/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/QuestDailyMissionHandler.java
+++ b/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/QuestDailyMissionHandler.java
@@ -17,7 +17,6 @@
package handlers.dailymissionhandlers;
import org.l2jmobius.gameserver.enums.DailyMissionStatus;
-import org.l2jmobius.gameserver.enums.QuestType;
import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
@@ -33,11 +32,13 @@ import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
public class QuestDailyMissionHandler extends AbstractDailyMissionHandler
{
private final int _amount;
+ private final int _questId;
public QuestDailyMissionHandler(DailyMissionDataHolder holder)
{
super(holder);
_amount = holder.getRequiredCompletions();
+ _questId = holder.getParams().getInt("questId", 0);
}
@Override
@@ -75,17 +76,23 @@ public class QuestDailyMissionHandler extends AbstractDailyMissionHandler
private void onQuestComplete(OnPlayerQuestComplete event)
{
final Player player = event.getPlayer();
- if (event.getQuestType() == QuestType.DAILY)
+ // Check if player has active quest the quest id specified
+ if ((_questId == event.getQuestId()) && player.getQuestState(event.getQuestName()).isCompleted())
{
- final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), true);
- if (entry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
+ processPlayerProgress(player);
+ }
+ }
+
+ private void processPlayerProgress(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), true);
+ if (entry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
+ {
+ if (entry.increaseProgress() >= _amount)
{
- if (entry.increaseProgress() >= _amount)
- {
- entry.setStatus(DailyMissionStatus.AVAILABLE);
- }
- storePlayerEntry(entry);
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
}
+ storePlayerEntry(entry);
}
}
}
diff --git a/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/UseItemDailyMissionHandler.java b/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/UseItemDailyMissionHandler.java
new file mode 100644
index 0000000000..7267f6ec1e
--- /dev/null
+++ b/L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/handlers/dailymissionhandlers/UseItemDailyMissionHandler.java
@@ -0,0 +1,122 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package handlers.dailymissionhandlers;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
+import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
+import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.Containers;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.item.OnItemUse;
+import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
+
+/**
+ * @author CostyKiller
+ */
+public class UseItemDailyMissionHandler extends AbstractDailyMissionHandler
+{
+ private final int _amount;
+ private final int _minLevel;
+ private final int _maxLevel;
+ private final Set _itemIds = new HashSet<>();
+
+ public UseItemDailyMissionHandler(DailyMissionDataHolder holder)
+ {
+ super(holder);
+ _amount = holder.getRequiredCompletions();
+ _minLevel = holder.getParams().getInt("minLevel", 0);
+ _maxLevel = holder.getParams().getInt("maxLevel", Integer.MAX_VALUE);
+ final String itemIds = holder.getParams().getString("itemIds", "");
+ if (!itemIds.isEmpty())
+ {
+ for (String s : itemIds.split(","))
+ {
+ final int id = Integer.parseInt(s);
+ if (!_itemIds.contains(id))
+ {
+ _itemIds.add(id);
+ }
+ }
+ }
+ }
+
+ @Override
+ public void init()
+ {
+ Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_ITEM_USE, (OnItemUse event) -> onItemUse(event), this));
+ }
+
+ @Override
+ public boolean isAvailable(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
+ if (entry != null)
+ {
+ switch (entry.getStatus())
+ {
+ case NOT_AVAILABLE: // Initial state
+ {
+ if (entry.getProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ storePlayerEntry(entry);
+ }
+ break;
+ }
+ case AVAILABLE:
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ private void onItemUse(OnItemUse event)
+ {
+ final Player player = event.getPlayer();
+ if (_minLevel > 0)
+ {
+ if ((player.getLevel() < _minLevel) || (player.getLevel() > _maxLevel) || _itemIds.isEmpty())
+ {
+ return;
+ }
+ if (_itemIds.contains(event.getItem().getId()))
+ {
+ processPlayerProgress(player);
+ }
+ }
+ }
+
+ private void processPlayerProgress(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), true);
+ if (entry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
+ {
+ if (entry.increaseProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(entry);
+ }
+ }
+}
diff --git a/L2J_Mobius_10.3_MasterClass/dist/game/data/xsd/DailyMission.xsd b/L2J_Mobius_10.3_MasterClass/dist/game/data/xsd/DailyMission.xsd
index 35f2f6dc35..345337ffa1 100644
--- a/L2J_Mobius_10.3_MasterClass/dist/game/data/xsd/DailyMission.xsd
+++ b/L2J_Mobius_10.3_MasterClass/dist/game/data/xsd/DailyMission.xsd
@@ -36,6 +36,7 @@
+
diff --git a/L2J_Mobius_10.3_MasterClass/dist/game/data/xsd/skills.xsd b/L2J_Mobius_10.3_MasterClass/dist/game/data/xsd/skills.xsd
index 36d1a9d772..d40dce0e31 100644
--- a/L2J_Mobius_10.3_MasterClass/dist/game/data/xsd/skills.xsd
+++ b/L2J_Mobius_10.3_MasterClass/dist/game/data/xsd/skills.xsd
@@ -2086,6 +2086,7 @@
+
@@ -2094,7 +2095,9 @@
-
+
+
+
@@ -2843,6 +2846,8 @@
+
+
diff --git a/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
index 892f3b75df..82455ddda6 100644
--- a/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
+++ b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/DailyMissionDataHolder.java
@@ -36,6 +36,7 @@ public class DailyMissionDataHolder
private final int _id;
private final List _rewardsItems;
private final List _classRestriction;
+ private final int _requiredMissionCompleteId;
private final int _requiredCompletions;
private final StatSet _params;
private final boolean _dailyReset;
@@ -50,6 +51,7 @@ public class DailyMissionDataHolder
{
final Function handler = DailyMissionHandler.getInstance().getHandler(set.getString("handler"));
_id = set.getInt("id");
+ _requiredMissionCompleteId = set.getInt("requiredMissionCompleteId", 0);
_requiredCompletions = set.getInt("requiredCompletion", 0);
_rewardsItems = set.getList("items", ItemHolder.class);
_classRestriction = set.getList("classRestriction", ClassId.class);
@@ -78,6 +80,11 @@ public class DailyMissionDataHolder
return _rewardsItems;
}
+ public int getRequiredMissionCompleteId()
+ {
+ return _requiredMissionCompleteId;
+ }
+
public int getRequiredCompletions()
{
return _requiredCompletions;
diff --git a/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/events/EventType.java b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/events/EventType.java
index 69d29692df..df1fd25e1c 100644
--- a/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/events/EventType.java
+++ b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/events/EventType.java
@@ -59,7 +59,10 @@ import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnNpcTeleport;
import org.l2jmobius.gameserver.model.events.impl.creature.npc.OnNpcTeleportRequest;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayableExpChanged;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerAbilityPointsChanged;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerAuctionWin;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerAugment;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerBecomeExalted;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerBecomeNoblesse;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerBypass;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerCallToChangeClass;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerChangeToAwakenedClass;
@@ -94,6 +97,7 @@ import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMentee
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMenteeLeft;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMenteeRemove;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMenteeStatus;
+import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMenteeTrainingComplete;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMentorStatus;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMoveRequest;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerPKChanged;
@@ -124,6 +128,8 @@ import org.l2jmobius.gameserver.model.events.impl.instance.OnInstanceLeave;
import org.l2jmobius.gameserver.model.events.impl.instance.OnInstanceStatusChange;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemAttributeAdd;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemBypassEvent;
+import org.l2jmobius.gameserver.model.events.impl.item.OnItemCombination;
+import org.l2jmobius.gameserver.model.events.impl.item.OnItemCompound;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemCreate;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemEnchantAdd;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemSoulCrystalAdd;
@@ -189,6 +195,8 @@ public enum EventType
ON_ITEM_ATTRIBUTE_ADD(OnItemAttributeAdd.class, void.class),
ON_ITEM_SOUL_CRYSTAL_ADD(OnItemSoulCrystalAdd.class, void.class),
ON_ITEM_ENCHANT_ADD(OnItemEnchantAdd.class, void.class),
+ ON_ITEM_COMBINATION(OnItemCombination.class, void.class),
+ ON_ITEM_COMPOUND(OnItemCompound.class, void.class),
// NPC events
ON_NPC_CAN_BE_SEEN(OnNpcCanBeSeen.class, void.class, TerminateReturn.class),
@@ -219,9 +227,12 @@ public enum EventType
ON_PLAYABLE_EXP_CHANGED(OnPlayableExpChanged.class, void.class, TerminateReturn.class),
// Player events
+ ON_PLAYER_AUCTION_WIN(OnPlayerAuctionWin.class, void.class),
ON_PLAYER_AUGMENT(OnPlayerAugment.class, void.class),
ON_PLAYER_BYPASS(OnPlayerBypass.class, void.class, TerminateReturn.class),
ON_PLAYER_CALL_TO_CHANGE_CLASS(OnPlayerCallToChangeClass.class, void.class),
+ ON_PLAYER_BECOME_NOBLESSE(OnPlayerBecomeNoblesse.class, void.class),
+ ON_PLAYER_BECOME_EXALTED(OnPlayerBecomeExalted.class, void.class),
ON_PLAYER_CHAT(OnPlayerChat.class, void.class, ChatFilterReturn.class),
ON_PLAYER_ABILITY_POINTS_CHANGED(OnPlayerAbilityPointsChanged.class, void.class),
// Clan events
@@ -256,6 +267,7 @@ public enum EventType
ON_PLAYER_MENTEE_LEFT(OnPlayerMenteeLeft.class, void.class),
ON_PLAYER_MENTEE_REMOVE(OnPlayerMenteeRemove.class, void.class),
ON_PLAYER_MENTEE_STATUS(OnPlayerMenteeStatus.class, void.class),
+ ON_PLAYER_MENTEE_TRAINING_COMPLETE(OnPlayerMenteeTrainingComplete.class, void.class),
ON_PLAYER_MENTOR_STATUS(OnPlayerMentorStatus.class, void.class),
// Other player events
ON_PLAYER_REPUTATION_CHANGED(OnPlayerReputationChanged.class, void.class),
diff --git a/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/creature/player/OnPlayerAuctionWin.java b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/creature/player/OnPlayerAuctionWin.java
new file mode 100644
index 0000000000..b520fcda0b
--- /dev/null
+++ b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/creature/player/OnPlayerAuctionWin.java
@@ -0,0 +1,53 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.l2jmobius.gameserver.model.events.impl.creature.player;
+
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.IBaseEvent;
+import org.l2jmobius.gameserver.model.item.instance.Item;
+
+/**
+ * @author CostyKiller
+ */
+public class OnPlayerAuctionWin implements IBaseEvent
+{
+ private final Player _player;
+ private final Item _item;
+
+ public OnPlayerAuctionWin(Player player, Item item)
+ {
+ _player = player;
+ _item = item;
+ }
+
+ public Player getPlayer()
+ {
+ return _player;
+ }
+
+ public Item getItem()
+ {
+ return _item;
+ }
+
+ @Override
+ public EventType getType()
+ {
+ return EventType.ON_PLAYER_AUCTION_WIN;
+ }
+}
diff --git a/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/creature/player/OnPlayerBecomeExalted.java b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/creature/player/OnPlayerBecomeExalted.java
new file mode 100644
index 0000000000..e1592af046
--- /dev/null
+++ b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/creature/player/OnPlayerBecomeExalted.java
@@ -0,0 +1,45 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.l2jmobius.gameserver.model.events.impl.creature.player;
+
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.IBaseEvent;
+
+/**
+ * @author CostyKiller
+ */
+public class OnPlayerBecomeExalted implements IBaseEvent
+{
+ private final Player _player;
+
+ public OnPlayerBecomeExalted(Player player)
+ {
+ _player = player;
+ }
+
+ public Player getPlayer()
+ {
+ return _player;
+ }
+
+ @Override
+ public EventType getType()
+ {
+ return EventType.ON_PLAYER_BECOME_EXALTED;
+ }
+}
diff --git a/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/creature/player/OnPlayerBecomeNoblesse.java b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/creature/player/OnPlayerBecomeNoblesse.java
new file mode 100644
index 0000000000..fd96682233
--- /dev/null
+++ b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/creature/player/OnPlayerBecomeNoblesse.java
@@ -0,0 +1,45 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.l2jmobius.gameserver.model.events.impl.creature.player;
+
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.IBaseEvent;
+
+/**
+ * @author CostyKiller
+ */
+public class OnPlayerBecomeNoblesse implements IBaseEvent
+{
+ private final Player _player;
+
+ public OnPlayerBecomeNoblesse(Player player)
+ {
+ _player = player;
+ }
+
+ public Player getPlayer()
+ {
+ return _player;
+ }
+
+ @Override
+ public EventType getType()
+ {
+ return EventType.ON_PLAYER_BECOME_NOBLESSE;
+ }
+}
diff --git a/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/creature/player/OnPlayerMenteeTrainingComplete.java b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/creature/player/OnPlayerMenteeTrainingComplete.java
new file mode 100644
index 0000000000..c6c2bf4b19
--- /dev/null
+++ b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/creature/player/OnPlayerMenteeTrainingComplete.java
@@ -0,0 +1,52 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.l2jmobius.gameserver.model.events.impl.creature.player;
+
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.IBaseEvent;
+
+/**
+ * @author CostyKiller
+ */
+public class OnPlayerMenteeTrainingComplete implements IBaseEvent
+{
+ private final Player _mentor;
+ private final Player _mentee;
+
+ public OnPlayerMenteeTrainingComplete(Player mentor, Player mentee)
+ {
+ _mentor = mentor;
+ _mentee = mentee;
+ }
+
+ public Player getMentor()
+ {
+ return _mentor;
+ }
+
+ public Player getMentee()
+ {
+ return _mentee;
+ }
+
+ @Override
+ public EventType getType()
+ {
+ return EventType.ON_PLAYER_MENTEE_TRAINING_COMPLETE;
+ }
+}
diff --git a/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/creature/player/OnPlayerQuestComplete.java b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/creature/player/OnPlayerQuestComplete.java
index cf7f160512..7212bf9412 100644
--- a/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/creature/player/OnPlayerQuestComplete.java
+++ b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/creature/player/OnPlayerQuestComplete.java
@@ -28,12 +28,14 @@ public class OnPlayerQuestComplete implements IBaseEvent
{
private final Player _player;
private final int _questId;
+ private final String _questName;
private final QuestType _questType;
- public OnPlayerQuestComplete(Player player, int questId, QuestType questType)
+ public OnPlayerQuestComplete(Player player, int questId, String questName, QuestType questType)
{
_player = player;
_questId = questId;
+ _questName = questName;
_questType = questType;
}
@@ -47,6 +49,11 @@ public class OnPlayerQuestComplete implements IBaseEvent
return _questId;
}
+ public String getQuestName()
+ {
+ return _questName;
+ }
+
public QuestType getQuestType()
{
return _questType;
diff --git a/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/item/OnItemCombination.java b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/item/OnItemCombination.java
new file mode 100644
index 0000000000..6ac566d70f
--- /dev/null
+++ b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/item/OnItemCombination.java
@@ -0,0 +1,53 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.l2jmobius.gameserver.model.events.impl.item;
+
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.IBaseEvent;
+import org.l2jmobius.gameserver.model.item.instance.Item;
+
+/**
+ * @author CostyKiller
+ */
+public class OnItemCombination implements IBaseEvent
+{
+ private final Player _player;
+ private final Item _item;
+
+ public OnItemCombination(Player player, Item item)
+ {
+ _player = player;
+ _item = item;
+ }
+
+ public Player getPlayer()
+ {
+ return _player;
+ }
+
+ public Item getItem()
+ {
+ return _item;
+ }
+
+ @Override
+ public EventType getType()
+ {
+ return EventType.ON_ITEM_COMBINATION;
+ }
+}
diff --git a/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/item/OnItemCompound.java b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/item/OnItemCompound.java
new file mode 100644
index 0000000000..bd926ee420
--- /dev/null
+++ b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/item/OnItemCompound.java
@@ -0,0 +1,53 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.l2jmobius.gameserver.model.events.impl.item;
+
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.IBaseEvent;
+import org.l2jmobius.gameserver.model.item.instance.Item;
+
+/**
+ * @author CostyKiller
+ */
+public class OnItemCompound implements IBaseEvent
+{
+ private final Player _player;
+ private final Item _item;
+
+ public OnItemCompound(Player player, Item item)
+ {
+ _player = player;
+ _item = item;
+ }
+
+ public Player getPlayer()
+ {
+ return _player;
+ }
+
+ public Item getItem()
+ {
+ return _item;
+ }
+
+ @Override
+ public EventType getType()
+ {
+ return EventType.ON_ITEM_COMPOUND;
+ }
+}
diff --git a/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/item/OnItemSoulCrystalAdd.java b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/item/OnItemSoulCrystalAdd.java
index bf1d1237f1..54eb9ffbad 100644
--- a/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/item/OnItemSoulCrystalAdd.java
+++ b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/events/impl/item/OnItemSoulCrystalAdd.java
@@ -17,6 +17,7 @@
package org.l2jmobius.gameserver.model.events.impl.item;
import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.ensoul.EnsoulStone;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.IBaseEvent;
import org.l2jmobius.gameserver.model.item.instance.Item;
@@ -28,11 +29,13 @@ public class OnItemSoulCrystalAdd implements IBaseEvent
{
private final Player _player;
private final Item _item;
+ private final EnsoulStone _stone;
- public OnItemSoulCrystalAdd(Player player, Item item)
+ public OnItemSoulCrystalAdd(Player player, Item item, EnsoulStone stone)
{
_player = player;
_item = item;
+ _stone = stone;
}
public Player getPlayer()
@@ -45,6 +48,11 @@ public class OnItemSoulCrystalAdd implements IBaseEvent
return _item;
}
+ public EnsoulStone getEnsoulStone()
+ {
+ return _stone;
+ }
+
@Override
public EventType getType()
{
diff --git a/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/item/instance/Item.java b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/item/instance/Item.java
index 5ed3bffa27..8944f8b057 100644
--- a/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/item/instance/Item.java
+++ b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/item/instance/Item.java
@@ -72,7 +72,6 @@ import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemPi
import org.l2jmobius.gameserver.model.events.impl.item.OnItemAttributeAdd;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemBypassEvent;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemEnchantAdd;
-import org.l2jmobius.gameserver.model.events.impl.item.OnItemSoulCrystalAdd;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemTalk;
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.instancezone.Instance;
@@ -2260,12 +2259,6 @@ public class Item extends WorldObject
{
updateSpecialAbilities();
}
-
- // Notify to Scripts
- if (EventDispatcher.getInstance().hasListener(EventType.ON_ITEM_SOUL_CRYSTAL_ADD))
- {
- EventDispatcher.getInstance().notifyEventAsync(new OnItemSoulCrystalAdd(getActingPlayer(), this));
- }
}
public void removeSpecialAbility(int position, int type)
diff --git a/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/quest/QuestState.java b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/quest/QuestState.java
index 7a829f764f..12c74a204d 100644
--- a/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/quest/QuestState.java
+++ b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/model/quest/QuestState.java
@@ -729,7 +729,7 @@ public class QuestState
// Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_QUEST_COMPLETE, _player))
{
- EventDispatcher.getInstance().notifyEventAsync(new OnPlayerQuestComplete(_player, getQuest().getId(), type), _player);
+ EventDispatcher.getInstance().notifyEventAsync(new OnPlayerQuestComplete(_player, getQuest().getId(), getQuestName(), type), _player);
}
}
@@ -819,7 +819,7 @@ public class QuestState
// Notify to scripts
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_QUEST_COMPLETE, _player))
{
- EventDispatcher.getInstance().notifyEventAsync(new OnPlayerQuestComplete(_player, getQuest().getId(), repeatable ? QuestType.REPEATABLE : QuestType.ONE_TIME), _player);
+ EventDispatcher.getInstance().notifyEventAsync(new OnPlayerQuestComplete(_player, getQuest().getId(), getQuestName(), repeatable ? QuestType.REPEATABLE : QuestType.ONE_TIME), _player);
}
}
diff --git a/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/RequestCrystallizeItem.java b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/RequestCrystallizeItem.java
index 8a8560e98f..3caadffa20 100644
--- a/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/RequestCrystallizeItem.java
+++ b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/RequestCrystallizeItem.java
@@ -25,6 +25,9 @@ import org.l2jmobius.gameserver.data.xml.ItemCrystallizationData;
import org.l2jmobius.gameserver.enums.PrivateStoreType;
import org.l2jmobius.gameserver.enums.Race;
import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.EventDispatcher;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.item.OnItemCombination;
import org.l2jmobius.gameserver.model.holders.ItemChanceHolder;
import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.item.type.CrystalType;
@@ -249,7 +252,11 @@ public class RequestCrystallizeItem implements ClientPacket
sm = new SystemMessage(SystemMessageId.S1_HAS_BEEN_CRYSTALLIZED);
sm.addItemName(removedItem);
player.sendPacket(sm);
-
+ // Notify to scripts.
+ if (EventDispatcher.getInstance().hasListener(EventType.ON_ITEM_COMBINATION))
+ {
+ EventDispatcher.getInstance().notifyEventAsync(new OnItemCombination(player, removedItem));
+ }
player.broadcastUserInfo();
player.setInCrystallize(false);
diff --git a/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/alchemy/RequestAlchemyConversion.java b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/alchemy/RequestAlchemyConversion.java
index d232ce73de..bcf77e286c 100644
--- a/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/alchemy/RequestAlchemyConversion.java
+++ b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/alchemy/RequestAlchemyConversion.java
@@ -24,6 +24,9 @@ import org.l2jmobius.gameserver.enums.PrivateStoreType;
import org.l2jmobius.gameserver.enums.Race;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.alchemy.AlchemyCraftData;
+import org.l2jmobius.gameserver.model.events.EventDispatcher;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.item.OnItemCombination;
import org.l2jmobius.gameserver.model.holders.ItemHolder;
import org.l2jmobius.gameserver.model.item.ItemTemplate;
import org.l2jmobius.gameserver.model.item.instance.Item;
@@ -197,6 +200,16 @@ public class RequestAlchemyConversion implements ClientPacket
player.getInventory().addItem("Alchemy", data.getProductionFailure().getId(), data.getProductionFailure().getCount() * failureCount, player, null);
}
+ // Notify to scripts.
+ if (EventDispatcher.getInstance().hasListener(EventType.ON_ITEM_COMBINATION))
+ {
+ for (ItemHolder ingredient : data.getIngredients())
+ {
+ final Item item = player.getInventory().getItemByItemId(ingredient.getId());
+ EventDispatcher.getInstance().notifyEventAsync(new OnItemCombination(player, item));
+ }
+ }
+
player.sendPacket(new ExAlchemyConversion(successCount, failureCount));
}
}
diff --git a/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/compound/RequestNewEnchantTry.java b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/compound/RequestNewEnchantTry.java
index 9ec1e045ba..a15f675416 100644
--- a/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/compound/RequestNewEnchantTry.java
+++ b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/compound/RequestNewEnchantTry.java
@@ -20,6 +20,9 @@ import org.l2jmobius.commons.util.Rnd;
import org.l2jmobius.gameserver.data.xml.CombinationItemsData;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.request.CompoundRequest;
+import org.l2jmobius.gameserver.model.events.EventDispatcher;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.item.OnItemCompound;
import org.l2jmobius.gameserver.model.item.combination.CombinationItem;
import org.l2jmobius.gameserver.model.item.combination.CombinationItemReward;
import org.l2jmobius.gameserver.model.item.combination.CombinationItemType;
@@ -118,6 +121,11 @@ public class RequestNewEnchantTry implements ClientPacket
{
player.sendPacket(new ExEnchantFail(itemOne.getId(), itemTwo.getId()));
}
+ // Notify to scripts.
+ if (EventDispatcher.getInstance().hasListener(EventType.ON_ITEM_COMPOUND))
+ {
+ EventDispatcher.getInstance().notifyEventAsync(new OnItemCompound(player, success ? item : itemOne));
+ }
}
final InventoryUpdate iu = new InventoryUpdate();
diff --git a/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java
index e722c66d02..aa85c1c8f9 100644
--- a/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java
+++ b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java
@@ -22,6 +22,9 @@ import org.l2jmobius.gameserver.enums.PrivateStoreType;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.ensoul.EnsoulOption;
import org.l2jmobius.gameserver.model.ensoul.EnsoulStone;
+import org.l2jmobius.gameserver.model.events.EventDispatcher;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.item.OnItemSoulCrystalAdd;
import org.l2jmobius.gameserver.model.holders.ItemHolder;
import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.skill.AbnormalType;
@@ -60,7 +63,6 @@ public class RequestItemEnsoul implements ClientPacket
_options[i] = new EnsoulItemOption(type, position, soulCrystalObjectId, soulCrystalOption);
}
}
- return;
}
}
@@ -217,6 +219,12 @@ public class RequestItemEnsoul implements ClientPacket
{
item.addSpecialAbility(option, position, stone.getSlotType(), true);
success = 1;
+
+ // Notify to Scripts
+ if (EventDispatcher.getInstance().hasListener(EventType.ON_ITEM_SOUL_CRYSTAL_ADD))
+ {
+ EventDispatcher.getInstance().notifyEventAsync(new OnItemSoulCrystalAdd(player, item, stone));
+ }
}
if (soulCrystal.isStackable() && (soulCrystal.getCount() > 0))
diff --git a/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/DailyMission.xml b/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/DailyMission.xml
index 6b66d27ec6..387ef266e8 100644
--- a/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/DailyMission.xml
+++ b/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/DailyMission.xml
@@ -1,8 +1,5 @@
-
-
-
@@ -380,9 +377,6 @@
-
-
-
@@ -433,9 +427,6 @@
-
-
-
@@ -510,8 +501,6 @@
-
-
@@ -749,319 +738,139 @@
-
-
+
+ 91
- Hair Accessory Coupon
+
+
+
+
+
- -->
-
+
+ 92
- Mid-grade Spirit's Blessing
-
-
-
- One-time mission. A reward is given when evolving the Water Spirit up to Lv. 3.
-
- WATER
-
-
- Mid-grade Spirit's Blessing
-
-
-
- One-time mission. A reward is given when evolving the Wind Spirit up to Lv. 3.
-
- WIND
-
-
- Mid-grade Spirit's Blessing
-
-
-
- One-time mission. A reward is given when evolving the Earth Spirit up to Lv. 3.
-
- EARTH
-
-
- Mid-grade Spirit's Blessing
-
-
- -->
-
-
-
-
-
-
- 60
- 99
- 22192,22193,22194,22195,22196,22197,22198,22199
-
-
-
-
-
-
-
-
- 60
- 99
- 22192,22193,22194,22195,22196,22197,22198,22199
-
-
-
-
-
-
-
+
+
+
+
- A reward is given for using Sayha's Blessing that is not limited by level, 10 times.
-
+
+
10
91910
- Growth Rune Fragment Sealed
- Mission Points
+
+
-
-
- Daily mission (once per account). A reward is given for killing 300 monsters in a Transcendent Instance Zone.
+
+
40
99
+ 22192,22193,22194,22195,22196,22197,22198,22199
+
+
+
+
+
+
+
+
+
+
+ 60
+ 99
+
+
+
+
+
+
+
+
+
+ 60
+ 99
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 40
+ 99
- Soulshot Ticket
- Spirit Ore
- Sayha's Cookie
+
-
-
- A reward is given for killing titled monsters during the battle for the Orc Fortress.
-
- 60
- 99
-
-
- Red Lantern
- XP Growth Scroll
-
-
-
- A reward is given for killing titleless monsters during the battle for the Orc Fortress.
-
- 60
- 99
-
-
- Blue Lantern
- XP Growth Scroll
-
-
-
- One-time mission. A reward is given for winning a 3 vs 3 Olympiad match. Not available on Sundays.
-
-
- Einhasad's Blessing Scroll
-
-
-
- One-time mission. A reward is given for winning 2 of 3 vs 3 Olympiad matches. Not available on Sundays.
-
-
- Special HP Recovery Potion
-
-
-
- One-time mission. A reward is given for winning 3 of 3 vs 3 Olympiad matches. Not available on Sundays.
-
-
- Einhasad's Blessing Scroll
-
-
-
- One-time mission. A reward is given for winning 4 of 3 vs 3 Olympiad matches. Not available on Sundays.
-
-
- Special HP Recovery Potion
-
-
-
- One-time mission. A reward is given for winning 5 of 3 vs 3 Olympiad matches. Not available on Sundays.
-
-
- Victory Pack
-
-
-
- A reward is given when player will percipient in Olympiad, 50 times. Available from monday to friday.
-
-
- Mission Points
- Olympiad Treasure Chest Sealed
-
-
- -->
@@ -1105,74 +914,313 @@
-
22271,22272,22273
76
99
- Soulshot Ticket Sealed
- Spirit Ore Sealed
- Clan XP Sealed
- Grace Potion Sealed
- Ancient Adena
- Mission Points
+
+
+
+
+
+
-
- Daily mission. A reward is given for killing 50 monsters in the Elmoreden Tower. Required level: 60-74.
-
- 22271,22272,22273
- 60
- 74
+
+
+
+ FIRE
- Green Lantern (Time-limited) Sealed
- Asofe Sealed
- Mission Points
+
-
- Daily mission. A reward is given for killing 50 monsters in the Elmoreden Tower. Required level: 75-79.
-
- 22271,22272,22273
- 75
- 79
+
+
+
+ WATER
- Green Lantern (Time-limited) Sealed
- Asofe Sealed
- Mission Points
+
-
- Daily mission. A reward is given for killing 50 monsters in the Elmoreden Tower. Required level: 80-84.
-
- 22271,22272,22273
- 80
- 84
+
+
+
+ WIND
- Green Lantern (Time-limited) Sealed
- Asofe Sealed
- Mission Points
+
-
- Daily mission. A reward is given for killing 50 monsters in the Elmoreden Tower. Required level: 85+.
+
+
+
+ EARTH
+
+
+
+
+
+
+
+
+ FIRE
+
+
+
+
+
+
+
+
+ WATER
+
+
+
+
+
+
+
+
+ WIND
+
+
+
+
+
+
+
+
+ EARTH
+
+
+
+
+
+
+
- 22271,22272,22273
- 85
+ 20792,20794,20795,20796,20797,20798,20799,20800,20801,20802,20803,20849,20995,21661,21662,21663,21664,21665,21666,21667,21668,21669,21670,21671,21672,21673,21674,21675,21676,21678,21685,21686,21761,21762,21763,21764,21765,21766,21767,21768,21769,21770,21771,21772,21773,21774,21775,21776,21777,21778,21779,21780,21781,21782,21783,21784,21785,21786,21787,21788,21789,21790,21791,21792,21793,21813,21814,21815,21816,21817,21818,21819,21820,21821,21822,21823,21824,21825,21826,21827,21828,21829,21830,21831,21832
+ 76
99
- Green Lantern (Time-limited) Sealed
- Asofe Sealed
- Mission Points
+
+
+
+
+
+
+
+ 79
+ 99
+ 22192,22193,22194,22195,22196,22197,22198,22199
+
+
+
+
+
+
+
+
+
+ 60
+ 74
+ 22192,22193,22194,22195,22196,22197,22198,22199
+
+
+
+
+
+
+
+
+
+
+ 75
+ 79
+ 22192,22193,22194,22195,22196,22197,22198,22199
+
+
+
+
+
+
+
+
+
+
+ 80
+ 84
+ 22192,22193,22194,22195,22196,22197,22198,22199
+
+
+
+
+
+
+
+
+
+
+ 85
+ 99
+ 22192,22193,22194,22195,22196,22197,22198,22199
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 76
+ 99
+ 22192,22193,22194,22195,22196,22197,22198,22199
+
+
+
+
+
+
+
+
+
+ 76
+ 99
+ 22192,22193,22194,22195,22196,22197,22198,22199
+
+
+
+
+
+
+
+
+ 76
+ 99
+ 22192,22193,22194,22195,22196,22197,22198,22199
+
+
+
+
+
+
+
+
+
+ 76
+ 99
+ 22192,22193,22194,22195,22196,22197,22198,22199
+
+
+
+
+
+
+
+
+
+
+
+ 76
+ 99
+ 22192,22193,22194,22195,22196,22197,22198,22199
+
+
+
+
+
+
+
+
+ 70
+ 99
+ 22192,22193,22194,22195,22196,22197,22198,22199
+
+
+
+
+
+
+
+
+ 76
+ 99
+ 22192,22193,22194,22195,22196,22197,22198,22199
+
+
+
+
+
+
+
+
+ 60
+ 99
+ 22192,22193,22194,22195,22196,22197,22198,22199
+
+
+
+
+
+
+
+
+ 85
+ 99
+ 22192,22193,22194,22195,22196,22197,22198,22199
+
+
+
+
+
+
+
+
+ 85
+ 99
+ 22192,22193,22194,22195,22196,22197,22198,22199
+
+
+
+
+
+
+
+
+ 85
+ 99
+ 22192,22193,22194,22195,22196,22197,22198,22199
+
+
+
+
+
+
+
+
+ 65
+ 99
+ 22192,22193,22194,22195,22196,22197,22198,22199
+
+
+
- -->
\ No newline at end of file
diff --git a/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java b/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
index d82ced4060..0d47af2fb9 100644
--- a/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
+++ b/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
@@ -28,9 +28,11 @@ import handlers.dailymissionhandlers.LoginMonthDailyMissionHandler;
import handlers.dailymissionhandlers.LoginWeekendDailyMissionHandler;
import handlers.dailymissionhandlers.MonsterDailyMissionHandler;
import handlers.dailymissionhandlers.OlympiadDailyMissionHandler;
+import handlers.dailymissionhandlers.PurgeRewardDailyMissionHandler;
import handlers.dailymissionhandlers.QuestDailyMissionHandler;
import handlers.dailymissionhandlers.SiegeDailyMissionHandler;
import handlers.dailymissionhandlers.SpiritDailyMissionHandler;
+import handlers.dailymissionhandlers.UseItemDailyMissionHandler;
/**
* @author UnAfraid
@@ -52,6 +54,8 @@ public class DailyMissionMasterHandler
DailyMissionHandler.getInstance().registerHandler("fishing", FishingDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("spirit", SpiritDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("joinclan", JoinClanDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("purge", PurgeRewardDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("useitem", UseItemDailyMissionHandler::new);
LOGGER.info(DailyMissionMasterHandler.class.getSimpleName() + ": Loaded " + DailyMissionHandler.getInstance().size() + " handlers.");
}
}
diff --git a/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/scripts/handlers/dailymissionhandlers/FishingDailyMissionHandler.java b/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/scripts/handlers/dailymissionhandlers/FishingDailyMissionHandler.java
index a0f04e2473..b954e977aa 100644
--- a/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/scripts/handlers/dailymissionhandlers/FishingDailyMissionHandler.java
+++ b/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/scripts/handlers/dailymissionhandlers/FishingDailyMissionHandler.java
@@ -47,7 +47,7 @@ public class FishingDailyMissionHandler extends AbstractDailyMissionHandler
@Override
public void init()
{
- Containers.Players().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_FISHING, (OnPlayerFishing event) -> onPlayerFishing(event), this));
+ Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_PLAYER_FISHING, (OnPlayerFishing event) -> onPlayerFishing(event), this));
}
@Override
diff --git a/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java b/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java
index 0e39893808..d8ff520c7f 100644
--- a/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java
+++ b/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java
@@ -16,13 +16,15 @@
*/
package handlers.dailymissionhandlers;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.enums.DailyMissionStatus;
-import org.l2jmobius.gameserver.enums.ElementalType;
import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
import org.l2jmobius.gameserver.model.CommandChannel;
import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
@@ -44,7 +46,8 @@ public class MonsterDailyMissionHandler extends AbstractDailyMissionHandler
private final int _minLevel;
private final int _maxLevel;
private final Set _ids = new HashSet<>();
- private final ElementalType _element;
+ private final String _startHour;
+ private final String _endHour;
public MonsterDailyMissionHandler(DailyMissionDataHolder holder)
{
@@ -52,7 +55,6 @@ public class MonsterDailyMissionHandler extends AbstractDailyMissionHandler
_amount = holder.getRequiredCompletions();
_minLevel = holder.getParams().getInt("minLevel", 0);
_maxLevel = holder.getParams().getInt("maxLevel", Integer.MAX_VALUE);
- _element = holder.getParams().getEnum("element", ElementalType.class, ElementalType.NONE);
final String ids = holder.getParams().getString("ids", "");
if (!ids.isEmpty())
{
@@ -65,6 +67,8 @@ public class MonsterDailyMissionHandler extends AbstractDailyMissionHandler
}
}
}
+ _startHour = holder.getParams().getString("startHour", "");
+ _endHour = holder.getParams().getString("endHour", "");
}
@Override
@@ -113,28 +117,25 @@ public class MonsterDailyMissionHandler extends AbstractDailyMissionHandler
{
return;
}
-
- if ((_element != ElementalType.NONE) && (monster.getElementalSpiritType() != _element))
+ if (checkTimeInterval() || ((_startHour == "") && (_endHour == "")))
{
- return;
- }
-
- final Party party = player.getParty();
- if (party != null)
- {
- final CommandChannel channel = party.getCommandChannel();
- final List members = channel != null ? channel.getMembers() : party.getMembers();
- for (Player member : members)
+ final Party party = player.getParty();
+ if (party != null)
{
- if ((member.getLevel() >= (monsterLevel - 5)) && (member.calculateDistance3D(monster) <= Config.ALT_PARTY_RANGE))
+ final CommandChannel channel = party.getCommandChannel();
+ final List members = channel != null ? channel.getMembers() : party.getMembers();
+ for (Player member : members)
{
- processPlayerProgress(member);
+ if ((member.getLevel() >= (monsterLevel - 5)) && (member.calculateDistance3D(monster) <= Config.ALT_PARTY_RANGE))
+ {
+ processPlayerProgress(member);
+ }
}
}
- }
- else
- {
- processPlayerProgress(player);
+ else
+ {
+ processPlayerProgress(player);
+ }
}
}
@@ -150,4 +151,28 @@ public class MonsterDailyMissionHandler extends AbstractDailyMissionHandler
storePlayerEntry(entry);
}
}
+
+ private boolean checkTimeInterval()
+ {
+ if ((_startHour != "") && (_endHour != ""))
+ {
+ Date date = new Date();
+ SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm");
+ dateFormat.format(date);
+
+ try
+ {
+ // Check param hours
+ if (dateFormat.parse(dateFormat.format(date)).after(dateFormat.parse(_startHour)) && dateFormat.parse(dateFormat.format(date)).before(dateFormat.parse(_endHour)))
+ {
+ return true;
+ }
+ }
+ catch (ParseException e)
+ {
+ e.printStackTrace();
+ }
+ }
+ return false;
+ }
}
diff --git a/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/scripts/handlers/dailymissionhandlers/PurgeRewardDailyMissionHandler.java b/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/scripts/handlers/dailymissionhandlers/PurgeRewardDailyMissionHandler.java
new file mode 100644
index 0000000000..96920f39f3
--- /dev/null
+++ b/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/scripts/handlers/dailymissionhandlers/PurgeRewardDailyMissionHandler.java
@@ -0,0 +1,100 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package handlers.dailymissionhandlers;
+
+import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
+import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
+import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.Containers;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.item.OnItemPurgeReward;
+import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
+
+/**
+ * @author CostyKiller
+ */
+public class PurgeRewardDailyMissionHandler extends AbstractDailyMissionHandler
+{
+ private final int _amount;
+ private final int _minLevel;
+ private final int _maxLevel;
+
+ public PurgeRewardDailyMissionHandler(DailyMissionDataHolder holder)
+ {
+ super(holder);
+ _amount = holder.getRequiredCompletions();
+ _minLevel = holder.getParams().getInt("minLevel", 0);
+ _maxLevel = holder.getParams().getInt("maxLevel", Integer.MAX_VALUE);
+ }
+
+ @Override
+ public void init()
+ {
+ Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_ITEM_PURGE_REWARD, (OnItemPurgeReward event) -> onItemPurgeReward(event), this));
+ }
+
+ @Override
+ public boolean isAvailable(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
+ if (entry != null)
+ {
+ switch (entry.getStatus())
+ {
+ case NOT_AVAILABLE: // Initial state
+ {
+ if (entry.getProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ storePlayerEntry(entry);
+ }
+ break;
+ }
+ case AVAILABLE:
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ private void onItemPurgeReward(OnItemPurgeReward event)
+ {
+ final Player player = event.getPlayer();
+ if ((player.getLevel() < _minLevel) || (player.getLevel() > _maxLevel))
+ {
+ return;
+ }
+ processPlayerProgress(player);
+ }
+
+ private void processPlayerProgress(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), true);
+ if (entry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
+ {
+ if (entry.increaseProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(entry);
+ }
+ }
+}
diff --git a/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/scripts/handlers/dailymissionhandlers/UseItemDailyMissionHandler.java b/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/scripts/handlers/dailymissionhandlers/UseItemDailyMissionHandler.java
new file mode 100644
index 0000000000..7267f6ec1e
--- /dev/null
+++ b/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/scripts/handlers/dailymissionhandlers/UseItemDailyMissionHandler.java
@@ -0,0 +1,122 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package handlers.dailymissionhandlers;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
+import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
+import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.Containers;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.item.OnItemUse;
+import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
+
+/**
+ * @author CostyKiller
+ */
+public class UseItemDailyMissionHandler extends AbstractDailyMissionHandler
+{
+ private final int _amount;
+ private final int _minLevel;
+ private final int _maxLevel;
+ private final Set _itemIds = new HashSet<>();
+
+ public UseItemDailyMissionHandler(DailyMissionDataHolder holder)
+ {
+ super(holder);
+ _amount = holder.getRequiredCompletions();
+ _minLevel = holder.getParams().getInt("minLevel", 0);
+ _maxLevel = holder.getParams().getInt("maxLevel", Integer.MAX_VALUE);
+ final String itemIds = holder.getParams().getString("itemIds", "");
+ if (!itemIds.isEmpty())
+ {
+ for (String s : itemIds.split(","))
+ {
+ final int id = Integer.parseInt(s);
+ if (!_itemIds.contains(id))
+ {
+ _itemIds.add(id);
+ }
+ }
+ }
+ }
+
+ @Override
+ public void init()
+ {
+ Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_ITEM_USE, (OnItemUse event) -> onItemUse(event), this));
+ }
+
+ @Override
+ public boolean isAvailable(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
+ if (entry != null)
+ {
+ switch (entry.getStatus())
+ {
+ case NOT_AVAILABLE: // Initial state
+ {
+ if (entry.getProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ storePlayerEntry(entry);
+ }
+ break;
+ }
+ case AVAILABLE:
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ private void onItemUse(OnItemUse event)
+ {
+ final Player player = event.getPlayer();
+ if (_minLevel > 0)
+ {
+ if ((player.getLevel() < _minLevel) || (player.getLevel() > _maxLevel) || _itemIds.isEmpty())
+ {
+ return;
+ }
+ if (_itemIds.contains(event.getItem().getId()))
+ {
+ processPlayerProgress(player);
+ }
+ }
+ }
+
+ private void processPlayerProgress(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), true);
+ if (entry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
+ {
+ if (entry.increaseProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(entry);
+ }
+ }
+}
diff --git a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/instancemanager/PurgeRankingManager.java b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/instancemanager/PurgeRankingManager.java
index 7d3d6b16be..8acdf07b7a 100644
--- a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/instancemanager/PurgeRankingManager.java
+++ b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/instancemanager/PurgeRankingManager.java
@@ -37,7 +37,11 @@ import org.l2jmobius.gameserver.model.Message;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.EventDispatcher;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.item.OnItemPurgeReward;
import org.l2jmobius.gameserver.model.holders.PurgePlayerHolder;
+import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.itemcontainer.Mail;
import org.l2jmobius.gameserver.network.serverpackets.subjugation.ExSubjugationSidebar;
@@ -138,6 +142,17 @@ public class PurgeRankingManager
attachment.addItem("Purge reward", reward, 5 - counter, null, null);
MailManager.getInstance().sendMessage(msg);
+ // Notify to scripts.
+ final Player player = World.getInstance().getPlayer(charId);
+ final Item item = attachment.getItemByItemId(reward);
+ if (player != null)
+ {
+ if (EventDispatcher.getInstance().hasListener(EventType.ON_ITEM_PURGE_REWARD))
+ {
+ EventDispatcher.getInstance().notifyEventAsync(new OnItemPurgeReward(player, item));
+ }
+ }
+
try (Connection con = DatabaseFactory.getConnection())
{
try (PreparedStatement st = con.prepareStatement(DELETE_SUBJUGATION))
diff --git a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/events/EventType.java b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/events/EventType.java
index 936098c00a..719020ffd7 100644
--- a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/events/EventType.java
+++ b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/events/EventType.java
@@ -126,6 +126,7 @@ import org.l2jmobius.gameserver.model.events.impl.instance.OnInstanceLeave;
import org.l2jmobius.gameserver.model.events.impl.instance.OnInstanceStatusChange;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemBypassEvent;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemCreate;
+import org.l2jmobius.gameserver.model.events.impl.item.OnItemPurgeReward;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemTalk;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemUse;
import org.l2jmobius.gameserver.model.events.impl.olympiad.OnOlympiadMatchResult;
@@ -185,6 +186,7 @@ public enum EventType
ON_ITEM_CREATE(OnItemCreate.class, void.class),
ON_ITEM_USE(OnItemUse.class, void.class),
ON_ITEM_TALK(OnItemTalk.class, void.class),
+ ON_ITEM_PURGE_REWARD(OnItemPurgeReward.class, void.class),
// NPC events
ON_NPC_CAN_BE_SEEN(OnNpcCanBeSeen.class, void.class, TerminateReturn.class),
diff --git a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/events/impl/item/OnItemPurgeReward.java b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/events/impl/item/OnItemPurgeReward.java
new file mode 100644
index 0000000000..b40f88ee41
--- /dev/null
+++ b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/events/impl/item/OnItemPurgeReward.java
@@ -0,0 +1,53 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.l2jmobius.gameserver.model.events.impl.item;
+
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.IBaseEvent;
+import org.l2jmobius.gameserver.model.item.instance.Item;
+
+/**
+ * @author CostyKiller
+ */
+public class OnItemPurgeReward implements IBaseEvent
+{
+ private final Player _player;
+ private final Item _item;
+
+ public OnItemPurgeReward(Player player, Item item)
+ {
+ _player = player;
+ _item = item;
+ }
+
+ public Player getPlayer()
+ {
+ return _player;
+ }
+
+ public Item getItem()
+ {
+ return _item;
+ }
+
+ @Override
+ public EventType getType()
+ {
+ return EventType.ON_ITEM_PURGE_REWARD;
+ }
+}
diff --git a/L2J_Mobius_Essence_6.3_Crusader/dist/game/data/DailyMission.xml b/L2J_Mobius_Essence_6.3_Crusader/dist/game/data/DailyMission.xml
index 6b66d27ec6..387ef266e8 100644
--- a/L2J_Mobius_Essence_6.3_Crusader/dist/game/data/DailyMission.xml
+++ b/L2J_Mobius_Essence_6.3_Crusader/dist/game/data/DailyMission.xml
@@ -1,8 +1,5 @@
-
-
-
@@ -380,9 +377,6 @@
-
-
-
@@ -433,9 +427,6 @@
-
-
-
@@ -510,8 +501,6 @@
-
-
@@ -749,319 +738,139 @@
-
-
+
+ 91
- Hair Accessory Coupon
+
+
+
+
+
- -->
-
+
+ 92
- Mid-grade Spirit's Blessing
-
-
-
- One-time mission. A reward is given when evolving the Water Spirit up to Lv. 3.
-
- WATER
-
-
- Mid-grade Spirit's Blessing
-
-
-
- One-time mission. A reward is given when evolving the Wind Spirit up to Lv. 3.
-
- WIND
-
-
- Mid-grade Spirit's Blessing
-
-
-
- One-time mission. A reward is given when evolving the Earth Spirit up to Lv. 3.
-
- EARTH
-
-
- Mid-grade Spirit's Blessing
-
-
- -->
-
-
-
-
-
-
- 60
- 99
- 22192,22193,22194,22195,22196,22197,22198,22199
-
-
-
-
-
-
-
-
- 60
- 99
- 22192,22193,22194,22195,22196,22197,22198,22199
-
-
-
-
-
-
-
+
+
+
+
- A reward is given for using Sayha's Blessing that is not limited by level, 10 times.
-
+
+
10
91910
- Growth Rune Fragment Sealed
- Mission Points
+
+
-
-
- Daily mission (once per account). A reward is given for killing 300 monsters in a Transcendent Instance Zone.
+
+
40
99
+ 22192,22193,22194,22195,22196,22197,22198,22199
+
+
+
+
+
+
+
+
+
+
+ 60
+ 99
+
+
+
+
+
+
+
+
+
+ 60
+ 99
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 40
+ 99
- Soulshot Ticket
- Spirit Ore
- Sayha's Cookie
+
-
-
- A reward is given for killing titled monsters during the battle for the Orc Fortress.
-
- 60
- 99
-
-
- Red Lantern
- XP Growth Scroll
-
-
-
- A reward is given for killing titleless monsters during the battle for the Orc Fortress.
-
- 60
- 99
-
-
- Blue Lantern
- XP Growth Scroll
-
-
-
- One-time mission. A reward is given for winning a 3 vs 3 Olympiad match. Not available on Sundays.
-
-
- Einhasad's Blessing Scroll
-
-
-
- One-time mission. A reward is given for winning 2 of 3 vs 3 Olympiad matches. Not available on Sundays.
-
-
- Special HP Recovery Potion
-
-
-
- One-time mission. A reward is given for winning 3 of 3 vs 3 Olympiad matches. Not available on Sundays.
-
-
- Einhasad's Blessing Scroll
-
-
-
- One-time mission. A reward is given for winning 4 of 3 vs 3 Olympiad matches. Not available on Sundays.
-
-
- Special HP Recovery Potion
-
-
-
- One-time mission. A reward is given for winning 5 of 3 vs 3 Olympiad matches. Not available on Sundays.
-
-
- Victory Pack
-
-
-
- A reward is given when player will percipient in Olympiad, 50 times. Available from monday to friday.
-
-
- Mission Points
- Olympiad Treasure Chest Sealed
-
-
- -->
@@ -1105,74 +914,313 @@
-
22271,22272,22273
76
99
- Soulshot Ticket Sealed
- Spirit Ore Sealed
- Clan XP Sealed
- Grace Potion Sealed
- Ancient Adena
- Mission Points
+
+
+
+
+
+
-
- Daily mission. A reward is given for killing 50 monsters in the Elmoreden Tower. Required level: 60-74.
-
- 22271,22272,22273
- 60
- 74
+
+
+
+ FIRE
- Green Lantern (Time-limited) Sealed
- Asofe Sealed
- Mission Points
+
-
- Daily mission. A reward is given for killing 50 monsters in the Elmoreden Tower. Required level: 75-79.
-
- 22271,22272,22273
- 75
- 79
+
+
+
+ WATER
- Green Lantern (Time-limited) Sealed
- Asofe Sealed
- Mission Points
+
-
- Daily mission. A reward is given for killing 50 monsters in the Elmoreden Tower. Required level: 80-84.
-
- 22271,22272,22273
- 80
- 84
+
+
+
+ WIND
- Green Lantern (Time-limited) Sealed
- Asofe Sealed
- Mission Points
+
-
- Daily mission. A reward is given for killing 50 monsters in the Elmoreden Tower. Required level: 85+.
+
+
+
+ EARTH
+
+
+
+
+
+
+
+
+ FIRE
+
+
+
+
+
+
+
+
+ WATER
+
+
+
+
+
+
+
+
+ WIND
+
+
+
+
+
+
+
+
+ EARTH
+
+
+
+
+
+
+
- 22271,22272,22273
- 85
+ 20792,20794,20795,20796,20797,20798,20799,20800,20801,20802,20803,20849,20995,21661,21662,21663,21664,21665,21666,21667,21668,21669,21670,21671,21672,21673,21674,21675,21676,21678,21685,21686,21761,21762,21763,21764,21765,21766,21767,21768,21769,21770,21771,21772,21773,21774,21775,21776,21777,21778,21779,21780,21781,21782,21783,21784,21785,21786,21787,21788,21789,21790,21791,21792,21793,21813,21814,21815,21816,21817,21818,21819,21820,21821,21822,21823,21824,21825,21826,21827,21828,21829,21830,21831,21832
+ 76
99
- Green Lantern (Time-limited) Sealed
- Asofe Sealed
- Mission Points
+
+
+
+
+
+
+
+ 79
+ 99
+ 22192,22193,22194,22195,22196,22197,22198,22199
+
+
+
+
+
+
+
+
+
+ 60
+ 74
+ 22192,22193,22194,22195,22196,22197,22198,22199
+
+
+
+
+
+
+
+
+
+
+ 75
+ 79
+ 22192,22193,22194,22195,22196,22197,22198,22199
+
+
+
+
+
+
+
+
+
+
+ 80
+ 84
+ 22192,22193,22194,22195,22196,22197,22198,22199
+
+
+
+
+
+
+
+
+
+
+ 85
+ 99
+ 22192,22193,22194,22195,22196,22197,22198,22199
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 76
+ 99
+ 22192,22193,22194,22195,22196,22197,22198,22199
+
+
+
+
+
+
+
+
+
+ 76
+ 99
+ 22192,22193,22194,22195,22196,22197,22198,22199
+
+
+
+
+
+
+
+
+ 76
+ 99
+ 22192,22193,22194,22195,22196,22197,22198,22199
+
+
+
+
+
+
+
+
+
+ 76
+ 99
+ 22192,22193,22194,22195,22196,22197,22198,22199
+
+
+
+
+
+
+
+
+
+
+
+ 76
+ 99
+ 22192,22193,22194,22195,22196,22197,22198,22199
+
+
+
+
+
+
+
+
+ 70
+ 99
+ 22192,22193,22194,22195,22196,22197,22198,22199
+
+
+
+
+
+
+
+
+ 76
+ 99
+ 22192,22193,22194,22195,22196,22197,22198,22199
+
+
+
+
+
+
+
+
+ 60
+ 99
+ 22192,22193,22194,22195,22196,22197,22198,22199
+
+
+
+
+
+
+
+
+ 85
+ 99
+ 22192,22193,22194,22195,22196,22197,22198,22199
+
+
+
+
+
+
+
+
+ 85
+ 99
+ 22192,22193,22194,22195,22196,22197,22198,22199
+
+
+
+
+
+
+
+
+ 85
+ 99
+ 22192,22193,22194,22195,22196,22197,22198,22199
+
+
+
+
+
+
+
+
+ 65
+ 99
+ 22192,22193,22194,22195,22196,22197,22198,22199
+
+
+
- -->
\ No newline at end of file
diff --git a/L2J_Mobius_Essence_6.3_Crusader/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java b/L2J_Mobius_Essence_6.3_Crusader/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
index d82ced4060..0d47af2fb9 100644
--- a/L2J_Mobius_Essence_6.3_Crusader/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
+++ b/L2J_Mobius_Essence_6.3_Crusader/dist/game/data/scripts/handlers/DailyMissionMasterHandler.java
@@ -28,9 +28,11 @@ import handlers.dailymissionhandlers.LoginMonthDailyMissionHandler;
import handlers.dailymissionhandlers.LoginWeekendDailyMissionHandler;
import handlers.dailymissionhandlers.MonsterDailyMissionHandler;
import handlers.dailymissionhandlers.OlympiadDailyMissionHandler;
+import handlers.dailymissionhandlers.PurgeRewardDailyMissionHandler;
import handlers.dailymissionhandlers.QuestDailyMissionHandler;
import handlers.dailymissionhandlers.SiegeDailyMissionHandler;
import handlers.dailymissionhandlers.SpiritDailyMissionHandler;
+import handlers.dailymissionhandlers.UseItemDailyMissionHandler;
/**
* @author UnAfraid
@@ -52,6 +54,8 @@ public class DailyMissionMasterHandler
DailyMissionHandler.getInstance().registerHandler("fishing", FishingDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("spirit", SpiritDailyMissionHandler::new);
DailyMissionHandler.getInstance().registerHandler("joinclan", JoinClanDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("purge", PurgeRewardDailyMissionHandler::new);
+ DailyMissionHandler.getInstance().registerHandler("useitem", UseItemDailyMissionHandler::new);
LOGGER.info(DailyMissionMasterHandler.class.getSimpleName() + ": Loaded " + DailyMissionHandler.getInstance().size() + " handlers.");
}
}
diff --git a/L2J_Mobius_Essence_6.3_Crusader/dist/game/data/scripts/handlers/dailymissionhandlers/FishingDailyMissionHandler.java b/L2J_Mobius_Essence_6.3_Crusader/dist/game/data/scripts/handlers/dailymissionhandlers/FishingDailyMissionHandler.java
index a0f04e2473..b954e977aa 100644
--- a/L2J_Mobius_Essence_6.3_Crusader/dist/game/data/scripts/handlers/dailymissionhandlers/FishingDailyMissionHandler.java
+++ b/L2J_Mobius_Essence_6.3_Crusader/dist/game/data/scripts/handlers/dailymissionhandlers/FishingDailyMissionHandler.java
@@ -47,7 +47,7 @@ public class FishingDailyMissionHandler extends AbstractDailyMissionHandler
@Override
public void init()
{
- Containers.Players().addListener(new ConsumerEventListener(this, EventType.ON_PLAYER_FISHING, (OnPlayerFishing event) -> onPlayerFishing(event), this));
+ Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_PLAYER_FISHING, (OnPlayerFishing event) -> onPlayerFishing(event), this));
}
@Override
diff --git a/L2J_Mobius_Essence_6.3_Crusader/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java b/L2J_Mobius_Essence_6.3_Crusader/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java
index 0e39893808..d8ff520c7f 100644
--- a/L2J_Mobius_Essence_6.3_Crusader/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java
+++ b/L2J_Mobius_Essence_6.3_Crusader/dist/game/data/scripts/handlers/dailymissionhandlers/MonsterDailyMissionHandler.java
@@ -16,13 +16,15 @@
*/
package handlers.dailymissionhandlers;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.enums.DailyMissionStatus;
-import org.l2jmobius.gameserver.enums.ElementalType;
import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
import org.l2jmobius.gameserver.model.CommandChannel;
import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
@@ -44,7 +46,8 @@ public class MonsterDailyMissionHandler extends AbstractDailyMissionHandler
private final int _minLevel;
private final int _maxLevel;
private final Set _ids = new HashSet<>();
- private final ElementalType _element;
+ private final String _startHour;
+ private final String _endHour;
public MonsterDailyMissionHandler(DailyMissionDataHolder holder)
{
@@ -52,7 +55,6 @@ public class MonsterDailyMissionHandler extends AbstractDailyMissionHandler
_amount = holder.getRequiredCompletions();
_minLevel = holder.getParams().getInt("minLevel", 0);
_maxLevel = holder.getParams().getInt("maxLevel", Integer.MAX_VALUE);
- _element = holder.getParams().getEnum("element", ElementalType.class, ElementalType.NONE);
final String ids = holder.getParams().getString("ids", "");
if (!ids.isEmpty())
{
@@ -65,6 +67,8 @@ public class MonsterDailyMissionHandler extends AbstractDailyMissionHandler
}
}
}
+ _startHour = holder.getParams().getString("startHour", "");
+ _endHour = holder.getParams().getString("endHour", "");
}
@Override
@@ -113,28 +117,25 @@ public class MonsterDailyMissionHandler extends AbstractDailyMissionHandler
{
return;
}
-
- if ((_element != ElementalType.NONE) && (monster.getElementalSpiritType() != _element))
+ if (checkTimeInterval() || ((_startHour == "") && (_endHour == "")))
{
- return;
- }
-
- final Party party = player.getParty();
- if (party != null)
- {
- final CommandChannel channel = party.getCommandChannel();
- final List members = channel != null ? channel.getMembers() : party.getMembers();
- for (Player member : members)
+ final Party party = player.getParty();
+ if (party != null)
{
- if ((member.getLevel() >= (monsterLevel - 5)) && (member.calculateDistance3D(monster) <= Config.ALT_PARTY_RANGE))
+ final CommandChannel channel = party.getCommandChannel();
+ final List members = channel != null ? channel.getMembers() : party.getMembers();
+ for (Player member : members)
{
- processPlayerProgress(member);
+ if ((member.getLevel() >= (monsterLevel - 5)) && (member.calculateDistance3D(monster) <= Config.ALT_PARTY_RANGE))
+ {
+ processPlayerProgress(member);
+ }
}
}
- }
- else
- {
- processPlayerProgress(player);
+ else
+ {
+ processPlayerProgress(player);
+ }
}
}
@@ -150,4 +151,28 @@ public class MonsterDailyMissionHandler extends AbstractDailyMissionHandler
storePlayerEntry(entry);
}
}
+
+ private boolean checkTimeInterval()
+ {
+ if ((_startHour != "") && (_endHour != ""))
+ {
+ Date date = new Date();
+ SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm");
+ dateFormat.format(date);
+
+ try
+ {
+ // Check param hours
+ if (dateFormat.parse(dateFormat.format(date)).after(dateFormat.parse(_startHour)) && dateFormat.parse(dateFormat.format(date)).before(dateFormat.parse(_endHour)))
+ {
+ return true;
+ }
+ }
+ catch (ParseException e)
+ {
+ e.printStackTrace();
+ }
+ }
+ return false;
+ }
}
diff --git a/L2J_Mobius_Essence_6.3_Crusader/dist/game/data/scripts/handlers/dailymissionhandlers/PurgeRewardDailyMissionHandler.java b/L2J_Mobius_Essence_6.3_Crusader/dist/game/data/scripts/handlers/dailymissionhandlers/PurgeRewardDailyMissionHandler.java
new file mode 100644
index 0000000000..96920f39f3
--- /dev/null
+++ b/L2J_Mobius_Essence_6.3_Crusader/dist/game/data/scripts/handlers/dailymissionhandlers/PurgeRewardDailyMissionHandler.java
@@ -0,0 +1,100 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package handlers.dailymissionhandlers;
+
+import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
+import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
+import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.Containers;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.item.OnItemPurgeReward;
+import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
+
+/**
+ * @author CostyKiller
+ */
+public class PurgeRewardDailyMissionHandler extends AbstractDailyMissionHandler
+{
+ private final int _amount;
+ private final int _minLevel;
+ private final int _maxLevel;
+
+ public PurgeRewardDailyMissionHandler(DailyMissionDataHolder holder)
+ {
+ super(holder);
+ _amount = holder.getRequiredCompletions();
+ _minLevel = holder.getParams().getInt("minLevel", 0);
+ _maxLevel = holder.getParams().getInt("maxLevel", Integer.MAX_VALUE);
+ }
+
+ @Override
+ public void init()
+ {
+ Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_ITEM_PURGE_REWARD, (OnItemPurgeReward event) -> onItemPurgeReward(event), this));
+ }
+
+ @Override
+ public boolean isAvailable(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
+ if (entry != null)
+ {
+ switch (entry.getStatus())
+ {
+ case NOT_AVAILABLE: // Initial state
+ {
+ if (entry.getProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ storePlayerEntry(entry);
+ }
+ break;
+ }
+ case AVAILABLE:
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ private void onItemPurgeReward(OnItemPurgeReward event)
+ {
+ final Player player = event.getPlayer();
+ if ((player.getLevel() < _minLevel) || (player.getLevel() > _maxLevel))
+ {
+ return;
+ }
+ processPlayerProgress(player);
+ }
+
+ private void processPlayerProgress(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), true);
+ if (entry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
+ {
+ if (entry.increaseProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(entry);
+ }
+ }
+}
diff --git a/L2J_Mobius_Essence_6.3_Crusader/dist/game/data/scripts/handlers/dailymissionhandlers/UseItemDailyMissionHandler.java b/L2J_Mobius_Essence_6.3_Crusader/dist/game/data/scripts/handlers/dailymissionhandlers/UseItemDailyMissionHandler.java
new file mode 100644
index 0000000000..7267f6ec1e
--- /dev/null
+++ b/L2J_Mobius_Essence_6.3_Crusader/dist/game/data/scripts/handlers/dailymissionhandlers/UseItemDailyMissionHandler.java
@@ -0,0 +1,122 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package handlers.dailymissionhandlers;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.l2jmobius.gameserver.enums.DailyMissionStatus;
+import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
+import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
+import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.Containers;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.item.OnItemUse;
+import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
+
+/**
+ * @author CostyKiller
+ */
+public class UseItemDailyMissionHandler extends AbstractDailyMissionHandler
+{
+ private final int _amount;
+ private final int _minLevel;
+ private final int _maxLevel;
+ private final Set _itemIds = new HashSet<>();
+
+ public UseItemDailyMissionHandler(DailyMissionDataHolder holder)
+ {
+ super(holder);
+ _amount = holder.getRequiredCompletions();
+ _minLevel = holder.getParams().getInt("minLevel", 0);
+ _maxLevel = holder.getParams().getInt("maxLevel", Integer.MAX_VALUE);
+ final String itemIds = holder.getParams().getString("itemIds", "");
+ if (!itemIds.isEmpty())
+ {
+ for (String s : itemIds.split(","))
+ {
+ final int id = Integer.parseInt(s);
+ if (!_itemIds.contains(id))
+ {
+ _itemIds.add(id);
+ }
+ }
+ }
+ }
+
+ @Override
+ public void init()
+ {
+ Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_ITEM_USE, (OnItemUse event) -> onItemUse(event), this));
+ }
+
+ @Override
+ public boolean isAvailable(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
+ if (entry != null)
+ {
+ switch (entry.getStatus())
+ {
+ case NOT_AVAILABLE: // Initial state
+ {
+ if (entry.getProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ storePlayerEntry(entry);
+ }
+ break;
+ }
+ case AVAILABLE:
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ private void onItemUse(OnItemUse event)
+ {
+ final Player player = event.getPlayer();
+ if (_minLevel > 0)
+ {
+ if ((player.getLevel() < _minLevel) || (player.getLevel() > _maxLevel) || _itemIds.isEmpty())
+ {
+ return;
+ }
+ if (_itemIds.contains(event.getItem().getId()))
+ {
+ processPlayerProgress(player);
+ }
+ }
+ }
+
+ private void processPlayerProgress(Player player)
+ {
+ final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), true);
+ if (entry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
+ {
+ if (entry.increaseProgress() >= _amount)
+ {
+ entry.setStatus(DailyMissionStatus.AVAILABLE);
+ }
+ storePlayerEntry(entry);
+ }
+ }
+}
diff --git a/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/instancemanager/PurgeRankingManager.java b/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/instancemanager/PurgeRankingManager.java
index 7d3d6b16be..8acdf07b7a 100644
--- a/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/instancemanager/PurgeRankingManager.java
+++ b/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/instancemanager/PurgeRankingManager.java
@@ -37,7 +37,11 @@ import org.l2jmobius.gameserver.model.Message;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.EventDispatcher;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.item.OnItemPurgeReward;
import org.l2jmobius.gameserver.model.holders.PurgePlayerHolder;
+import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.itemcontainer.Mail;
import org.l2jmobius.gameserver.network.serverpackets.subjugation.ExSubjugationSidebar;
@@ -138,6 +142,17 @@ public class PurgeRankingManager
attachment.addItem("Purge reward", reward, 5 - counter, null, null);
MailManager.getInstance().sendMessage(msg);
+ // Notify to scripts.
+ final Player player = World.getInstance().getPlayer(charId);
+ final Item item = attachment.getItemByItemId(reward);
+ if (player != null)
+ {
+ if (EventDispatcher.getInstance().hasListener(EventType.ON_ITEM_PURGE_REWARD))
+ {
+ EventDispatcher.getInstance().notifyEventAsync(new OnItemPurgeReward(player, item));
+ }
+ }
+
try (Connection con = DatabaseFactory.getConnection())
{
try (PreparedStatement st = con.prepareStatement(DELETE_SUBJUGATION))
diff --git a/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/model/events/EventType.java b/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/model/events/EventType.java
index 936098c00a..719020ffd7 100644
--- a/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/model/events/EventType.java
+++ b/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/model/events/EventType.java
@@ -126,6 +126,7 @@ import org.l2jmobius.gameserver.model.events.impl.instance.OnInstanceLeave;
import org.l2jmobius.gameserver.model.events.impl.instance.OnInstanceStatusChange;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemBypassEvent;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemCreate;
+import org.l2jmobius.gameserver.model.events.impl.item.OnItemPurgeReward;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemTalk;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemUse;
import org.l2jmobius.gameserver.model.events.impl.olympiad.OnOlympiadMatchResult;
@@ -185,6 +186,7 @@ public enum EventType
ON_ITEM_CREATE(OnItemCreate.class, void.class),
ON_ITEM_USE(OnItemUse.class, void.class),
ON_ITEM_TALK(OnItemTalk.class, void.class),
+ ON_ITEM_PURGE_REWARD(OnItemPurgeReward.class, void.class),
// NPC events
ON_NPC_CAN_BE_SEEN(OnNpcCanBeSeen.class, void.class, TerminateReturn.class),
diff --git a/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/model/events/impl/item/OnItemPurgeReward.java b/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/model/events/impl/item/OnItemPurgeReward.java
new file mode 100644
index 0000000000..b40f88ee41
--- /dev/null
+++ b/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/model/events/impl/item/OnItemPurgeReward.java
@@ -0,0 +1,53 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.l2jmobius.gameserver.model.events.impl.item;
+
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.events.EventType;
+import org.l2jmobius.gameserver.model.events.impl.IBaseEvent;
+import org.l2jmobius.gameserver.model.item.instance.Item;
+
+/**
+ * @author CostyKiller
+ */
+public class OnItemPurgeReward implements IBaseEvent
+{
+ private final Player _player;
+ private final Item _item;
+
+ public OnItemPurgeReward(Player player, Item item)
+ {
+ _player = player;
+ _item = item;
+ }
+
+ public Player getPlayer()
+ {
+ return _player;
+ }
+
+ public Item getItem()
+ {
+ return _item;
+ }
+
+ @Override
+ public EventType getType()
+ {
+ return EventType.ON_ITEM_PURGE_REWARD;
+ }
+}