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