diff --git a/L2J_Mobius_01.0_Ertheia/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_01.0_Ertheia/dist/game/data/scripts/handlers/EffectMasterHandler.java index 3c41ee6c2c..4fd4274ef9 100644 --- a/L2J_Mobius_01.0_Ertheia/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_01.0_Ertheia/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -232,6 +232,7 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("MpShield", MpShield::new); EffectHandler.getInstance().registerHandler("MpVampiricAttack", MpVampiricAttack::new); EffectHandler.getInstance().registerHandler("Mute", Mute::new); + EffectHandler.getInstance().registerHandler("NightStatModifier", NightStatModifier::new); EffectHandler.getInstance().registerHandler("NoblesseBless", NoblesseBless::new); EffectHandler.getInstance().registerHandler("OpenChest", OpenChest::new); EffectHandler.getInstance().registerHandler("OpenCommonRecipeBook", OpenCommonRecipeBook::new); @@ -332,7 +333,6 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("SpModify", SpModify::new); EffectHandler.getInstance().registerHandler("Spoil", Spoil::new); EffectHandler.getInstance().registerHandler("StatAddForLevel", StatAddForLevel::new); - EffectHandler.getInstance().registerHandler("StatAddForNight", StatAddForNight::new); EffectHandler.getInstance().registerHandler("StatBonusSkillCritical", StatBonusSkillCritical::new); EffectHandler.getInstance().registerHandler("StatBonusSpeed", StatBonusSpeed::new); EffectHandler.getInstance().registerHandler("StatByMoveType", StatByMoveType::new); diff --git a/L2J_Mobius_01.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java b/L2J_Mobius_01.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java similarity index 94% rename from L2J_Mobius_01.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java rename to L2J_Mobius_01.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java index 55cb0d4924..8dce6e4312 100644 --- a/L2J_Mobius_01.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java +++ b/L2J_Mobius_01.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java @@ -39,7 +39,7 @@ import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager; /** * @author Mobius */ -public class StatAddForNight extends AbstractEffect +public class NightStatModifier extends AbstractEffect { private static final AtomicBoolean DAY_TIME = new AtomicBoolean(GameTimeTaskManager.getInstance().isNight()); private static final Set NIGHT_STAT_CHARACTERS = ConcurrentHashMap.newKeySet(); @@ -49,7 +49,7 @@ public class StatAddForNight extends AbstractEffect private final int _amount; protected final StatModifierType _mode; - public StatAddForNight(StatSet params) + public NightStatModifier(StatSet params) { _stat = params.getEnum("stat", Stat.class); _amount = params.getInt("amount"); diff --git a/L2J_Mobius_01.0_Ertheia/dist/game/data/stats/skills/00200-00299.xml b/L2J_Mobius_01.0_Ertheia/dist/game/data/stats/skills/00200-00299.xml index efa809e802..1000e967cc 100644 --- a/L2J_Mobius_01.0_Ertheia/dist/game/data/stats/skills/00200-00299.xml +++ b/L2J_Mobius_01.0_Ertheia/dist/game/data/stats/skills/00200-00299.xml @@ -6458,7 +6458,7 @@ P 5 - + ACCURACY_COMBAT 3 diff --git a/L2J_Mobius_01.0_Ertheia/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_01.0_Ertheia/dist/game/data/stats/skills/documentation.txt index 76ce8038bf..5b482483d8 100644 --- a/L2J_Mobius_01.0_Ertheia/dist/game/data/stats/skills/documentation.txt +++ b/L2J_Mobius_01.0_Ertheia/dist/game/data/stats/skills/documentation.txt @@ -202,6 +202,7 @@ MpRegen: MP Regeneration stat. MpShield: Transfers given percentage of damage as mana damage. Mana Shield. MpVampiricAttack: Absorbs given percentage of mana during attack. Mute: Prevents target from using magical skills. Silence. +NightStatModifier: Modify a specific stat at night time. (l2jmobius) NoblesseBless: Does not remove buffs upon death except itself. OpenChest: Opens a treasure chest. OpenCommonRecipeBook: Shows the common recipe book window. @@ -301,7 +302,6 @@ SpeedLimit: Increase a character's max Speed limit. (l2jmobius) SpModify: Bonus SP stat. Spoil: Spoils a mob activating its extra sweep drop. StatAddForLevel: Adds a fixed amount of a Stat for a specific player level. (l2jmobius) -StatAddForNight: Modify a specific stat at night time. (l2jmobius) StatBonusSkillCritical: Changes skill critical rate to depend on the specified base stat. StatBonusSpeed: Changes Speed stat to depend on the specified base stat. StatByMoveType: Adds stat based on your movement type (standing, running, walking). diff --git a/L2J_Mobius_02.5_Underground/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_02.5_Underground/dist/game/data/scripts/handlers/EffectMasterHandler.java index 3c41ee6c2c..4fd4274ef9 100644 --- a/L2J_Mobius_02.5_Underground/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_02.5_Underground/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -232,6 +232,7 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("MpShield", MpShield::new); EffectHandler.getInstance().registerHandler("MpVampiricAttack", MpVampiricAttack::new); EffectHandler.getInstance().registerHandler("Mute", Mute::new); + EffectHandler.getInstance().registerHandler("NightStatModifier", NightStatModifier::new); EffectHandler.getInstance().registerHandler("NoblesseBless", NoblesseBless::new); EffectHandler.getInstance().registerHandler("OpenChest", OpenChest::new); EffectHandler.getInstance().registerHandler("OpenCommonRecipeBook", OpenCommonRecipeBook::new); @@ -332,7 +333,6 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("SpModify", SpModify::new); EffectHandler.getInstance().registerHandler("Spoil", Spoil::new); EffectHandler.getInstance().registerHandler("StatAddForLevel", StatAddForLevel::new); - EffectHandler.getInstance().registerHandler("StatAddForNight", StatAddForNight::new); EffectHandler.getInstance().registerHandler("StatBonusSkillCritical", StatBonusSkillCritical::new); EffectHandler.getInstance().registerHandler("StatBonusSpeed", StatBonusSpeed::new); EffectHandler.getInstance().registerHandler("StatByMoveType", StatByMoveType::new); diff --git a/L2J_Mobius_02.5_Underground/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java b/L2J_Mobius_02.5_Underground/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java similarity index 94% rename from L2J_Mobius_02.5_Underground/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java rename to L2J_Mobius_02.5_Underground/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java index 55cb0d4924..8dce6e4312 100644 --- a/L2J_Mobius_02.5_Underground/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java +++ b/L2J_Mobius_02.5_Underground/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java @@ -39,7 +39,7 @@ import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager; /** * @author Mobius */ -public class StatAddForNight extends AbstractEffect +public class NightStatModifier extends AbstractEffect { private static final AtomicBoolean DAY_TIME = new AtomicBoolean(GameTimeTaskManager.getInstance().isNight()); private static final Set NIGHT_STAT_CHARACTERS = ConcurrentHashMap.newKeySet(); @@ -49,7 +49,7 @@ public class StatAddForNight extends AbstractEffect private final int _amount; protected final StatModifierType _mode; - public StatAddForNight(StatSet params) + public NightStatModifier(StatSet params) { _stat = params.getEnum("stat", Stat.class); _amount = params.getInt("amount"); diff --git a/L2J_Mobius_02.5_Underground/dist/game/data/stats/skills/00200-00299.xml b/L2J_Mobius_02.5_Underground/dist/game/data/stats/skills/00200-00299.xml index b71ea32113..ec56addede 100644 --- a/L2J_Mobius_02.5_Underground/dist/game/data/stats/skills/00200-00299.xml +++ b/L2J_Mobius_02.5_Underground/dist/game/data/stats/skills/00200-00299.xml @@ -6456,7 +6456,7 @@ P 5 - + ACCURACY_COMBAT 3 diff --git a/L2J_Mobius_02.5_Underground/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_02.5_Underground/dist/game/data/stats/skills/documentation.txt index 76ce8038bf..5b482483d8 100644 --- a/L2J_Mobius_02.5_Underground/dist/game/data/stats/skills/documentation.txt +++ b/L2J_Mobius_02.5_Underground/dist/game/data/stats/skills/documentation.txt @@ -202,6 +202,7 @@ MpRegen: MP Regeneration stat. MpShield: Transfers given percentage of damage as mana damage. Mana Shield. MpVampiricAttack: Absorbs given percentage of mana during attack. Mute: Prevents target from using magical skills. Silence. +NightStatModifier: Modify a specific stat at night time. (l2jmobius) NoblesseBless: Does not remove buffs upon death except itself. OpenChest: Opens a treasure chest. OpenCommonRecipeBook: Shows the common recipe book window. @@ -301,7 +302,6 @@ SpeedLimit: Increase a character's max Speed limit. (l2jmobius) SpModify: Bonus SP stat. Spoil: Spoils a mob activating its extra sweep drop. StatAddForLevel: Adds a fixed amount of a Stat for a specific player level. (l2jmobius) -StatAddForNight: Modify a specific stat at night time. (l2jmobius) StatBonusSkillCritical: Changes skill critical rate to depend on the specified base stat. StatBonusSpeed: Changes Speed stat to depend on the specified base stat. StatByMoveType: Adds stat based on your movement type (standing, running, walking). diff --git a/L2J_Mobius_03.0_Helios/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_03.0_Helios/dist/game/data/scripts/handlers/EffectMasterHandler.java index 3c41ee6c2c..4fd4274ef9 100644 --- a/L2J_Mobius_03.0_Helios/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_03.0_Helios/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -232,6 +232,7 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("MpShield", MpShield::new); EffectHandler.getInstance().registerHandler("MpVampiricAttack", MpVampiricAttack::new); EffectHandler.getInstance().registerHandler("Mute", Mute::new); + EffectHandler.getInstance().registerHandler("NightStatModifier", NightStatModifier::new); EffectHandler.getInstance().registerHandler("NoblesseBless", NoblesseBless::new); EffectHandler.getInstance().registerHandler("OpenChest", OpenChest::new); EffectHandler.getInstance().registerHandler("OpenCommonRecipeBook", OpenCommonRecipeBook::new); @@ -332,7 +333,6 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("SpModify", SpModify::new); EffectHandler.getInstance().registerHandler("Spoil", Spoil::new); EffectHandler.getInstance().registerHandler("StatAddForLevel", StatAddForLevel::new); - EffectHandler.getInstance().registerHandler("StatAddForNight", StatAddForNight::new); EffectHandler.getInstance().registerHandler("StatBonusSkillCritical", StatBonusSkillCritical::new); EffectHandler.getInstance().registerHandler("StatBonusSpeed", StatBonusSpeed::new); EffectHandler.getInstance().registerHandler("StatByMoveType", StatByMoveType::new); diff --git a/L2J_Mobius_03.0_Helios/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java b/L2J_Mobius_03.0_Helios/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java similarity index 94% rename from L2J_Mobius_03.0_Helios/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java rename to L2J_Mobius_03.0_Helios/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java index 55cb0d4924..8dce6e4312 100644 --- a/L2J_Mobius_03.0_Helios/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java +++ b/L2J_Mobius_03.0_Helios/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java @@ -39,7 +39,7 @@ import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager; /** * @author Mobius */ -public class StatAddForNight extends AbstractEffect +public class NightStatModifier extends AbstractEffect { private static final AtomicBoolean DAY_TIME = new AtomicBoolean(GameTimeTaskManager.getInstance().isNight()); private static final Set NIGHT_STAT_CHARACTERS = ConcurrentHashMap.newKeySet(); @@ -49,7 +49,7 @@ public class StatAddForNight extends AbstractEffect private final int _amount; protected final StatModifierType _mode; - public StatAddForNight(StatSet params) + public NightStatModifier(StatSet params) { _stat = params.getEnum("stat", Stat.class); _amount = params.getInt("amount"); diff --git a/L2J_Mobius_03.0_Helios/dist/game/data/stats/skills/00200-00299.xml b/L2J_Mobius_03.0_Helios/dist/game/data/stats/skills/00200-00299.xml index ca0370c33d..264cca21b4 100644 --- a/L2J_Mobius_03.0_Helios/dist/game/data/stats/skills/00200-00299.xml +++ b/L2J_Mobius_03.0_Helios/dist/game/data/stats/skills/00200-00299.xml @@ -6456,7 +6456,7 @@ P 5 - + ACCURACY_COMBAT 3 diff --git a/L2J_Mobius_03.0_Helios/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_03.0_Helios/dist/game/data/stats/skills/documentation.txt index 76ce8038bf..5b482483d8 100644 --- a/L2J_Mobius_03.0_Helios/dist/game/data/stats/skills/documentation.txt +++ b/L2J_Mobius_03.0_Helios/dist/game/data/stats/skills/documentation.txt @@ -202,6 +202,7 @@ MpRegen: MP Regeneration stat. MpShield: Transfers given percentage of damage as mana damage. Mana Shield. MpVampiricAttack: Absorbs given percentage of mana during attack. Mute: Prevents target from using magical skills. Silence. +NightStatModifier: Modify a specific stat at night time. (l2jmobius) NoblesseBless: Does not remove buffs upon death except itself. OpenChest: Opens a treasure chest. OpenCommonRecipeBook: Shows the common recipe book window. @@ -301,7 +302,6 @@ SpeedLimit: Increase a character's max Speed limit. (l2jmobius) SpModify: Bonus SP stat. Spoil: Spoils a mob activating its extra sweep drop. StatAddForLevel: Adds a fixed amount of a Stat for a specific player level. (l2jmobius) -StatAddForNight: Modify a specific stat at night time. (l2jmobius) StatBonusSkillCritical: Changes skill critical rate to depend on the specified base stat. StatBonusSpeed: Changes Speed stat to depend on the specified base stat. StatByMoveType: Adds stat based on your movement type (standing, running, walking). diff --git a/L2J_Mobius_04.0_GrandCrusade/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_04.0_GrandCrusade/dist/game/data/scripts/handlers/EffectMasterHandler.java index a68823e004..91b037477e 100644 --- a/L2J_Mobius_04.0_GrandCrusade/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_04.0_GrandCrusade/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -236,6 +236,7 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("MpShield", MpShield::new); EffectHandler.getInstance().registerHandler("MpVampiricAttack", MpVampiricAttack::new); EffectHandler.getInstance().registerHandler("Mute", Mute::new); + EffectHandler.getInstance().registerHandler("NightStatModifier", NightStatModifier::new); EffectHandler.getInstance().registerHandler("NoblesseBless", NoblesseBless::new); EffectHandler.getInstance().registerHandler("OpenChest", OpenChest::new); EffectHandler.getInstance().registerHandler("OpenCommonRecipeBook", OpenCommonRecipeBook::new); @@ -337,7 +338,6 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("SpModify", SpModify::new); EffectHandler.getInstance().registerHandler("Spoil", Spoil::new); EffectHandler.getInstance().registerHandler("StatAddForLevel", StatAddForLevel::new); - EffectHandler.getInstance().registerHandler("StatAddForNight", StatAddForNight::new); EffectHandler.getInstance().registerHandler("StatBonusSkillCritical", StatBonusSkillCritical::new); EffectHandler.getInstance().registerHandler("StatBonusSpeed", StatBonusSpeed::new); EffectHandler.getInstance().registerHandler("StatByMoveType", StatByMoveType::new); diff --git a/L2J_Mobius_04.0_GrandCrusade/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java b/L2J_Mobius_04.0_GrandCrusade/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java similarity index 94% rename from L2J_Mobius_04.0_GrandCrusade/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java rename to L2J_Mobius_04.0_GrandCrusade/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java index 55cb0d4924..8dce6e4312 100644 --- a/L2J_Mobius_04.0_GrandCrusade/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java +++ b/L2J_Mobius_04.0_GrandCrusade/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java @@ -39,7 +39,7 @@ import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager; /** * @author Mobius */ -public class StatAddForNight extends AbstractEffect +public class NightStatModifier extends AbstractEffect { private static final AtomicBoolean DAY_TIME = new AtomicBoolean(GameTimeTaskManager.getInstance().isNight()); private static final Set NIGHT_STAT_CHARACTERS = ConcurrentHashMap.newKeySet(); @@ -49,7 +49,7 @@ public class StatAddForNight extends AbstractEffect private final int _amount; protected final StatModifierType _mode; - public StatAddForNight(StatSet params) + public NightStatModifier(StatSet params) { _stat = params.getEnum("stat", Stat.class); _amount = params.getInt("amount"); diff --git a/L2J_Mobius_04.0_GrandCrusade/dist/game/data/stats/skills/00200-00299.xml b/L2J_Mobius_04.0_GrandCrusade/dist/game/data/stats/skills/00200-00299.xml index 49cf106ec0..7d26a4f63c 100644 --- a/L2J_Mobius_04.0_GrandCrusade/dist/game/data/stats/skills/00200-00299.xml +++ b/L2J_Mobius_04.0_GrandCrusade/dist/game/data/stats/skills/00200-00299.xml @@ -6484,7 +6484,7 @@ P 5 - + ACCURACY_COMBAT 3 diff --git a/L2J_Mobius_04.0_GrandCrusade/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_04.0_GrandCrusade/dist/game/data/stats/skills/documentation.txt index e93327520f..64006a6fdf 100644 --- a/L2J_Mobius_04.0_GrandCrusade/dist/game/data/stats/skills/documentation.txt +++ b/L2J_Mobius_04.0_GrandCrusade/dist/game/data/stats/skills/documentation.txt @@ -206,6 +206,7 @@ MpRegen: MP Regeneration stat. MpShield: Transfers given percentage of damage as mana damage. Mana Shield. MpVampiricAttack: Absorbs given percentage of mana during attack. Mute: Prevents target from using magical skills. Silence. +NightStatModifier: Modify a specific stat at night time. (l2jmobius) NoblesseBless: Does not remove buffs upon death except itself. OpenChest: Opens a treasure chest. OpenCommonRecipeBook: Shows the common recipe book window. @@ -306,7 +307,6 @@ SpeedLimit: Increase a character's max Speed limit. (l2jmobius) SpModify: Bonus SP stat. Spoil: Spoils a mob activating its extra sweep drop. StatAddForLevel: Adds a fixed amount of a Stat for a specific player level. (l2jmobius) -StatAddForNight: Modify a specific stat at night time. (l2jmobius) StatBonusSkillCritical: Changes skill critical rate to depend on the specified base stat. StatBonusSpeed: Changes Speed stat to depend on the specified base stat. StatByMoveType: Adds stat based on your movement type (standing, running, walking). diff --git a/L2J_Mobius_05.0_Salvation/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_05.0_Salvation/dist/game/data/scripts/handlers/EffectMasterHandler.java index fdf6478ad9..29c5636326 100644 --- a/L2J_Mobius_05.0_Salvation/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_05.0_Salvation/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -240,6 +240,7 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("MpShield", MpShield::new); EffectHandler.getInstance().registerHandler("MpVampiricAttack", MpVampiricAttack::new); EffectHandler.getInstance().registerHandler("Mute", Mute::new); + EffectHandler.getInstance().registerHandler("NightStatModifier", NightStatModifier::new); EffectHandler.getInstance().registerHandler("NoblesseBless", NoblesseBless::new); EffectHandler.getInstance().registerHandler("OpenChest", OpenChest::new); EffectHandler.getInstance().registerHandler("OpenCommonRecipeBook", OpenCommonRecipeBook::new); @@ -342,7 +343,6 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("SpModify", SpModify::new); EffectHandler.getInstance().registerHandler("Spoil", Spoil::new); EffectHandler.getInstance().registerHandler("StatAddForLevel", StatAddForLevel::new); - EffectHandler.getInstance().registerHandler("StatAddForNight", StatAddForNight::new); EffectHandler.getInstance().registerHandler("StatBonusSkillCritical", StatBonusSkillCritical::new); EffectHandler.getInstance().registerHandler("StatBonusSpeed", StatBonusSpeed::new); EffectHandler.getInstance().registerHandler("StatByMoveType", StatByMoveType::new); diff --git a/L2J_Mobius_05.0_Salvation/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java b/L2J_Mobius_05.0_Salvation/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java new file mode 100644 index 0000000000..8dce6e4312 --- /dev/null +++ b/L2J_Mobius_05.0_Salvation/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java @@ -0,0 +1,130 @@ +/* + * 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.effecthandlers; + +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicBoolean; + +import org.l2jmobius.gameserver.enums.StatModifierType; +import org.l2jmobius.gameserver.model.StatSet; +import org.l2jmobius.gameserver.model.actor.Creature; +import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.events.Containers; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.ListenersContainer; +import org.l2jmobius.gameserver.model.events.impl.OnDayNightChange; +import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; +import org.l2jmobius.gameserver.model.item.instance.Item; +import org.l2jmobius.gameserver.model.skill.Skill; +import org.l2jmobius.gameserver.model.stats.Stat; +import org.l2jmobius.gameserver.network.SystemMessageId; +import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; +import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager; + +/** + * @author Mobius + */ +public class NightStatModifier extends AbstractEffect +{ + private static final AtomicBoolean DAY_TIME = new AtomicBoolean(GameTimeTaskManager.getInstance().isNight()); + private static final Set NIGHT_STAT_CHARACTERS = ConcurrentHashMap.newKeySet(); + private static final int SHADOW_SENSE = 294; + + private final Stat _stat; + private final int _amount; + protected final StatModifierType _mode; + + public NightStatModifier(StatSet params) + { + _stat = params.getEnum("stat", Stat.class); + _amount = params.getInt("amount"); + _mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF); + + // Init a global day-night change listener. + final ListenersContainer container = Containers.Global(); + container.addListener(new ConsumerEventListener(container, EventType.ON_DAY_NIGHT_CHANGE, (OnDayNightChange event) -> onDayNightChange(event), this)); + } + + @Override + public void onStart(Creature effector, Creature effected, Skill skill, Item item) + { + NIGHT_STAT_CHARACTERS.add(effected); + } + + @Override + public void onExit(Creature effector, Creature effected, Skill skill) + { + NIGHT_STAT_CHARACTERS.remove(effected); + } + + @Override + public void pump(Creature effected, Skill skill) + { + // Not night. + if (!GameTimeTaskManager.getInstance().isNight()) + { + return; + } + + // Apply stat. + switch (_mode) + { + case DIFF: + { + effected.getStat().mergeAdd(_stat, _amount); + break; + } + case PER: + { + effected.getStat().mergeMul(_stat, (_amount / 100) + 1); + break; + } + } + } + + public void onDayNightChange(OnDayNightChange event) + { + synchronized (DAY_TIME) + { + final boolean isNight = event.isNight(); + + // Run only once per daytime change. + if (isNight == DAY_TIME.get()) + { + return; + } + DAY_TIME.set(isNight); + + // System message for Shadow Sense. + final SystemMessage msg = new SystemMessage(isNight ? SystemMessageId.IT_IS_NOW_MIDNIGHT_AND_THE_EFFECT_OF_S1_CAN_BE_FELT : SystemMessageId.IT_IS_DAWN_AND_THE_EFFECT_OF_S1_WILL_NOW_DISAPPEAR); + msg.addSkillName(SHADOW_SENSE); + + for (Creature creature : NIGHT_STAT_CHARACTERS) + { + // Pump again. + creature.getStat().recalculateStats(true); + + // Send Shadow Sense message when player has skill. + if (creature.getKnownSkill(SHADOW_SENSE) != null) + { + creature.sendPacket(msg); + } + } + } + } +} diff --git a/L2J_Mobius_05.0_Salvation/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java b/L2J_Mobius_05.0_Salvation/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java deleted file mode 100644 index 55cb0d4924..0000000000 --- a/L2J_Mobius_05.0_Salvation/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package handlers.effecthandlers; - -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicBoolean; - -import org.l2jmobius.gameserver.enums.StatModifierType; -import org.l2jmobius.gameserver.model.StatSet; -import org.l2jmobius.gameserver.model.actor.Creature; -import org.l2jmobius.gameserver.model.effects.AbstractEffect; -import org.l2jmobius.gameserver.model.events.Containers; -import org.l2jmobius.gameserver.model.events.EventType; -import org.l2jmobius.gameserver.model.events.ListenersContainer; -import org.l2jmobius.gameserver.model.events.impl.OnDayNightChange; -import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; -import org.l2jmobius.gameserver.model.item.instance.Item; -import org.l2jmobius.gameserver.model.skill.Skill; -import org.l2jmobius.gameserver.model.stats.Stat; -import org.l2jmobius.gameserver.network.SystemMessageId; -import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; -import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager; - -/** - * @author Mobius - */ -public class StatAddForNight extends AbstractEffect -{ - private static final AtomicBoolean DAY_TIME = new AtomicBoolean(GameTimeTaskManager.getInstance().isNight()); - private static final Set NIGHT_STAT_CHARACTERS = ConcurrentHashMap.newKeySet(); - private static final int SHADOW_SENSE = 294; - - private final Stat _stat; - private final int _amount; - protected final StatModifierType _mode; - - public StatAddForNight(StatSet params) - { - _stat = params.getEnum("stat", Stat.class); - _amount = params.getInt("amount"); - _mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF); - - // Init a global day-night change listener. - final ListenersContainer container = Containers.Global(); - container.addListener(new ConsumerEventListener(container, EventType.ON_DAY_NIGHT_CHANGE, (OnDayNightChange event) -> onDayNightChange(event), this)); - } - - @Override - public void onStart(Creature effector, Creature effected, Skill skill, Item item) - { - NIGHT_STAT_CHARACTERS.add(effected); - } - - @Override - public void onExit(Creature effector, Creature effected, Skill skill) - { - NIGHT_STAT_CHARACTERS.remove(effected); - } - - @Override - public void pump(Creature effected, Skill skill) - { - // Not night. - if (!GameTimeTaskManager.getInstance().isNight()) - { - return; - } - - // Apply stat. - switch (_mode) - { - case DIFF: - { - effected.getStat().mergeAdd(_stat, _amount); - break; - } - case PER: - { - effected.getStat().mergeMul(_stat, (_amount / 100) + 1); - break; - } - } - } - - public void onDayNightChange(OnDayNightChange event) - { - synchronized (DAY_TIME) - { - final boolean isNight = event.isNight(); - - // Run only once per daytime change. - if (isNight == DAY_TIME.get()) - { - return; - } - DAY_TIME.set(isNight); - - // System message for Shadow Sense. - final SystemMessage msg = new SystemMessage(isNight ? SystemMessageId.IT_IS_NOW_MIDNIGHT_AND_THE_EFFECT_OF_S1_CAN_BE_FELT : SystemMessageId.IT_IS_DAWN_AND_THE_EFFECT_OF_S1_WILL_NOW_DISAPPEAR); - msg.addSkillName(SHADOW_SENSE); - - for (Creature creature : NIGHT_STAT_CHARACTERS) - { - // Pump again. - creature.getStat().recalculateStats(true); - - // Send Shadow Sense message when player has skill. - if (creature.getKnownSkill(SHADOW_SENSE) != null) - { - creature.sendPacket(msg); - } - } - } - } -} diff --git a/L2J_Mobius_05.0_Salvation/dist/game/data/stats/skills/00200-00299.xml b/L2J_Mobius_05.0_Salvation/dist/game/data/stats/skills/00200-00299.xml index cfe1bcfaa7..2f6da43f70 100644 --- a/L2J_Mobius_05.0_Salvation/dist/game/data/stats/skills/00200-00299.xml +++ b/L2J_Mobius_05.0_Salvation/dist/game/data/stats/skills/00200-00299.xml @@ -6484,7 +6484,7 @@ P 5 - + ACCURACY_COMBAT 3 diff --git a/L2J_Mobius_05.0_Salvation/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_05.0_Salvation/dist/game/data/stats/skills/documentation.txt index 5c266ec362..e7b016e4f3 100644 --- a/L2J_Mobius_05.0_Salvation/dist/game/data/stats/skills/documentation.txt +++ b/L2J_Mobius_05.0_Salvation/dist/game/data/stats/skills/documentation.txt @@ -210,6 +210,7 @@ MpRegen: MP Regeneration stat. MpShield: Transfers given percentage of damage as mana damage. Mana Shield. MpVampiricAttack: Absorbs given percentage of mana during attack. Mute: Prevents target from using magical skills. Silence. +NightStatModifier: Modify a specific stat at night time. (l2jmobius) NoblesseBless: Does not remove buffs upon death except itself. OpenChest: Opens a treasure chest. OpenCommonRecipeBook: Shows the common recipe book window. @@ -311,7 +312,6 @@ SpeedLimit: Increase a character's max Speed limit. (l2jmobius) SpModify: Bonus SP stat. Spoil: Spoils a mob activating its extra sweep drop. StatAddForLevel: Adds a fixed amount of a Stat for a specific player level. (l2jmobius) -StatAddForNight: Modify a specific stat at night time. (l2jmobius) StatBonusSkillCritical: Changes skill critical rate to depend on the specified base stat. StatBonusSpeed: Changes Speed stat to depend on the specified base stat. StatByMoveType: Adds stat based on your movement type (standing, running, walking). diff --git a/L2J_Mobius_05.5_EtinasFate/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_05.5_EtinasFate/dist/game/data/scripts/handlers/EffectMasterHandler.java index 869d340053..f2449adee5 100644 --- a/L2J_Mobius_05.5_EtinasFate/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_05.5_EtinasFate/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -241,6 +241,7 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("MpShield", MpShield::new); EffectHandler.getInstance().registerHandler("MpVampiricAttack", MpVampiricAttack::new); EffectHandler.getInstance().registerHandler("Mute", Mute::new); + EffectHandler.getInstance().registerHandler("NightStatModifier", NightStatModifier::new); EffectHandler.getInstance().registerHandler("NoblesseBless", NoblesseBless::new); EffectHandler.getInstance().registerHandler("OpenChest", OpenChest::new); EffectHandler.getInstance().registerHandler("OpenCommonRecipeBook", OpenCommonRecipeBook::new); @@ -343,7 +344,6 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("SpModify", SpModify::new); EffectHandler.getInstance().registerHandler("Spoil", Spoil::new); EffectHandler.getInstance().registerHandler("StatAddForLevel", StatAddForLevel::new); - EffectHandler.getInstance().registerHandler("StatAddForNight", StatAddForNight::new); EffectHandler.getInstance().registerHandler("StatBonusSkillCritical", StatBonusSkillCritical::new); EffectHandler.getInstance().registerHandler("StatBonusSpeed", StatBonusSpeed::new); EffectHandler.getInstance().registerHandler("StatByMoveType", StatByMoveType::new); diff --git a/L2J_Mobius_05.5_EtinasFate/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java b/L2J_Mobius_05.5_EtinasFate/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java new file mode 100644 index 0000000000..8dce6e4312 --- /dev/null +++ b/L2J_Mobius_05.5_EtinasFate/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java @@ -0,0 +1,130 @@ +/* + * 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.effecthandlers; + +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicBoolean; + +import org.l2jmobius.gameserver.enums.StatModifierType; +import org.l2jmobius.gameserver.model.StatSet; +import org.l2jmobius.gameserver.model.actor.Creature; +import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.events.Containers; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.ListenersContainer; +import org.l2jmobius.gameserver.model.events.impl.OnDayNightChange; +import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; +import org.l2jmobius.gameserver.model.item.instance.Item; +import org.l2jmobius.gameserver.model.skill.Skill; +import org.l2jmobius.gameserver.model.stats.Stat; +import org.l2jmobius.gameserver.network.SystemMessageId; +import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; +import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager; + +/** + * @author Mobius + */ +public class NightStatModifier extends AbstractEffect +{ + private static final AtomicBoolean DAY_TIME = new AtomicBoolean(GameTimeTaskManager.getInstance().isNight()); + private static final Set NIGHT_STAT_CHARACTERS = ConcurrentHashMap.newKeySet(); + private static final int SHADOW_SENSE = 294; + + private final Stat _stat; + private final int _amount; + protected final StatModifierType _mode; + + public NightStatModifier(StatSet params) + { + _stat = params.getEnum("stat", Stat.class); + _amount = params.getInt("amount"); + _mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF); + + // Init a global day-night change listener. + final ListenersContainer container = Containers.Global(); + container.addListener(new ConsumerEventListener(container, EventType.ON_DAY_NIGHT_CHANGE, (OnDayNightChange event) -> onDayNightChange(event), this)); + } + + @Override + public void onStart(Creature effector, Creature effected, Skill skill, Item item) + { + NIGHT_STAT_CHARACTERS.add(effected); + } + + @Override + public void onExit(Creature effector, Creature effected, Skill skill) + { + NIGHT_STAT_CHARACTERS.remove(effected); + } + + @Override + public void pump(Creature effected, Skill skill) + { + // Not night. + if (!GameTimeTaskManager.getInstance().isNight()) + { + return; + } + + // Apply stat. + switch (_mode) + { + case DIFF: + { + effected.getStat().mergeAdd(_stat, _amount); + break; + } + case PER: + { + effected.getStat().mergeMul(_stat, (_amount / 100) + 1); + break; + } + } + } + + public void onDayNightChange(OnDayNightChange event) + { + synchronized (DAY_TIME) + { + final boolean isNight = event.isNight(); + + // Run only once per daytime change. + if (isNight == DAY_TIME.get()) + { + return; + } + DAY_TIME.set(isNight); + + // System message for Shadow Sense. + final SystemMessage msg = new SystemMessage(isNight ? SystemMessageId.IT_IS_NOW_MIDNIGHT_AND_THE_EFFECT_OF_S1_CAN_BE_FELT : SystemMessageId.IT_IS_DAWN_AND_THE_EFFECT_OF_S1_WILL_NOW_DISAPPEAR); + msg.addSkillName(SHADOW_SENSE); + + for (Creature creature : NIGHT_STAT_CHARACTERS) + { + // Pump again. + creature.getStat().recalculateStats(true); + + // Send Shadow Sense message when player has skill. + if (creature.getKnownSkill(SHADOW_SENSE) != null) + { + creature.sendPacket(msg); + } + } + } + } +} diff --git a/L2J_Mobius_05.5_EtinasFate/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java b/L2J_Mobius_05.5_EtinasFate/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java deleted file mode 100644 index 55cb0d4924..0000000000 --- a/L2J_Mobius_05.5_EtinasFate/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package handlers.effecthandlers; - -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicBoolean; - -import org.l2jmobius.gameserver.enums.StatModifierType; -import org.l2jmobius.gameserver.model.StatSet; -import org.l2jmobius.gameserver.model.actor.Creature; -import org.l2jmobius.gameserver.model.effects.AbstractEffect; -import org.l2jmobius.gameserver.model.events.Containers; -import org.l2jmobius.gameserver.model.events.EventType; -import org.l2jmobius.gameserver.model.events.ListenersContainer; -import org.l2jmobius.gameserver.model.events.impl.OnDayNightChange; -import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; -import org.l2jmobius.gameserver.model.item.instance.Item; -import org.l2jmobius.gameserver.model.skill.Skill; -import org.l2jmobius.gameserver.model.stats.Stat; -import org.l2jmobius.gameserver.network.SystemMessageId; -import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; -import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager; - -/** - * @author Mobius - */ -public class StatAddForNight extends AbstractEffect -{ - private static final AtomicBoolean DAY_TIME = new AtomicBoolean(GameTimeTaskManager.getInstance().isNight()); - private static final Set NIGHT_STAT_CHARACTERS = ConcurrentHashMap.newKeySet(); - private static final int SHADOW_SENSE = 294; - - private final Stat _stat; - private final int _amount; - protected final StatModifierType _mode; - - public StatAddForNight(StatSet params) - { - _stat = params.getEnum("stat", Stat.class); - _amount = params.getInt("amount"); - _mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF); - - // Init a global day-night change listener. - final ListenersContainer container = Containers.Global(); - container.addListener(new ConsumerEventListener(container, EventType.ON_DAY_NIGHT_CHANGE, (OnDayNightChange event) -> onDayNightChange(event), this)); - } - - @Override - public void onStart(Creature effector, Creature effected, Skill skill, Item item) - { - NIGHT_STAT_CHARACTERS.add(effected); - } - - @Override - public void onExit(Creature effector, Creature effected, Skill skill) - { - NIGHT_STAT_CHARACTERS.remove(effected); - } - - @Override - public void pump(Creature effected, Skill skill) - { - // Not night. - if (!GameTimeTaskManager.getInstance().isNight()) - { - return; - } - - // Apply stat. - switch (_mode) - { - case DIFF: - { - effected.getStat().mergeAdd(_stat, _amount); - break; - } - case PER: - { - effected.getStat().mergeMul(_stat, (_amount / 100) + 1); - break; - } - } - } - - public void onDayNightChange(OnDayNightChange event) - { - synchronized (DAY_TIME) - { - final boolean isNight = event.isNight(); - - // Run only once per daytime change. - if (isNight == DAY_TIME.get()) - { - return; - } - DAY_TIME.set(isNight); - - // System message for Shadow Sense. - final SystemMessage msg = new SystemMessage(isNight ? SystemMessageId.IT_IS_NOW_MIDNIGHT_AND_THE_EFFECT_OF_S1_CAN_BE_FELT : SystemMessageId.IT_IS_DAWN_AND_THE_EFFECT_OF_S1_WILL_NOW_DISAPPEAR); - msg.addSkillName(SHADOW_SENSE); - - for (Creature creature : NIGHT_STAT_CHARACTERS) - { - // Pump again. - creature.getStat().recalculateStats(true); - - // Send Shadow Sense message when player has skill. - if (creature.getKnownSkill(SHADOW_SENSE) != null) - { - creature.sendPacket(msg); - } - } - } - } -} diff --git a/L2J_Mobius_05.5_EtinasFate/dist/game/data/stats/skills/00200-00299.xml b/L2J_Mobius_05.5_EtinasFate/dist/game/data/stats/skills/00200-00299.xml index 804fa829bf..0e0c56fe26 100644 --- a/L2J_Mobius_05.5_EtinasFate/dist/game/data/stats/skills/00200-00299.xml +++ b/L2J_Mobius_05.5_EtinasFate/dist/game/data/stats/skills/00200-00299.xml @@ -6484,7 +6484,7 @@ P 5 - + ACCURACY_COMBAT 3 diff --git a/L2J_Mobius_05.5_EtinasFate/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_05.5_EtinasFate/dist/game/data/stats/skills/documentation.txt index e4b25a54d9..489603b1a9 100644 --- a/L2J_Mobius_05.5_EtinasFate/dist/game/data/stats/skills/documentation.txt +++ b/L2J_Mobius_05.5_EtinasFate/dist/game/data/stats/skills/documentation.txt @@ -211,6 +211,7 @@ MpRegen: MP Regeneration stat. MpShield: Transfers given percentage of damage as mana damage. Mana Shield. MpVampiricAttack: Absorbs given percentage of mana during attack. Mute: Prevents target from using magical skills. Silence. +NightStatModifier: Modify a specific stat at night time. (l2jmobius) NoblesseBless: Does not remove buffs upon death except itself. OpenChest: Opens a treasure chest. OpenCommonRecipeBook: Shows the common recipe book window. @@ -312,7 +313,6 @@ SpeedLimit: Increase a character's max Speed limit. (l2jmobius) SpModify: Bonus SP stat. Spoil: Spoils a mob activating its extra sweep drop. StatAddForLevel: Adds a fixed amount of a Stat for a specific player level. (l2jmobius) -StatAddForNight: Modify a specific stat at night time. (l2jmobius) StatBonusSkillCritical: Changes skill critical rate to depend on the specified base stat. StatBonusSpeed: Changes Speed stat to depend on the specified base stat. StatByMoveType: Adds stat based on your movement type (standing, running, walking). diff --git a/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/handlers/EffectMasterHandler.java index 869d340053..f2449adee5 100644 --- a/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -241,6 +241,7 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("MpShield", MpShield::new); EffectHandler.getInstance().registerHandler("MpVampiricAttack", MpVampiricAttack::new); EffectHandler.getInstance().registerHandler("Mute", Mute::new); + EffectHandler.getInstance().registerHandler("NightStatModifier", NightStatModifier::new); EffectHandler.getInstance().registerHandler("NoblesseBless", NoblesseBless::new); EffectHandler.getInstance().registerHandler("OpenChest", OpenChest::new); EffectHandler.getInstance().registerHandler("OpenCommonRecipeBook", OpenCommonRecipeBook::new); @@ -343,7 +344,6 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("SpModify", SpModify::new); EffectHandler.getInstance().registerHandler("Spoil", Spoil::new); EffectHandler.getInstance().registerHandler("StatAddForLevel", StatAddForLevel::new); - EffectHandler.getInstance().registerHandler("StatAddForNight", StatAddForNight::new); EffectHandler.getInstance().registerHandler("StatBonusSkillCritical", StatBonusSkillCritical::new); EffectHandler.getInstance().registerHandler("StatBonusSpeed", StatBonusSpeed::new); EffectHandler.getInstance().registerHandler("StatByMoveType", StatByMoveType::new); diff --git a/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java b/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java new file mode 100644 index 0000000000..8dce6e4312 --- /dev/null +++ b/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java @@ -0,0 +1,130 @@ +/* + * 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.effecthandlers; + +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicBoolean; + +import org.l2jmobius.gameserver.enums.StatModifierType; +import org.l2jmobius.gameserver.model.StatSet; +import org.l2jmobius.gameserver.model.actor.Creature; +import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.events.Containers; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.ListenersContainer; +import org.l2jmobius.gameserver.model.events.impl.OnDayNightChange; +import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; +import org.l2jmobius.gameserver.model.item.instance.Item; +import org.l2jmobius.gameserver.model.skill.Skill; +import org.l2jmobius.gameserver.model.stats.Stat; +import org.l2jmobius.gameserver.network.SystemMessageId; +import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; +import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager; + +/** + * @author Mobius + */ +public class NightStatModifier extends AbstractEffect +{ + private static final AtomicBoolean DAY_TIME = new AtomicBoolean(GameTimeTaskManager.getInstance().isNight()); + private static final Set NIGHT_STAT_CHARACTERS = ConcurrentHashMap.newKeySet(); + private static final int SHADOW_SENSE = 294; + + private final Stat _stat; + private final int _amount; + protected final StatModifierType _mode; + + public NightStatModifier(StatSet params) + { + _stat = params.getEnum("stat", Stat.class); + _amount = params.getInt("amount"); + _mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF); + + // Init a global day-night change listener. + final ListenersContainer container = Containers.Global(); + container.addListener(new ConsumerEventListener(container, EventType.ON_DAY_NIGHT_CHANGE, (OnDayNightChange event) -> onDayNightChange(event), this)); + } + + @Override + public void onStart(Creature effector, Creature effected, Skill skill, Item item) + { + NIGHT_STAT_CHARACTERS.add(effected); + } + + @Override + public void onExit(Creature effector, Creature effected, Skill skill) + { + NIGHT_STAT_CHARACTERS.remove(effected); + } + + @Override + public void pump(Creature effected, Skill skill) + { + // Not night. + if (!GameTimeTaskManager.getInstance().isNight()) + { + return; + } + + // Apply stat. + switch (_mode) + { + case DIFF: + { + effected.getStat().mergeAdd(_stat, _amount); + break; + } + case PER: + { + effected.getStat().mergeMul(_stat, (_amount / 100) + 1); + break; + } + } + } + + public void onDayNightChange(OnDayNightChange event) + { + synchronized (DAY_TIME) + { + final boolean isNight = event.isNight(); + + // Run only once per daytime change. + if (isNight == DAY_TIME.get()) + { + return; + } + DAY_TIME.set(isNight); + + // System message for Shadow Sense. + final SystemMessage msg = new SystemMessage(isNight ? SystemMessageId.IT_IS_NOW_MIDNIGHT_AND_THE_EFFECT_OF_S1_CAN_BE_FELT : SystemMessageId.IT_IS_DAWN_AND_THE_EFFECT_OF_S1_WILL_NOW_DISAPPEAR); + msg.addSkillName(SHADOW_SENSE); + + for (Creature creature : NIGHT_STAT_CHARACTERS) + { + // Pump again. + creature.getStat().recalculateStats(true); + + // Send Shadow Sense message when player has skill. + if (creature.getKnownSkill(SHADOW_SENSE) != null) + { + creature.sendPacket(msg); + } + } + } + } +} diff --git a/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java b/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java deleted file mode 100644 index 55cb0d4924..0000000000 --- a/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package handlers.effecthandlers; - -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicBoolean; - -import org.l2jmobius.gameserver.enums.StatModifierType; -import org.l2jmobius.gameserver.model.StatSet; -import org.l2jmobius.gameserver.model.actor.Creature; -import org.l2jmobius.gameserver.model.effects.AbstractEffect; -import org.l2jmobius.gameserver.model.events.Containers; -import org.l2jmobius.gameserver.model.events.EventType; -import org.l2jmobius.gameserver.model.events.ListenersContainer; -import org.l2jmobius.gameserver.model.events.impl.OnDayNightChange; -import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; -import org.l2jmobius.gameserver.model.item.instance.Item; -import org.l2jmobius.gameserver.model.skill.Skill; -import org.l2jmobius.gameserver.model.stats.Stat; -import org.l2jmobius.gameserver.network.SystemMessageId; -import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; -import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager; - -/** - * @author Mobius - */ -public class StatAddForNight extends AbstractEffect -{ - private static final AtomicBoolean DAY_TIME = new AtomicBoolean(GameTimeTaskManager.getInstance().isNight()); - private static final Set NIGHT_STAT_CHARACTERS = ConcurrentHashMap.newKeySet(); - private static final int SHADOW_SENSE = 294; - - private final Stat _stat; - private final int _amount; - protected final StatModifierType _mode; - - public StatAddForNight(StatSet params) - { - _stat = params.getEnum("stat", Stat.class); - _amount = params.getInt("amount"); - _mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF); - - // Init a global day-night change listener. - final ListenersContainer container = Containers.Global(); - container.addListener(new ConsumerEventListener(container, EventType.ON_DAY_NIGHT_CHANGE, (OnDayNightChange event) -> onDayNightChange(event), this)); - } - - @Override - public void onStart(Creature effector, Creature effected, Skill skill, Item item) - { - NIGHT_STAT_CHARACTERS.add(effected); - } - - @Override - public void onExit(Creature effector, Creature effected, Skill skill) - { - NIGHT_STAT_CHARACTERS.remove(effected); - } - - @Override - public void pump(Creature effected, Skill skill) - { - // Not night. - if (!GameTimeTaskManager.getInstance().isNight()) - { - return; - } - - // Apply stat. - switch (_mode) - { - case DIFF: - { - effected.getStat().mergeAdd(_stat, _amount); - break; - } - case PER: - { - effected.getStat().mergeMul(_stat, (_amount / 100) + 1); - break; - } - } - } - - public void onDayNightChange(OnDayNightChange event) - { - synchronized (DAY_TIME) - { - final boolean isNight = event.isNight(); - - // Run only once per daytime change. - if (isNight == DAY_TIME.get()) - { - return; - } - DAY_TIME.set(isNight); - - // System message for Shadow Sense. - final SystemMessage msg = new SystemMessage(isNight ? SystemMessageId.IT_IS_NOW_MIDNIGHT_AND_THE_EFFECT_OF_S1_CAN_BE_FELT : SystemMessageId.IT_IS_DAWN_AND_THE_EFFECT_OF_S1_WILL_NOW_DISAPPEAR); - msg.addSkillName(SHADOW_SENSE); - - for (Creature creature : NIGHT_STAT_CHARACTERS) - { - // Pump again. - creature.getStat().recalculateStats(true); - - // Send Shadow Sense message when player has skill. - if (creature.getKnownSkill(SHADOW_SENSE) != null) - { - creature.sendPacket(msg); - } - } - } - } -} diff --git a/L2J_Mobius_06.0_Fafurion/dist/game/data/stats/skills/00200-00299.xml b/L2J_Mobius_06.0_Fafurion/dist/game/data/stats/skills/00200-00299.xml index ce2c5f2e6d..1e47175977 100644 --- a/L2J_Mobius_06.0_Fafurion/dist/game/data/stats/skills/00200-00299.xml +++ b/L2J_Mobius_06.0_Fafurion/dist/game/data/stats/skills/00200-00299.xml @@ -6507,7 +6507,7 @@ P 5 - + ACCURACY_COMBAT 3 diff --git a/L2J_Mobius_06.0_Fafurion/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_06.0_Fafurion/dist/game/data/stats/skills/documentation.txt index e4b25a54d9..489603b1a9 100644 --- a/L2J_Mobius_06.0_Fafurion/dist/game/data/stats/skills/documentation.txt +++ b/L2J_Mobius_06.0_Fafurion/dist/game/data/stats/skills/documentation.txt @@ -211,6 +211,7 @@ MpRegen: MP Regeneration stat. MpShield: Transfers given percentage of damage as mana damage. Mana Shield. MpVampiricAttack: Absorbs given percentage of mana during attack. Mute: Prevents target from using magical skills. Silence. +NightStatModifier: Modify a specific stat at night time. (l2jmobius) NoblesseBless: Does not remove buffs upon death except itself. OpenChest: Opens a treasure chest. OpenCommonRecipeBook: Shows the common recipe book window. @@ -312,7 +313,6 @@ SpeedLimit: Increase a character's max Speed limit. (l2jmobius) SpModify: Bonus SP stat. Spoil: Spoils a mob activating its extra sweep drop. StatAddForLevel: Adds a fixed amount of a Stat for a specific player level. (l2jmobius) -StatAddForNight: Modify a specific stat at night time. (l2jmobius) StatBonusSkillCritical: Changes skill critical rate to depend on the specified base stat. StatBonusSpeed: Changes Speed stat to depend on the specified base stat. StatByMoveType: Adds stat based on your movement type (standing, running, walking). diff --git a/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/handlers/EffectMasterHandler.java index 89dd45cc09..29641d4d68 100644 --- a/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -241,6 +241,7 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("MpShield", MpShield::new); EffectHandler.getInstance().registerHandler("MpVampiricAttack", MpVampiricAttack::new); EffectHandler.getInstance().registerHandler("Mute", Mute::new); + EffectHandler.getInstance().registerHandler("NightStatModifier", NightStatModifier::new); EffectHandler.getInstance().registerHandler("NoblesseBless", NoblesseBless::new); EffectHandler.getInstance().registerHandler("OpenChest", OpenChest::new); EffectHandler.getInstance().registerHandler("OpenCommonRecipeBook", OpenCommonRecipeBook::new); @@ -343,7 +344,6 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("SpModify", SpModify::new); EffectHandler.getInstance().registerHandler("Spoil", Spoil::new); EffectHandler.getInstance().registerHandler("StatAddForLevel", StatAddForLevel::new); - EffectHandler.getInstance().registerHandler("StatAddForNight", StatAddForNight::new); EffectHandler.getInstance().registerHandler("StatBonusSkillCritical", StatBonusSkillCritical::new); EffectHandler.getInstance().registerHandler("StatBonusSpeed", StatBonusSpeed::new); EffectHandler.getInstance().registerHandler("StatByMoveType", StatByMoveType::new); diff --git a/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java b/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java new file mode 100644 index 0000000000..8dce6e4312 --- /dev/null +++ b/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java @@ -0,0 +1,130 @@ +/* + * 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.effecthandlers; + +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicBoolean; + +import org.l2jmobius.gameserver.enums.StatModifierType; +import org.l2jmobius.gameserver.model.StatSet; +import org.l2jmobius.gameserver.model.actor.Creature; +import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.events.Containers; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.ListenersContainer; +import org.l2jmobius.gameserver.model.events.impl.OnDayNightChange; +import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; +import org.l2jmobius.gameserver.model.item.instance.Item; +import org.l2jmobius.gameserver.model.skill.Skill; +import org.l2jmobius.gameserver.model.stats.Stat; +import org.l2jmobius.gameserver.network.SystemMessageId; +import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; +import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager; + +/** + * @author Mobius + */ +public class NightStatModifier extends AbstractEffect +{ + private static final AtomicBoolean DAY_TIME = new AtomicBoolean(GameTimeTaskManager.getInstance().isNight()); + private static final Set NIGHT_STAT_CHARACTERS = ConcurrentHashMap.newKeySet(); + private static final int SHADOW_SENSE = 294; + + private final Stat _stat; + private final int _amount; + protected final StatModifierType _mode; + + public NightStatModifier(StatSet params) + { + _stat = params.getEnum("stat", Stat.class); + _amount = params.getInt("amount"); + _mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF); + + // Init a global day-night change listener. + final ListenersContainer container = Containers.Global(); + container.addListener(new ConsumerEventListener(container, EventType.ON_DAY_NIGHT_CHANGE, (OnDayNightChange event) -> onDayNightChange(event), this)); + } + + @Override + public void onStart(Creature effector, Creature effected, Skill skill, Item item) + { + NIGHT_STAT_CHARACTERS.add(effected); + } + + @Override + public void onExit(Creature effector, Creature effected, Skill skill) + { + NIGHT_STAT_CHARACTERS.remove(effected); + } + + @Override + public void pump(Creature effected, Skill skill) + { + // Not night. + if (!GameTimeTaskManager.getInstance().isNight()) + { + return; + } + + // Apply stat. + switch (_mode) + { + case DIFF: + { + effected.getStat().mergeAdd(_stat, _amount); + break; + } + case PER: + { + effected.getStat().mergeMul(_stat, (_amount / 100) + 1); + break; + } + } + } + + public void onDayNightChange(OnDayNightChange event) + { + synchronized (DAY_TIME) + { + final boolean isNight = event.isNight(); + + // Run only once per daytime change. + if (isNight == DAY_TIME.get()) + { + return; + } + DAY_TIME.set(isNight); + + // System message for Shadow Sense. + final SystemMessage msg = new SystemMessage(isNight ? SystemMessageId.IT_IS_NOW_MIDNIGHT_AND_THE_EFFECT_OF_S1_CAN_BE_FELT : SystemMessageId.IT_IS_DAWN_AND_THE_EFFECT_OF_S1_WILL_NOW_DISAPPEAR); + msg.addSkillName(SHADOW_SENSE); + + for (Creature creature : NIGHT_STAT_CHARACTERS) + { + // Pump again. + creature.getStat().recalculateStats(true); + + // Send Shadow Sense message when player has skill. + if (creature.getKnownSkill(SHADOW_SENSE) != null) + { + creature.sendPacket(msg); + } + } + } + } +} diff --git a/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java b/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java deleted file mode 100644 index 55cb0d4924..0000000000 --- a/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package handlers.effecthandlers; - -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicBoolean; - -import org.l2jmobius.gameserver.enums.StatModifierType; -import org.l2jmobius.gameserver.model.StatSet; -import org.l2jmobius.gameserver.model.actor.Creature; -import org.l2jmobius.gameserver.model.effects.AbstractEffect; -import org.l2jmobius.gameserver.model.events.Containers; -import org.l2jmobius.gameserver.model.events.EventType; -import org.l2jmobius.gameserver.model.events.ListenersContainer; -import org.l2jmobius.gameserver.model.events.impl.OnDayNightChange; -import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; -import org.l2jmobius.gameserver.model.item.instance.Item; -import org.l2jmobius.gameserver.model.skill.Skill; -import org.l2jmobius.gameserver.model.stats.Stat; -import org.l2jmobius.gameserver.network.SystemMessageId; -import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; -import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager; - -/** - * @author Mobius - */ -public class StatAddForNight extends AbstractEffect -{ - private static final AtomicBoolean DAY_TIME = new AtomicBoolean(GameTimeTaskManager.getInstance().isNight()); - private static final Set NIGHT_STAT_CHARACTERS = ConcurrentHashMap.newKeySet(); - private static final int SHADOW_SENSE = 294; - - private final Stat _stat; - private final int _amount; - protected final StatModifierType _mode; - - public StatAddForNight(StatSet params) - { - _stat = params.getEnum("stat", Stat.class); - _amount = params.getInt("amount"); - _mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF); - - // Init a global day-night change listener. - final ListenersContainer container = Containers.Global(); - container.addListener(new ConsumerEventListener(container, EventType.ON_DAY_NIGHT_CHANGE, (OnDayNightChange event) -> onDayNightChange(event), this)); - } - - @Override - public void onStart(Creature effector, Creature effected, Skill skill, Item item) - { - NIGHT_STAT_CHARACTERS.add(effected); - } - - @Override - public void onExit(Creature effector, Creature effected, Skill skill) - { - NIGHT_STAT_CHARACTERS.remove(effected); - } - - @Override - public void pump(Creature effected, Skill skill) - { - // Not night. - if (!GameTimeTaskManager.getInstance().isNight()) - { - return; - } - - // Apply stat. - switch (_mode) - { - case DIFF: - { - effected.getStat().mergeAdd(_stat, _amount); - break; - } - case PER: - { - effected.getStat().mergeMul(_stat, (_amount / 100) + 1); - break; - } - } - } - - public void onDayNightChange(OnDayNightChange event) - { - synchronized (DAY_TIME) - { - final boolean isNight = event.isNight(); - - // Run only once per daytime change. - if (isNight == DAY_TIME.get()) - { - return; - } - DAY_TIME.set(isNight); - - // System message for Shadow Sense. - final SystemMessage msg = new SystemMessage(isNight ? SystemMessageId.IT_IS_NOW_MIDNIGHT_AND_THE_EFFECT_OF_S1_CAN_BE_FELT : SystemMessageId.IT_IS_DAWN_AND_THE_EFFECT_OF_S1_WILL_NOW_DISAPPEAR); - msg.addSkillName(SHADOW_SENSE); - - for (Creature creature : NIGHT_STAT_CHARACTERS) - { - // Pump again. - creature.getStat().recalculateStats(true); - - // Send Shadow Sense message when player has skill. - if (creature.getKnownSkill(SHADOW_SENSE) != null) - { - creature.sendPacket(msg); - } - } - } - } -} diff --git a/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/stats/skills/00200-00299.xml b/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/stats/skills/00200-00299.xml index 7e977a93b1..bdffbe74a4 100644 --- a/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/stats/skills/00200-00299.xml +++ b/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/stats/skills/00200-00299.xml @@ -6490,7 +6490,7 @@ P 5 - + ACCURACY_COMBAT 3 diff --git a/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/stats/skills/documentation.txt index eb8a490a97..30b7b08171 100644 --- a/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/stats/skills/documentation.txt +++ b/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/stats/skills/documentation.txt @@ -211,6 +211,7 @@ MpRegen: MP Regeneration stat. MpShield: Transfers given percentage of damage as mana damage. Mana Shield. MpVampiricAttack: Absorbs given percentage of mana during attack. Mute: Prevents target from using magical skills. Silence. +NightStatModifier: Modify a specific stat at night time. (l2jmobius) NoblesseBless: Does not remove buffs upon death except itself. OpenChest: Opens a treasure chest. OpenCommonRecipeBook: Shows the common recipe book window. @@ -311,7 +312,6 @@ SpeedLimit: Increase a character's max Speed limit. (l2jmobius) SpModify: Bonus SP stat. Spoil: Spoils a mob activating its extra sweep drop. StatAddForLevel: Adds a fixed amount of a Stat for a specific player level. (l2jmobius) -StatAddForNight: Modify a specific stat at night time. (l2jmobius) StatBonusSkillCritical: Changes skill critical rate to depend on the specified base stat. StatBonusSpeed: Changes Speed stat to depend on the specified base stat. StatByMoveType: Adds stat based on your movement type (standing, running, walking). diff --git a/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/handlers/EffectMasterHandler.java index 4ed6b12687..11906e68e9 100644 --- a/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -242,6 +242,7 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("MpShield", MpShield::new); EffectHandler.getInstance().registerHandler("MpVampiricAttack", MpVampiricAttack::new); EffectHandler.getInstance().registerHandler("Mute", Mute::new); + EffectHandler.getInstance().registerHandler("NightStatModifier", NightStatModifier::new); EffectHandler.getInstance().registerHandler("NoblesseBless", NoblesseBless::new); EffectHandler.getInstance().registerHandler("OpenChest", OpenChest::new); EffectHandler.getInstance().registerHandler("OpenCommonRecipeBook", OpenCommonRecipeBook::new); @@ -346,7 +347,6 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("Spoil", Spoil::new); EffectHandler.getInstance().registerHandler("StatAddForLevel", StatAddForLevel::new); EffectHandler.getInstance().registerHandler("StatAddForMp", StatAddForMp::new); - EffectHandler.getInstance().registerHandler("StatAddForNight", StatAddForNight::new); EffectHandler.getInstance().registerHandler("StatBonusSkillCritical", StatBonusSkillCritical::new); EffectHandler.getInstance().registerHandler("StatBonusSpeed", StatBonusSpeed::new); EffectHandler.getInstance().registerHandler("StatByMoveType", StatByMoveType::new); diff --git a/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java b/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java new file mode 100644 index 0000000000..8dce6e4312 --- /dev/null +++ b/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java @@ -0,0 +1,130 @@ +/* + * 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.effecthandlers; + +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicBoolean; + +import org.l2jmobius.gameserver.enums.StatModifierType; +import org.l2jmobius.gameserver.model.StatSet; +import org.l2jmobius.gameserver.model.actor.Creature; +import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.events.Containers; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.ListenersContainer; +import org.l2jmobius.gameserver.model.events.impl.OnDayNightChange; +import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; +import org.l2jmobius.gameserver.model.item.instance.Item; +import org.l2jmobius.gameserver.model.skill.Skill; +import org.l2jmobius.gameserver.model.stats.Stat; +import org.l2jmobius.gameserver.network.SystemMessageId; +import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; +import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager; + +/** + * @author Mobius + */ +public class NightStatModifier extends AbstractEffect +{ + private static final AtomicBoolean DAY_TIME = new AtomicBoolean(GameTimeTaskManager.getInstance().isNight()); + private static final Set NIGHT_STAT_CHARACTERS = ConcurrentHashMap.newKeySet(); + private static final int SHADOW_SENSE = 294; + + private final Stat _stat; + private final int _amount; + protected final StatModifierType _mode; + + public NightStatModifier(StatSet params) + { + _stat = params.getEnum("stat", Stat.class); + _amount = params.getInt("amount"); + _mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF); + + // Init a global day-night change listener. + final ListenersContainer container = Containers.Global(); + container.addListener(new ConsumerEventListener(container, EventType.ON_DAY_NIGHT_CHANGE, (OnDayNightChange event) -> onDayNightChange(event), this)); + } + + @Override + public void onStart(Creature effector, Creature effected, Skill skill, Item item) + { + NIGHT_STAT_CHARACTERS.add(effected); + } + + @Override + public void onExit(Creature effector, Creature effected, Skill skill) + { + NIGHT_STAT_CHARACTERS.remove(effected); + } + + @Override + public void pump(Creature effected, Skill skill) + { + // Not night. + if (!GameTimeTaskManager.getInstance().isNight()) + { + return; + } + + // Apply stat. + switch (_mode) + { + case DIFF: + { + effected.getStat().mergeAdd(_stat, _amount); + break; + } + case PER: + { + effected.getStat().mergeMul(_stat, (_amount / 100) + 1); + break; + } + } + } + + public void onDayNightChange(OnDayNightChange event) + { + synchronized (DAY_TIME) + { + final boolean isNight = event.isNight(); + + // Run only once per daytime change. + if (isNight == DAY_TIME.get()) + { + return; + } + DAY_TIME.set(isNight); + + // System message for Shadow Sense. + final SystemMessage msg = new SystemMessage(isNight ? SystemMessageId.IT_IS_NOW_MIDNIGHT_AND_THE_EFFECT_OF_S1_CAN_BE_FELT : SystemMessageId.IT_IS_DAWN_AND_THE_EFFECT_OF_S1_WILL_NOW_DISAPPEAR); + msg.addSkillName(SHADOW_SENSE); + + for (Creature creature : NIGHT_STAT_CHARACTERS) + { + // Pump again. + creature.getStat().recalculateStats(true); + + // Send Shadow Sense message when player has skill. + if (creature.getKnownSkill(SHADOW_SENSE) != null) + { + creature.sendPacket(msg); + } + } + } + } +} diff --git a/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java b/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java deleted file mode 100644 index 55cb0d4924..0000000000 --- a/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package handlers.effecthandlers; - -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicBoolean; - -import org.l2jmobius.gameserver.enums.StatModifierType; -import org.l2jmobius.gameserver.model.StatSet; -import org.l2jmobius.gameserver.model.actor.Creature; -import org.l2jmobius.gameserver.model.effects.AbstractEffect; -import org.l2jmobius.gameserver.model.events.Containers; -import org.l2jmobius.gameserver.model.events.EventType; -import org.l2jmobius.gameserver.model.events.ListenersContainer; -import org.l2jmobius.gameserver.model.events.impl.OnDayNightChange; -import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; -import org.l2jmobius.gameserver.model.item.instance.Item; -import org.l2jmobius.gameserver.model.skill.Skill; -import org.l2jmobius.gameserver.model.stats.Stat; -import org.l2jmobius.gameserver.network.SystemMessageId; -import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; -import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager; - -/** - * @author Mobius - */ -public class StatAddForNight extends AbstractEffect -{ - private static final AtomicBoolean DAY_TIME = new AtomicBoolean(GameTimeTaskManager.getInstance().isNight()); - private static final Set NIGHT_STAT_CHARACTERS = ConcurrentHashMap.newKeySet(); - private static final int SHADOW_SENSE = 294; - - private final Stat _stat; - private final int _amount; - protected final StatModifierType _mode; - - public StatAddForNight(StatSet params) - { - _stat = params.getEnum("stat", Stat.class); - _amount = params.getInt("amount"); - _mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF); - - // Init a global day-night change listener. - final ListenersContainer container = Containers.Global(); - container.addListener(new ConsumerEventListener(container, EventType.ON_DAY_NIGHT_CHANGE, (OnDayNightChange event) -> onDayNightChange(event), this)); - } - - @Override - public void onStart(Creature effector, Creature effected, Skill skill, Item item) - { - NIGHT_STAT_CHARACTERS.add(effected); - } - - @Override - public void onExit(Creature effector, Creature effected, Skill skill) - { - NIGHT_STAT_CHARACTERS.remove(effected); - } - - @Override - public void pump(Creature effected, Skill skill) - { - // Not night. - if (!GameTimeTaskManager.getInstance().isNight()) - { - return; - } - - // Apply stat. - switch (_mode) - { - case DIFF: - { - effected.getStat().mergeAdd(_stat, _amount); - break; - } - case PER: - { - effected.getStat().mergeMul(_stat, (_amount / 100) + 1); - break; - } - } - } - - public void onDayNightChange(OnDayNightChange event) - { - synchronized (DAY_TIME) - { - final boolean isNight = event.isNight(); - - // Run only once per daytime change. - if (isNight == DAY_TIME.get()) - { - return; - } - DAY_TIME.set(isNight); - - // System message for Shadow Sense. - final SystemMessage msg = new SystemMessage(isNight ? SystemMessageId.IT_IS_NOW_MIDNIGHT_AND_THE_EFFECT_OF_S1_CAN_BE_FELT : SystemMessageId.IT_IS_DAWN_AND_THE_EFFECT_OF_S1_WILL_NOW_DISAPPEAR); - msg.addSkillName(SHADOW_SENSE); - - for (Creature creature : NIGHT_STAT_CHARACTERS) - { - // Pump again. - creature.getStat().recalculateStats(true); - - // Send Shadow Sense message when player has skill. - if (creature.getKnownSkill(SHADOW_SENSE) != null) - { - creature.sendPacket(msg); - } - } - } - } -} diff --git a/L2J_Mobius_08.2_Homunculus/dist/game/data/stats/skills/00200-00299.xml b/L2J_Mobius_08.2_Homunculus/dist/game/data/stats/skills/00200-00299.xml index 3d3729069a..7a550a5755 100644 --- a/L2J_Mobius_08.2_Homunculus/dist/game/data/stats/skills/00200-00299.xml +++ b/L2J_Mobius_08.2_Homunculus/dist/game/data/stats/skills/00200-00299.xml @@ -6480,7 +6480,7 @@ P 5 - + ACCURACY_COMBAT 3 diff --git a/L2J_Mobius_08.2_Homunculus/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_08.2_Homunculus/dist/game/data/stats/skills/documentation.txt index 9f11d71b4c..e701b82dce 100644 --- a/L2J_Mobius_08.2_Homunculus/dist/game/data/stats/skills/documentation.txt +++ b/L2J_Mobius_08.2_Homunculus/dist/game/data/stats/skills/documentation.txt @@ -212,6 +212,7 @@ MpRegen: MP Regeneration stat. MpShield: Transfers given percentage of damage as mana damage. Mana Shield. MpVampiricAttack: Absorbs given percentage of mana during attack. Mute: Prevents target from using magical skills. Silence. +NightStatModifier: Modify a specific stat at night time. (l2jmobius) NoblesseBless: Does not remove buffs upon death except itself. OpenChest: Opens a treasure chest. OpenCommonRecipeBook: Shows the common recipe book window. @@ -314,7 +315,6 @@ SpModify: Bonus SP stat. Spoil: Spoils a mob activating its extra sweep drop. StatAddForLevel: Adds a fixed amount of a Stat for a specific player level. (l2jmobius) StatAddForMp: Adds a fixed amount of a Stat for when player max MP is over a value. (l2jmobius) -StatAddForNight: Modify a specific stat at night time. (l2jmobius) StatBonusSkillCritical: Changes skill critical rate to depend on the specified base stat. StatBonusSpeed: Changes Speed stat to depend on the specified base stat. StatByMoveType: Adds stat based on your movement type (standing, running, walking). diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/EffectMasterHandler.java index 4dac9c3305..c5ac0cdd05 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -243,6 +243,7 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("MpShield", MpShield::new); EffectHandler.getInstance().registerHandler("MpVampiricAttack", MpVampiricAttack::new); EffectHandler.getInstance().registerHandler("Mute", Mute::new); + EffectHandler.getInstance().registerHandler("NightStatModifier", NightStatModifier::new); EffectHandler.getInstance().registerHandler("NoblesseBless", NoblesseBless::new); EffectHandler.getInstance().registerHandler("OpenChest", OpenChest::new); EffectHandler.getInstance().registerHandler("OpenCommonRecipeBook", OpenCommonRecipeBook::new); @@ -347,7 +348,6 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("Spoil", Spoil::new); EffectHandler.getInstance().registerHandler("StatAddForLevel", StatAddForLevel::new); EffectHandler.getInstance().registerHandler("StatAddForMp", StatAddForMp::new); - EffectHandler.getInstance().registerHandler("StatAddForNight", StatAddForNight::new); EffectHandler.getInstance().registerHandler("StatBonusSkillCritical", StatBonusSkillCritical::new); EffectHandler.getInstance().registerHandler("StatBonusSpeed", StatBonusSpeed::new); EffectHandler.getInstance().registerHandler("StatByMoveType", StatByMoveType::new); diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java new file mode 100644 index 0000000000..8dce6e4312 --- /dev/null +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java @@ -0,0 +1,130 @@ +/* + * 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.effecthandlers; + +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicBoolean; + +import org.l2jmobius.gameserver.enums.StatModifierType; +import org.l2jmobius.gameserver.model.StatSet; +import org.l2jmobius.gameserver.model.actor.Creature; +import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.events.Containers; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.ListenersContainer; +import org.l2jmobius.gameserver.model.events.impl.OnDayNightChange; +import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; +import org.l2jmobius.gameserver.model.item.instance.Item; +import org.l2jmobius.gameserver.model.skill.Skill; +import org.l2jmobius.gameserver.model.stats.Stat; +import org.l2jmobius.gameserver.network.SystemMessageId; +import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; +import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager; + +/** + * @author Mobius + */ +public class NightStatModifier extends AbstractEffect +{ + private static final AtomicBoolean DAY_TIME = new AtomicBoolean(GameTimeTaskManager.getInstance().isNight()); + private static final Set NIGHT_STAT_CHARACTERS = ConcurrentHashMap.newKeySet(); + private static final int SHADOW_SENSE = 294; + + private final Stat _stat; + private final int _amount; + protected final StatModifierType _mode; + + public NightStatModifier(StatSet params) + { + _stat = params.getEnum("stat", Stat.class); + _amount = params.getInt("amount"); + _mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF); + + // Init a global day-night change listener. + final ListenersContainer container = Containers.Global(); + container.addListener(new ConsumerEventListener(container, EventType.ON_DAY_NIGHT_CHANGE, (OnDayNightChange event) -> onDayNightChange(event), this)); + } + + @Override + public void onStart(Creature effector, Creature effected, Skill skill, Item item) + { + NIGHT_STAT_CHARACTERS.add(effected); + } + + @Override + public void onExit(Creature effector, Creature effected, Skill skill) + { + NIGHT_STAT_CHARACTERS.remove(effected); + } + + @Override + public void pump(Creature effected, Skill skill) + { + // Not night. + if (!GameTimeTaskManager.getInstance().isNight()) + { + return; + } + + // Apply stat. + switch (_mode) + { + case DIFF: + { + effected.getStat().mergeAdd(_stat, _amount); + break; + } + case PER: + { + effected.getStat().mergeMul(_stat, (_amount / 100) + 1); + break; + } + } + } + + public void onDayNightChange(OnDayNightChange event) + { + synchronized (DAY_TIME) + { + final boolean isNight = event.isNight(); + + // Run only once per daytime change. + if (isNight == DAY_TIME.get()) + { + return; + } + DAY_TIME.set(isNight); + + // System message for Shadow Sense. + final SystemMessage msg = new SystemMessage(isNight ? SystemMessageId.IT_IS_NOW_MIDNIGHT_AND_THE_EFFECT_OF_S1_CAN_BE_FELT : SystemMessageId.IT_IS_DAWN_AND_THE_EFFECT_OF_S1_WILL_NOW_DISAPPEAR); + msg.addSkillName(SHADOW_SENSE); + + for (Creature creature : NIGHT_STAT_CHARACTERS) + { + // Pump again. + creature.getStat().recalculateStats(true); + + // Send Shadow Sense message when player has skill. + if (creature.getKnownSkill(SHADOW_SENSE) != null) + { + creature.sendPacket(msg); + } + } + } + } +} diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java deleted file mode 100644 index 55cb0d4924..0000000000 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package handlers.effecthandlers; - -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicBoolean; - -import org.l2jmobius.gameserver.enums.StatModifierType; -import org.l2jmobius.gameserver.model.StatSet; -import org.l2jmobius.gameserver.model.actor.Creature; -import org.l2jmobius.gameserver.model.effects.AbstractEffect; -import org.l2jmobius.gameserver.model.events.Containers; -import org.l2jmobius.gameserver.model.events.EventType; -import org.l2jmobius.gameserver.model.events.ListenersContainer; -import org.l2jmobius.gameserver.model.events.impl.OnDayNightChange; -import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; -import org.l2jmobius.gameserver.model.item.instance.Item; -import org.l2jmobius.gameserver.model.skill.Skill; -import org.l2jmobius.gameserver.model.stats.Stat; -import org.l2jmobius.gameserver.network.SystemMessageId; -import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; -import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager; - -/** - * @author Mobius - */ -public class StatAddForNight extends AbstractEffect -{ - private static final AtomicBoolean DAY_TIME = new AtomicBoolean(GameTimeTaskManager.getInstance().isNight()); - private static final Set NIGHT_STAT_CHARACTERS = ConcurrentHashMap.newKeySet(); - private static final int SHADOW_SENSE = 294; - - private final Stat _stat; - private final int _amount; - protected final StatModifierType _mode; - - public StatAddForNight(StatSet params) - { - _stat = params.getEnum("stat", Stat.class); - _amount = params.getInt("amount"); - _mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF); - - // Init a global day-night change listener. - final ListenersContainer container = Containers.Global(); - container.addListener(new ConsumerEventListener(container, EventType.ON_DAY_NIGHT_CHANGE, (OnDayNightChange event) -> onDayNightChange(event), this)); - } - - @Override - public void onStart(Creature effector, Creature effected, Skill skill, Item item) - { - NIGHT_STAT_CHARACTERS.add(effected); - } - - @Override - public void onExit(Creature effector, Creature effected, Skill skill) - { - NIGHT_STAT_CHARACTERS.remove(effected); - } - - @Override - public void pump(Creature effected, Skill skill) - { - // Not night. - if (!GameTimeTaskManager.getInstance().isNight()) - { - return; - } - - // Apply stat. - switch (_mode) - { - case DIFF: - { - effected.getStat().mergeAdd(_stat, _amount); - break; - } - case PER: - { - effected.getStat().mergeMul(_stat, (_amount / 100) + 1); - break; - } - } - } - - public void onDayNightChange(OnDayNightChange event) - { - synchronized (DAY_TIME) - { - final boolean isNight = event.isNight(); - - // Run only once per daytime change. - if (isNight == DAY_TIME.get()) - { - return; - } - DAY_TIME.set(isNight); - - // System message for Shadow Sense. - final SystemMessage msg = new SystemMessage(isNight ? SystemMessageId.IT_IS_NOW_MIDNIGHT_AND_THE_EFFECT_OF_S1_CAN_BE_FELT : SystemMessageId.IT_IS_DAWN_AND_THE_EFFECT_OF_S1_WILL_NOW_DISAPPEAR); - msg.addSkillName(SHADOW_SENSE); - - for (Creature creature : NIGHT_STAT_CHARACTERS) - { - // Pump again. - creature.getStat().recalculateStats(true); - - // Send Shadow Sense message when player has skill. - if (creature.getKnownSkill(SHADOW_SENSE) != null) - { - creature.sendPacket(msg); - } - } - } - } -} diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/stats/skills/00200-00299.xml b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/stats/skills/00200-00299.xml index 103586dd41..59de78814f 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/stats/skills/00200-00299.xml +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/stats/skills/00200-00299.xml @@ -6480,7 +6480,7 @@ P 5 - + ACCURACY_COMBAT 3 diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/stats/skills/documentation.txt index 5e9da7d960..9410ae3085 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/stats/skills/documentation.txt +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/stats/skills/documentation.txt @@ -212,6 +212,7 @@ MpRegen: MP Regeneration stat. MpShield: Transfers given percentage of damage as mana damage. Mana Shield. MpVampiricAttack: Absorbs given percentage of mana during attack. Mute: Prevents target from using magical skills. Silence. +NightStatModifier: Modify a specific stat at night time. (l2jmobius) NoblesseBless: Does not remove buffs upon death except itself. OpenChest: Opens a treasure chest. OpenCommonRecipeBook: Shows the common recipe book window. @@ -314,7 +315,6 @@ SpModify: Bonus SP stat. Spoil: Spoils a mob activating its extra sweep drop. StatAddForLevel: Adds a fixed amount of a Stat for a specific player level. (l2jmobius) StatAddForMp: Adds a fixed amount of a Stat for when player max MP is over a value. (l2jmobius) -StatAddForNight: Modify a specific stat at night time. (l2jmobius) StatBonusSkillCritical: Changes skill critical rate to depend on the specified base stat. StatBonusSpeed: Changes Speed stat to depend on the specified base stat. StatByMoveType: Adds stat based on your movement type (standing, running, walking). diff --git a/L2J_Mobius_10.1_MasterClass/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_10.1_MasterClass/dist/game/data/scripts/handlers/EffectMasterHandler.java index 609c8fd250..5d08ed63ef 100644 --- a/L2J_Mobius_10.1_MasterClass/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_10.1_MasterClass/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -244,6 +244,7 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("MpShield", MpShield::new); EffectHandler.getInstance().registerHandler("MpVampiricAttack", MpVampiricAttack::new); EffectHandler.getInstance().registerHandler("Mute", Mute::new); + EffectHandler.getInstance().registerHandler("NightStatModifier", NightStatModifier::new); EffectHandler.getInstance().registerHandler("NoblesseBless", NoblesseBless::new); EffectHandler.getInstance().registerHandler("OpenChest", OpenChest::new); EffectHandler.getInstance().registerHandler("OpenCommonRecipeBook", OpenCommonRecipeBook::new); @@ -349,7 +350,6 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("Spoil", Spoil::new); EffectHandler.getInstance().registerHandler("StatAddForLevel", StatAddForLevel::new); EffectHandler.getInstance().registerHandler("StatAddForMp", StatAddForMp::new); - EffectHandler.getInstance().registerHandler("StatAddForNight", StatAddForNight::new); EffectHandler.getInstance().registerHandler("StatAddForStat", StatAddForStat::new); EffectHandler.getInstance().registerHandler("StatBonusSkillCritical", StatBonusSkillCritical::new); EffectHandler.getInstance().registerHandler("StatBonusSpeed", StatBonusSpeed::new); diff --git a/L2J_Mobius_10.1_MasterClass/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java b/L2J_Mobius_10.1_MasterClass/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java new file mode 100644 index 0000000000..8dce6e4312 --- /dev/null +++ b/L2J_Mobius_10.1_MasterClass/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java @@ -0,0 +1,130 @@ +/* + * 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.effecthandlers; + +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicBoolean; + +import org.l2jmobius.gameserver.enums.StatModifierType; +import org.l2jmobius.gameserver.model.StatSet; +import org.l2jmobius.gameserver.model.actor.Creature; +import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.events.Containers; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.ListenersContainer; +import org.l2jmobius.gameserver.model.events.impl.OnDayNightChange; +import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; +import org.l2jmobius.gameserver.model.item.instance.Item; +import org.l2jmobius.gameserver.model.skill.Skill; +import org.l2jmobius.gameserver.model.stats.Stat; +import org.l2jmobius.gameserver.network.SystemMessageId; +import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; +import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager; + +/** + * @author Mobius + */ +public class NightStatModifier extends AbstractEffect +{ + private static final AtomicBoolean DAY_TIME = new AtomicBoolean(GameTimeTaskManager.getInstance().isNight()); + private static final Set NIGHT_STAT_CHARACTERS = ConcurrentHashMap.newKeySet(); + private static final int SHADOW_SENSE = 294; + + private final Stat _stat; + private final int _amount; + protected final StatModifierType _mode; + + public NightStatModifier(StatSet params) + { + _stat = params.getEnum("stat", Stat.class); + _amount = params.getInt("amount"); + _mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF); + + // Init a global day-night change listener. + final ListenersContainer container = Containers.Global(); + container.addListener(new ConsumerEventListener(container, EventType.ON_DAY_NIGHT_CHANGE, (OnDayNightChange event) -> onDayNightChange(event), this)); + } + + @Override + public void onStart(Creature effector, Creature effected, Skill skill, Item item) + { + NIGHT_STAT_CHARACTERS.add(effected); + } + + @Override + public void onExit(Creature effector, Creature effected, Skill skill) + { + NIGHT_STAT_CHARACTERS.remove(effected); + } + + @Override + public void pump(Creature effected, Skill skill) + { + // Not night. + if (!GameTimeTaskManager.getInstance().isNight()) + { + return; + } + + // Apply stat. + switch (_mode) + { + case DIFF: + { + effected.getStat().mergeAdd(_stat, _amount); + break; + } + case PER: + { + effected.getStat().mergeMul(_stat, (_amount / 100) + 1); + break; + } + } + } + + public void onDayNightChange(OnDayNightChange event) + { + synchronized (DAY_TIME) + { + final boolean isNight = event.isNight(); + + // Run only once per daytime change. + if (isNight == DAY_TIME.get()) + { + return; + } + DAY_TIME.set(isNight); + + // System message for Shadow Sense. + final SystemMessage msg = new SystemMessage(isNight ? SystemMessageId.IT_IS_NOW_MIDNIGHT_AND_THE_EFFECT_OF_S1_CAN_BE_FELT : SystemMessageId.IT_IS_DAWN_AND_THE_EFFECT_OF_S1_WILL_NOW_DISAPPEAR); + msg.addSkillName(SHADOW_SENSE); + + for (Creature creature : NIGHT_STAT_CHARACTERS) + { + // Pump again. + creature.getStat().recalculateStats(true); + + // Send Shadow Sense message when player has skill. + if (creature.getKnownSkill(SHADOW_SENSE) != null) + { + creature.sendPacket(msg); + } + } + } + } +} diff --git a/L2J_Mobius_10.1_MasterClass/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java b/L2J_Mobius_10.1_MasterClass/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java deleted file mode 100644 index 55cb0d4924..0000000000 --- a/L2J_Mobius_10.1_MasterClass/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package handlers.effecthandlers; - -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicBoolean; - -import org.l2jmobius.gameserver.enums.StatModifierType; -import org.l2jmobius.gameserver.model.StatSet; -import org.l2jmobius.gameserver.model.actor.Creature; -import org.l2jmobius.gameserver.model.effects.AbstractEffect; -import org.l2jmobius.gameserver.model.events.Containers; -import org.l2jmobius.gameserver.model.events.EventType; -import org.l2jmobius.gameserver.model.events.ListenersContainer; -import org.l2jmobius.gameserver.model.events.impl.OnDayNightChange; -import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; -import org.l2jmobius.gameserver.model.item.instance.Item; -import org.l2jmobius.gameserver.model.skill.Skill; -import org.l2jmobius.gameserver.model.stats.Stat; -import org.l2jmobius.gameserver.network.SystemMessageId; -import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; -import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager; - -/** - * @author Mobius - */ -public class StatAddForNight extends AbstractEffect -{ - private static final AtomicBoolean DAY_TIME = new AtomicBoolean(GameTimeTaskManager.getInstance().isNight()); - private static final Set NIGHT_STAT_CHARACTERS = ConcurrentHashMap.newKeySet(); - private static final int SHADOW_SENSE = 294; - - private final Stat _stat; - private final int _amount; - protected final StatModifierType _mode; - - public StatAddForNight(StatSet params) - { - _stat = params.getEnum("stat", Stat.class); - _amount = params.getInt("amount"); - _mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF); - - // Init a global day-night change listener. - final ListenersContainer container = Containers.Global(); - container.addListener(new ConsumerEventListener(container, EventType.ON_DAY_NIGHT_CHANGE, (OnDayNightChange event) -> onDayNightChange(event), this)); - } - - @Override - public void onStart(Creature effector, Creature effected, Skill skill, Item item) - { - NIGHT_STAT_CHARACTERS.add(effected); - } - - @Override - public void onExit(Creature effector, Creature effected, Skill skill) - { - NIGHT_STAT_CHARACTERS.remove(effected); - } - - @Override - public void pump(Creature effected, Skill skill) - { - // Not night. - if (!GameTimeTaskManager.getInstance().isNight()) - { - return; - } - - // Apply stat. - switch (_mode) - { - case DIFF: - { - effected.getStat().mergeAdd(_stat, _amount); - break; - } - case PER: - { - effected.getStat().mergeMul(_stat, (_amount / 100) + 1); - break; - } - } - } - - public void onDayNightChange(OnDayNightChange event) - { - synchronized (DAY_TIME) - { - final boolean isNight = event.isNight(); - - // Run only once per daytime change. - if (isNight == DAY_TIME.get()) - { - return; - } - DAY_TIME.set(isNight); - - // System message for Shadow Sense. - final SystemMessage msg = new SystemMessage(isNight ? SystemMessageId.IT_IS_NOW_MIDNIGHT_AND_THE_EFFECT_OF_S1_CAN_BE_FELT : SystemMessageId.IT_IS_DAWN_AND_THE_EFFECT_OF_S1_WILL_NOW_DISAPPEAR); - msg.addSkillName(SHADOW_SENSE); - - for (Creature creature : NIGHT_STAT_CHARACTERS) - { - // Pump again. - creature.getStat().recalculateStats(true); - - // Send Shadow Sense message when player has skill. - if (creature.getKnownSkill(SHADOW_SENSE) != null) - { - creature.sendPacket(msg); - } - } - } - } -} diff --git a/L2J_Mobius_10.1_MasterClass/dist/game/data/stats/skills/00200-00299.xml b/L2J_Mobius_10.1_MasterClass/dist/game/data/stats/skills/00200-00299.xml index 103586dd41..59de78814f 100644 --- a/L2J_Mobius_10.1_MasterClass/dist/game/data/stats/skills/00200-00299.xml +++ b/L2J_Mobius_10.1_MasterClass/dist/game/data/stats/skills/00200-00299.xml @@ -6480,7 +6480,7 @@ P 5 - + ACCURACY_COMBAT 3 diff --git a/L2J_Mobius_10.1_MasterClass/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_10.1_MasterClass/dist/game/data/stats/skills/documentation.txt index bded15c1aa..ebaeb2b303 100644 --- a/L2J_Mobius_10.1_MasterClass/dist/game/data/stats/skills/documentation.txt +++ b/L2J_Mobius_10.1_MasterClass/dist/game/data/stats/skills/documentation.txt @@ -213,6 +213,7 @@ MpRegen: MP Regeneration stat. MpShield: Transfers given percentage of damage as mana damage. Mana Shield. MpVampiricAttack: Absorbs given percentage of mana during attack. Mute: Prevents target from using magical skills. Silence. +NightStatModifier: Modify a specific stat at night time. (l2jmobius) NoblesseBless: Does not remove buffs upon death except itself. OpenChest: Opens a treasure chest. OpenCommonRecipeBook: Shows the common recipe book window. @@ -316,7 +317,6 @@ SpModify: Bonus SP stat. Spoil: Spoils a mob activating its extra sweep drop. StatAddForLevel: Adds a fixed amount of a Stat for a specific player level. (l2jmobius) StatAddForMp: Adds a fixed amount of a Stat for when player max MP is over a value. (l2jmobius) -StatAddForNight: Modify a specific stat at night time. (l2jmobius) StatAddForStat: Adds a fixed amount of a Stat based on player current value. (l2jmobius) StatBonusSkillCritical: Changes skill critical rate to depend on the specified base stat. StatBonusSpeed: Changes Speed stat to depend on the specified base stat. diff --git a/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/EffectMasterHandler.java index 37a721be63..de308d13e8 100644 --- a/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -246,6 +246,7 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("MpShield", MpShield::new); EffectHandler.getInstance().registerHandler("MpVampiricAttack", MpVampiricAttack::new); EffectHandler.getInstance().registerHandler("Mute", Mute::new); + EffectHandler.getInstance().registerHandler("NightStatModifier", NightStatModifier::new); EffectHandler.getInstance().registerHandler("NoblesseBless", NoblesseBless::new); EffectHandler.getInstance().registerHandler("OpenChest", OpenChest::new); EffectHandler.getInstance().registerHandler("OpenCommonRecipeBook", OpenCommonRecipeBook::new); @@ -351,7 +352,6 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("Spoil", Spoil::new); EffectHandler.getInstance().registerHandler("StatAddForLevel", StatAddForLevel::new); EffectHandler.getInstance().registerHandler("StatAddForMp", StatAddForMp::new); - EffectHandler.getInstance().registerHandler("StatAddForNight", StatAddForNight::new); EffectHandler.getInstance().registerHandler("StatAddForStat", StatAddForStat::new); EffectHandler.getInstance().registerHandler("StatBonusSkillCritical", StatBonusSkillCritical::new); EffectHandler.getInstance().registerHandler("StatBonusSpeed", StatBonusSpeed::new); diff --git a/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java new file mode 100644 index 0000000000..8dce6e4312 --- /dev/null +++ b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java @@ -0,0 +1,130 @@ +/* + * 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.effecthandlers; + +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicBoolean; + +import org.l2jmobius.gameserver.enums.StatModifierType; +import org.l2jmobius.gameserver.model.StatSet; +import org.l2jmobius.gameserver.model.actor.Creature; +import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.events.Containers; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.ListenersContainer; +import org.l2jmobius.gameserver.model.events.impl.OnDayNightChange; +import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; +import org.l2jmobius.gameserver.model.item.instance.Item; +import org.l2jmobius.gameserver.model.skill.Skill; +import org.l2jmobius.gameserver.model.stats.Stat; +import org.l2jmobius.gameserver.network.SystemMessageId; +import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; +import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager; + +/** + * @author Mobius + */ +public class NightStatModifier extends AbstractEffect +{ + private static final AtomicBoolean DAY_TIME = new AtomicBoolean(GameTimeTaskManager.getInstance().isNight()); + private static final Set NIGHT_STAT_CHARACTERS = ConcurrentHashMap.newKeySet(); + private static final int SHADOW_SENSE = 294; + + private final Stat _stat; + private final int _amount; + protected final StatModifierType _mode; + + public NightStatModifier(StatSet params) + { + _stat = params.getEnum("stat", Stat.class); + _amount = params.getInt("amount"); + _mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF); + + // Init a global day-night change listener. + final ListenersContainer container = Containers.Global(); + container.addListener(new ConsumerEventListener(container, EventType.ON_DAY_NIGHT_CHANGE, (OnDayNightChange event) -> onDayNightChange(event), this)); + } + + @Override + public void onStart(Creature effector, Creature effected, Skill skill, Item item) + { + NIGHT_STAT_CHARACTERS.add(effected); + } + + @Override + public void onExit(Creature effector, Creature effected, Skill skill) + { + NIGHT_STAT_CHARACTERS.remove(effected); + } + + @Override + public void pump(Creature effected, Skill skill) + { + // Not night. + if (!GameTimeTaskManager.getInstance().isNight()) + { + return; + } + + // Apply stat. + switch (_mode) + { + case DIFF: + { + effected.getStat().mergeAdd(_stat, _amount); + break; + } + case PER: + { + effected.getStat().mergeMul(_stat, (_amount / 100) + 1); + break; + } + } + } + + public void onDayNightChange(OnDayNightChange event) + { + synchronized (DAY_TIME) + { + final boolean isNight = event.isNight(); + + // Run only once per daytime change. + if (isNight == DAY_TIME.get()) + { + return; + } + DAY_TIME.set(isNight); + + // System message for Shadow Sense. + final SystemMessage msg = new SystemMessage(isNight ? SystemMessageId.IT_IS_NOW_MIDNIGHT_AND_THE_EFFECT_OF_S1_CAN_BE_FELT : SystemMessageId.IT_IS_DAWN_AND_THE_EFFECT_OF_S1_WILL_NOW_DISAPPEAR); + msg.addSkillName(SHADOW_SENSE); + + for (Creature creature : NIGHT_STAT_CHARACTERS) + { + // Pump again. + creature.getStat().recalculateStats(true); + + // Send Shadow Sense message when player has skill. + if (creature.getKnownSkill(SHADOW_SENSE) != null) + { + creature.sendPacket(msg); + } + } + } + } +} diff --git a/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java b/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java deleted file mode 100644 index 55cb0d4924..0000000000 --- a/L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package handlers.effecthandlers; - -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicBoolean; - -import org.l2jmobius.gameserver.enums.StatModifierType; -import org.l2jmobius.gameserver.model.StatSet; -import org.l2jmobius.gameserver.model.actor.Creature; -import org.l2jmobius.gameserver.model.effects.AbstractEffect; -import org.l2jmobius.gameserver.model.events.Containers; -import org.l2jmobius.gameserver.model.events.EventType; -import org.l2jmobius.gameserver.model.events.ListenersContainer; -import org.l2jmobius.gameserver.model.events.impl.OnDayNightChange; -import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; -import org.l2jmobius.gameserver.model.item.instance.Item; -import org.l2jmobius.gameserver.model.skill.Skill; -import org.l2jmobius.gameserver.model.stats.Stat; -import org.l2jmobius.gameserver.network.SystemMessageId; -import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; -import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager; - -/** - * @author Mobius - */ -public class StatAddForNight extends AbstractEffect -{ - private static final AtomicBoolean DAY_TIME = new AtomicBoolean(GameTimeTaskManager.getInstance().isNight()); - private static final Set NIGHT_STAT_CHARACTERS = ConcurrentHashMap.newKeySet(); - private static final int SHADOW_SENSE = 294; - - private final Stat _stat; - private final int _amount; - protected final StatModifierType _mode; - - public StatAddForNight(StatSet params) - { - _stat = params.getEnum("stat", Stat.class); - _amount = params.getInt("amount"); - _mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF); - - // Init a global day-night change listener. - final ListenersContainer container = Containers.Global(); - container.addListener(new ConsumerEventListener(container, EventType.ON_DAY_NIGHT_CHANGE, (OnDayNightChange event) -> onDayNightChange(event), this)); - } - - @Override - public void onStart(Creature effector, Creature effected, Skill skill, Item item) - { - NIGHT_STAT_CHARACTERS.add(effected); - } - - @Override - public void onExit(Creature effector, Creature effected, Skill skill) - { - NIGHT_STAT_CHARACTERS.remove(effected); - } - - @Override - public void pump(Creature effected, Skill skill) - { - // Not night. - if (!GameTimeTaskManager.getInstance().isNight()) - { - return; - } - - // Apply stat. - switch (_mode) - { - case DIFF: - { - effected.getStat().mergeAdd(_stat, _amount); - break; - } - case PER: - { - effected.getStat().mergeMul(_stat, (_amount / 100) + 1); - break; - } - } - } - - public void onDayNightChange(OnDayNightChange event) - { - synchronized (DAY_TIME) - { - final boolean isNight = event.isNight(); - - // Run only once per daytime change. - if (isNight == DAY_TIME.get()) - { - return; - } - DAY_TIME.set(isNight); - - // System message for Shadow Sense. - final SystemMessage msg = new SystemMessage(isNight ? SystemMessageId.IT_IS_NOW_MIDNIGHT_AND_THE_EFFECT_OF_S1_CAN_BE_FELT : SystemMessageId.IT_IS_DAWN_AND_THE_EFFECT_OF_S1_WILL_NOW_DISAPPEAR); - msg.addSkillName(SHADOW_SENSE); - - for (Creature creature : NIGHT_STAT_CHARACTERS) - { - // Pump again. - creature.getStat().recalculateStats(true); - - // Send Shadow Sense message when player has skill. - if (creature.getKnownSkill(SHADOW_SENSE) != null) - { - creature.sendPacket(msg); - } - } - } - } -} diff --git a/L2J_Mobius_10.2_MasterClass/dist/game/data/stats/skills/00200-00299.xml b/L2J_Mobius_10.2_MasterClass/dist/game/data/stats/skills/00200-00299.xml index 103586dd41..59de78814f 100644 --- a/L2J_Mobius_10.2_MasterClass/dist/game/data/stats/skills/00200-00299.xml +++ b/L2J_Mobius_10.2_MasterClass/dist/game/data/stats/skills/00200-00299.xml @@ -6480,7 +6480,7 @@ P 5 - + ACCURACY_COMBAT 3 diff --git a/L2J_Mobius_10.2_MasterClass/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_10.2_MasterClass/dist/game/data/stats/skills/documentation.txt index e2d230e934..72dc83dded 100644 --- a/L2J_Mobius_10.2_MasterClass/dist/game/data/stats/skills/documentation.txt +++ b/L2J_Mobius_10.2_MasterClass/dist/game/data/stats/skills/documentation.txt @@ -215,6 +215,7 @@ MpRegen: MP Regeneration stat. MpShield: Transfers given percentage of damage as mana damage. Mana Shield. MpVampiricAttack: Absorbs given percentage of mana during attack. Mute: Prevents target from using magical skills. Silence. +NightStatModifier: Modify a specific stat at night time. (l2jmobius) NoblesseBless: Does not remove buffs upon death except itself. OpenChest: Opens a treasure chest. OpenCommonRecipeBook: Shows the common recipe book window. @@ -318,7 +319,6 @@ SpModify: Bonus SP stat. Spoil: Spoils a mob activating its extra sweep drop. StatAddForLevel: Adds a fixed amount of a Stat for a specific player level. (l2jmobius) StatAddForMp: Adds a fixed amount of a Stat for when player max MP is over a value. (l2jmobius) -StatAddForNight: Modify a specific stat at night time. (l2jmobius) StatAddForStat: Adds a fixed amount of a Stat based on player current value. (l2jmobius) StatBonusSkillCritical: Changes skill critical rate to depend on the specified base stat. StatBonusSpeed: Changes Speed stat to depend on the specified base stat. diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/EffectMasterHandler.java index 9baa601c17..2c15804a5b 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -230,6 +230,7 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("MpShield", MpShield::new); EffectHandler.getInstance().registerHandler("MpVampiricAttack", MpVampiricAttack::new); EffectHandler.getInstance().registerHandler("Mute", Mute::new); + EffectHandler.getInstance().registerHandler("NightStatModifier", NightStatModifier::new); EffectHandler.getInstance().registerHandler("NoblesseBless", NoblesseBless::new); EffectHandler.getInstance().registerHandler("OpenChest", OpenChest::new); EffectHandler.getInstance().registerHandler("OpenCommonRecipeBook", OpenCommonRecipeBook::new); @@ -329,7 +330,6 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("SpModify", SpModify::new); EffectHandler.getInstance().registerHandler("Spoil", Spoil::new); EffectHandler.getInstance().registerHandler("StatAddForLevel", StatAddForLevel::new); - EffectHandler.getInstance().registerHandler("StatAddForNight", StatAddForNight::new); EffectHandler.getInstance().registerHandler("StatBonusSkillCritical", StatBonusSkillCritical::new); EffectHandler.getInstance().registerHandler("StatBonusSpeed", StatBonusSpeed::new); EffectHandler.getInstance().registerHandler("StatByMoveType", StatByMoveType::new); diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java new file mode 100644 index 0000000000..8dce6e4312 --- /dev/null +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java @@ -0,0 +1,130 @@ +/* + * 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.effecthandlers; + +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicBoolean; + +import org.l2jmobius.gameserver.enums.StatModifierType; +import org.l2jmobius.gameserver.model.StatSet; +import org.l2jmobius.gameserver.model.actor.Creature; +import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.events.Containers; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.ListenersContainer; +import org.l2jmobius.gameserver.model.events.impl.OnDayNightChange; +import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; +import org.l2jmobius.gameserver.model.item.instance.Item; +import org.l2jmobius.gameserver.model.skill.Skill; +import org.l2jmobius.gameserver.model.stats.Stat; +import org.l2jmobius.gameserver.network.SystemMessageId; +import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; +import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager; + +/** + * @author Mobius + */ +public class NightStatModifier extends AbstractEffect +{ + private static final AtomicBoolean DAY_TIME = new AtomicBoolean(GameTimeTaskManager.getInstance().isNight()); + private static final Set NIGHT_STAT_CHARACTERS = ConcurrentHashMap.newKeySet(); + private static final int SHADOW_SENSE = 294; + + private final Stat _stat; + private final int _amount; + protected final StatModifierType _mode; + + public NightStatModifier(StatSet params) + { + _stat = params.getEnum("stat", Stat.class); + _amount = params.getInt("amount"); + _mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF); + + // Init a global day-night change listener. + final ListenersContainer container = Containers.Global(); + container.addListener(new ConsumerEventListener(container, EventType.ON_DAY_NIGHT_CHANGE, (OnDayNightChange event) -> onDayNightChange(event), this)); + } + + @Override + public void onStart(Creature effector, Creature effected, Skill skill, Item item) + { + NIGHT_STAT_CHARACTERS.add(effected); + } + + @Override + public void onExit(Creature effector, Creature effected, Skill skill) + { + NIGHT_STAT_CHARACTERS.remove(effected); + } + + @Override + public void pump(Creature effected, Skill skill) + { + // Not night. + if (!GameTimeTaskManager.getInstance().isNight()) + { + return; + } + + // Apply stat. + switch (_mode) + { + case DIFF: + { + effected.getStat().mergeAdd(_stat, _amount); + break; + } + case PER: + { + effected.getStat().mergeMul(_stat, (_amount / 100) + 1); + break; + } + } + } + + public void onDayNightChange(OnDayNightChange event) + { + synchronized (DAY_TIME) + { + final boolean isNight = event.isNight(); + + // Run only once per daytime change. + if (isNight == DAY_TIME.get()) + { + return; + } + DAY_TIME.set(isNight); + + // System message for Shadow Sense. + final SystemMessage msg = new SystemMessage(isNight ? SystemMessageId.IT_IS_NOW_MIDNIGHT_AND_THE_EFFECT_OF_S1_CAN_BE_FELT : SystemMessageId.IT_IS_DAWN_AND_THE_EFFECT_OF_S1_WILL_NOW_DISAPPEAR); + msg.addSkillName(SHADOW_SENSE); + + for (Creature creature : NIGHT_STAT_CHARACTERS) + { + // Pump again. + creature.getStat().recalculateStats(true); + + // Send Shadow Sense message when player has skill. + if (creature.getKnownSkill(SHADOW_SENSE) != null) + { + creature.sendPacket(msg); + } + } + } + } +} diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java deleted file mode 100644 index 55cb0d4924..0000000000 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package handlers.effecthandlers; - -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicBoolean; - -import org.l2jmobius.gameserver.enums.StatModifierType; -import org.l2jmobius.gameserver.model.StatSet; -import org.l2jmobius.gameserver.model.actor.Creature; -import org.l2jmobius.gameserver.model.effects.AbstractEffect; -import org.l2jmobius.gameserver.model.events.Containers; -import org.l2jmobius.gameserver.model.events.EventType; -import org.l2jmobius.gameserver.model.events.ListenersContainer; -import org.l2jmobius.gameserver.model.events.impl.OnDayNightChange; -import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; -import org.l2jmobius.gameserver.model.item.instance.Item; -import org.l2jmobius.gameserver.model.skill.Skill; -import org.l2jmobius.gameserver.model.stats.Stat; -import org.l2jmobius.gameserver.network.SystemMessageId; -import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; -import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager; - -/** - * @author Mobius - */ -public class StatAddForNight extends AbstractEffect -{ - private static final AtomicBoolean DAY_TIME = new AtomicBoolean(GameTimeTaskManager.getInstance().isNight()); - private static final Set NIGHT_STAT_CHARACTERS = ConcurrentHashMap.newKeySet(); - private static final int SHADOW_SENSE = 294; - - private final Stat _stat; - private final int _amount; - protected final StatModifierType _mode; - - public StatAddForNight(StatSet params) - { - _stat = params.getEnum("stat", Stat.class); - _amount = params.getInt("amount"); - _mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF); - - // Init a global day-night change listener. - final ListenersContainer container = Containers.Global(); - container.addListener(new ConsumerEventListener(container, EventType.ON_DAY_NIGHT_CHANGE, (OnDayNightChange event) -> onDayNightChange(event), this)); - } - - @Override - public void onStart(Creature effector, Creature effected, Skill skill, Item item) - { - NIGHT_STAT_CHARACTERS.add(effected); - } - - @Override - public void onExit(Creature effector, Creature effected, Skill skill) - { - NIGHT_STAT_CHARACTERS.remove(effected); - } - - @Override - public void pump(Creature effected, Skill skill) - { - // Not night. - if (!GameTimeTaskManager.getInstance().isNight()) - { - return; - } - - // Apply stat. - switch (_mode) - { - case DIFF: - { - effected.getStat().mergeAdd(_stat, _amount); - break; - } - case PER: - { - effected.getStat().mergeMul(_stat, (_amount / 100) + 1); - break; - } - } - } - - public void onDayNightChange(OnDayNightChange event) - { - synchronized (DAY_TIME) - { - final boolean isNight = event.isNight(); - - // Run only once per daytime change. - if (isNight == DAY_TIME.get()) - { - return; - } - DAY_TIME.set(isNight); - - // System message for Shadow Sense. - final SystemMessage msg = new SystemMessage(isNight ? SystemMessageId.IT_IS_NOW_MIDNIGHT_AND_THE_EFFECT_OF_S1_CAN_BE_FELT : SystemMessageId.IT_IS_DAWN_AND_THE_EFFECT_OF_S1_WILL_NOW_DISAPPEAR); - msg.addSkillName(SHADOW_SENSE); - - for (Creature creature : NIGHT_STAT_CHARACTERS) - { - // Pump again. - creature.getStat().recalculateStats(true); - - // Send Shadow Sense message when player has skill. - if (creature.getKnownSkill(SHADOW_SENSE) != null) - { - creature.sendPacket(msg); - } - } - } - } -} diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/00200-00299.xml b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/00200-00299.xml index 1b6c317bfb..0877138b17 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/00200-00299.xml +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/00200-00299.xml @@ -6634,7 +6634,7 @@ P 5 - + ACCURACY_COMBAT 3 diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/documentation.txt index f8b7d96809..181cad10bf 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/documentation.txt +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/documentation.txt @@ -200,6 +200,7 @@ MpRegen: MP Regeneration stat. MpShield: Transfers given percentage of damage as mana damage. Mana Shield. MpVampiricAttack: Absorbs given percentage of mana during attack. Mute: Prevents target from using magical skills. Silence. +NightStatModifier: Modify a specific stat at night time. (l2jmobius) NoblesseBless: Does not remove buffs upon death except itself. OpenChest: Opens a treasure chest. OpenCommonRecipeBook: Shows the common recipe book window. @@ -298,7 +299,6 @@ SpeedLimit: Increase a character's max Speed limit. (l2jmobius) SpModify: Bonus SP stat. Spoil: Spoils a mob activating its extra sweep drop. StatAddForLevel: Adds a fixed amount of a Stat for a specific player level. (l2jmobius) -StatAddForNight: Modify a specific stat at night time. (l2jmobius) StatBonusSkillCritical: Changes skill critical rate to depend on the specified base stat. StatBonusSpeed: Changes Speed stat to depend on the specified base stat. StatByMoveType: Adds stat based on your movement type (standing, running, walking). diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/EffectMasterHandler.java index 9baa601c17..2c15804a5b 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -230,6 +230,7 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("MpShield", MpShield::new); EffectHandler.getInstance().registerHandler("MpVampiricAttack", MpVampiricAttack::new); EffectHandler.getInstance().registerHandler("Mute", Mute::new); + EffectHandler.getInstance().registerHandler("NightStatModifier", NightStatModifier::new); EffectHandler.getInstance().registerHandler("NoblesseBless", NoblesseBless::new); EffectHandler.getInstance().registerHandler("OpenChest", OpenChest::new); EffectHandler.getInstance().registerHandler("OpenCommonRecipeBook", OpenCommonRecipeBook::new); @@ -329,7 +330,6 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("SpModify", SpModify::new); EffectHandler.getInstance().registerHandler("Spoil", Spoil::new); EffectHandler.getInstance().registerHandler("StatAddForLevel", StatAddForLevel::new); - EffectHandler.getInstance().registerHandler("StatAddForNight", StatAddForNight::new); EffectHandler.getInstance().registerHandler("StatBonusSkillCritical", StatBonusSkillCritical::new); EffectHandler.getInstance().registerHandler("StatBonusSpeed", StatBonusSpeed::new); EffectHandler.getInstance().registerHandler("StatByMoveType", StatByMoveType::new); diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java new file mode 100644 index 0000000000..8dce6e4312 --- /dev/null +++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java @@ -0,0 +1,130 @@ +/* + * 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.effecthandlers; + +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicBoolean; + +import org.l2jmobius.gameserver.enums.StatModifierType; +import org.l2jmobius.gameserver.model.StatSet; +import org.l2jmobius.gameserver.model.actor.Creature; +import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.events.Containers; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.ListenersContainer; +import org.l2jmobius.gameserver.model.events.impl.OnDayNightChange; +import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; +import org.l2jmobius.gameserver.model.item.instance.Item; +import org.l2jmobius.gameserver.model.skill.Skill; +import org.l2jmobius.gameserver.model.stats.Stat; +import org.l2jmobius.gameserver.network.SystemMessageId; +import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; +import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager; + +/** + * @author Mobius + */ +public class NightStatModifier extends AbstractEffect +{ + private static final AtomicBoolean DAY_TIME = new AtomicBoolean(GameTimeTaskManager.getInstance().isNight()); + private static final Set NIGHT_STAT_CHARACTERS = ConcurrentHashMap.newKeySet(); + private static final int SHADOW_SENSE = 294; + + private final Stat _stat; + private final int _amount; + protected final StatModifierType _mode; + + public NightStatModifier(StatSet params) + { + _stat = params.getEnum("stat", Stat.class); + _amount = params.getInt("amount"); + _mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF); + + // Init a global day-night change listener. + final ListenersContainer container = Containers.Global(); + container.addListener(new ConsumerEventListener(container, EventType.ON_DAY_NIGHT_CHANGE, (OnDayNightChange event) -> onDayNightChange(event), this)); + } + + @Override + public void onStart(Creature effector, Creature effected, Skill skill, Item item) + { + NIGHT_STAT_CHARACTERS.add(effected); + } + + @Override + public void onExit(Creature effector, Creature effected, Skill skill) + { + NIGHT_STAT_CHARACTERS.remove(effected); + } + + @Override + public void pump(Creature effected, Skill skill) + { + // Not night. + if (!GameTimeTaskManager.getInstance().isNight()) + { + return; + } + + // Apply stat. + switch (_mode) + { + case DIFF: + { + effected.getStat().mergeAdd(_stat, _amount); + break; + } + case PER: + { + effected.getStat().mergeMul(_stat, (_amount / 100) + 1); + break; + } + } + } + + public void onDayNightChange(OnDayNightChange event) + { + synchronized (DAY_TIME) + { + final boolean isNight = event.isNight(); + + // Run only once per daytime change. + if (isNight == DAY_TIME.get()) + { + return; + } + DAY_TIME.set(isNight); + + // System message for Shadow Sense. + final SystemMessage msg = new SystemMessage(isNight ? SystemMessageId.IT_IS_NOW_MIDNIGHT_AND_THE_EFFECT_OF_S1_CAN_BE_FELT : SystemMessageId.IT_IS_DAWN_AND_THE_EFFECT_OF_S1_WILL_NOW_DISAPPEAR); + msg.addSkillName(SHADOW_SENSE); + + for (Creature creature : NIGHT_STAT_CHARACTERS) + { + // Pump again. + creature.getStat().recalculateStats(true); + + // Send Shadow Sense message when player has skill. + if (creature.getKnownSkill(SHADOW_SENSE) != null) + { + creature.sendPacket(msg); + } + } + } + } +} diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java deleted file mode 100644 index 55cb0d4924..0000000000 --- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package handlers.effecthandlers; - -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicBoolean; - -import org.l2jmobius.gameserver.enums.StatModifierType; -import org.l2jmobius.gameserver.model.StatSet; -import org.l2jmobius.gameserver.model.actor.Creature; -import org.l2jmobius.gameserver.model.effects.AbstractEffect; -import org.l2jmobius.gameserver.model.events.Containers; -import org.l2jmobius.gameserver.model.events.EventType; -import org.l2jmobius.gameserver.model.events.ListenersContainer; -import org.l2jmobius.gameserver.model.events.impl.OnDayNightChange; -import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; -import org.l2jmobius.gameserver.model.item.instance.Item; -import org.l2jmobius.gameserver.model.skill.Skill; -import org.l2jmobius.gameserver.model.stats.Stat; -import org.l2jmobius.gameserver.network.SystemMessageId; -import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; -import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager; - -/** - * @author Mobius - */ -public class StatAddForNight extends AbstractEffect -{ - private static final AtomicBoolean DAY_TIME = new AtomicBoolean(GameTimeTaskManager.getInstance().isNight()); - private static final Set NIGHT_STAT_CHARACTERS = ConcurrentHashMap.newKeySet(); - private static final int SHADOW_SENSE = 294; - - private final Stat _stat; - private final int _amount; - protected final StatModifierType _mode; - - public StatAddForNight(StatSet params) - { - _stat = params.getEnum("stat", Stat.class); - _amount = params.getInt("amount"); - _mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF); - - // Init a global day-night change listener. - final ListenersContainer container = Containers.Global(); - container.addListener(new ConsumerEventListener(container, EventType.ON_DAY_NIGHT_CHANGE, (OnDayNightChange event) -> onDayNightChange(event), this)); - } - - @Override - public void onStart(Creature effector, Creature effected, Skill skill, Item item) - { - NIGHT_STAT_CHARACTERS.add(effected); - } - - @Override - public void onExit(Creature effector, Creature effected, Skill skill) - { - NIGHT_STAT_CHARACTERS.remove(effected); - } - - @Override - public void pump(Creature effected, Skill skill) - { - // Not night. - if (!GameTimeTaskManager.getInstance().isNight()) - { - return; - } - - // Apply stat. - switch (_mode) - { - case DIFF: - { - effected.getStat().mergeAdd(_stat, _amount); - break; - } - case PER: - { - effected.getStat().mergeMul(_stat, (_amount / 100) + 1); - break; - } - } - } - - public void onDayNightChange(OnDayNightChange event) - { - synchronized (DAY_TIME) - { - final boolean isNight = event.isNight(); - - // Run only once per daytime change. - if (isNight == DAY_TIME.get()) - { - return; - } - DAY_TIME.set(isNight); - - // System message for Shadow Sense. - final SystemMessage msg = new SystemMessage(isNight ? SystemMessageId.IT_IS_NOW_MIDNIGHT_AND_THE_EFFECT_OF_S1_CAN_BE_FELT : SystemMessageId.IT_IS_DAWN_AND_THE_EFFECT_OF_S1_WILL_NOW_DISAPPEAR); - msg.addSkillName(SHADOW_SENSE); - - for (Creature creature : NIGHT_STAT_CHARACTERS) - { - // Pump again. - creature.getStat().recalculateStats(true); - - // Send Shadow Sense message when player has skill. - if (creature.getKnownSkill(SHADOW_SENSE) != null) - { - creature.sendPacket(msg); - } - } - } - } -} diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/00200-00299.xml b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/00200-00299.xml index 375065a515..f59a64abd0 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/00200-00299.xml +++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/00200-00299.xml @@ -6652,7 +6652,7 @@ P 5 - + ACCURACY_COMBAT 3 diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/documentation.txt index f8b7d96809..181cad10bf 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/documentation.txt +++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/documentation.txt @@ -200,6 +200,7 @@ MpRegen: MP Regeneration stat. MpShield: Transfers given percentage of damage as mana damage. Mana Shield. MpVampiricAttack: Absorbs given percentage of mana during attack. Mute: Prevents target from using magical skills. Silence. +NightStatModifier: Modify a specific stat at night time. (l2jmobius) NoblesseBless: Does not remove buffs upon death except itself. OpenChest: Opens a treasure chest. OpenCommonRecipeBook: Shows the common recipe book window. @@ -298,7 +299,6 @@ SpeedLimit: Increase a character's max Speed limit. (l2jmobius) SpModify: Bonus SP stat. Spoil: Spoils a mob activating its extra sweep drop. StatAddForLevel: Adds a fixed amount of a Stat for a specific player level. (l2jmobius) -StatAddForNight: Modify a specific stat at night time. (l2jmobius) StatBonusSkillCritical: Changes skill critical rate to depend on the specified base stat. StatBonusSpeed: Changes Speed stat to depend on the specified base stat. StatByMoveType: Adds stat based on your movement type (standing, running, walking). diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/EffectMasterHandler.java index 4dc4592f51..68d7c68a1d 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -232,6 +232,7 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("MpShield", MpShield::new); EffectHandler.getInstance().registerHandler("MpVampiricAttack", MpVampiricAttack::new); EffectHandler.getInstance().registerHandler("Mute", Mute::new); + EffectHandler.getInstance().registerHandler("NightStatModifier", NightStatModifier::new); EffectHandler.getInstance().registerHandler("NoblesseBless", NoblesseBless::new); EffectHandler.getInstance().registerHandler("OpenChest", OpenChest::new); EffectHandler.getInstance().registerHandler("OpenCommonRecipeBook", OpenCommonRecipeBook::new); @@ -331,7 +332,6 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("SpModify", SpModify::new); EffectHandler.getInstance().registerHandler("Spoil", Spoil::new); EffectHandler.getInstance().registerHandler("StatAddForLevel", StatAddForLevel::new); - EffectHandler.getInstance().registerHandler("StatAddForNight", StatAddForNight::new); EffectHandler.getInstance().registerHandler("StatBonusSkillCritical", StatBonusSkillCritical::new); EffectHandler.getInstance().registerHandler("StatBonusSpeed", StatBonusSpeed::new); EffectHandler.getInstance().registerHandler("StatByMoveType", StatByMoveType::new); diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java new file mode 100644 index 0000000000..8dce6e4312 --- /dev/null +++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java @@ -0,0 +1,130 @@ +/* + * 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.effecthandlers; + +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicBoolean; + +import org.l2jmobius.gameserver.enums.StatModifierType; +import org.l2jmobius.gameserver.model.StatSet; +import org.l2jmobius.gameserver.model.actor.Creature; +import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.events.Containers; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.ListenersContainer; +import org.l2jmobius.gameserver.model.events.impl.OnDayNightChange; +import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; +import org.l2jmobius.gameserver.model.item.instance.Item; +import org.l2jmobius.gameserver.model.skill.Skill; +import org.l2jmobius.gameserver.model.stats.Stat; +import org.l2jmobius.gameserver.network.SystemMessageId; +import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; +import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager; + +/** + * @author Mobius + */ +public class NightStatModifier extends AbstractEffect +{ + private static final AtomicBoolean DAY_TIME = new AtomicBoolean(GameTimeTaskManager.getInstance().isNight()); + private static final Set NIGHT_STAT_CHARACTERS = ConcurrentHashMap.newKeySet(); + private static final int SHADOW_SENSE = 294; + + private final Stat _stat; + private final int _amount; + protected final StatModifierType _mode; + + public NightStatModifier(StatSet params) + { + _stat = params.getEnum("stat", Stat.class); + _amount = params.getInt("amount"); + _mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF); + + // Init a global day-night change listener. + final ListenersContainer container = Containers.Global(); + container.addListener(new ConsumerEventListener(container, EventType.ON_DAY_NIGHT_CHANGE, (OnDayNightChange event) -> onDayNightChange(event), this)); + } + + @Override + public void onStart(Creature effector, Creature effected, Skill skill, Item item) + { + NIGHT_STAT_CHARACTERS.add(effected); + } + + @Override + public void onExit(Creature effector, Creature effected, Skill skill) + { + NIGHT_STAT_CHARACTERS.remove(effected); + } + + @Override + public void pump(Creature effected, Skill skill) + { + // Not night. + if (!GameTimeTaskManager.getInstance().isNight()) + { + return; + } + + // Apply stat. + switch (_mode) + { + case DIFF: + { + effected.getStat().mergeAdd(_stat, _amount); + break; + } + case PER: + { + effected.getStat().mergeMul(_stat, (_amount / 100) + 1); + break; + } + } + } + + public void onDayNightChange(OnDayNightChange event) + { + synchronized (DAY_TIME) + { + final boolean isNight = event.isNight(); + + // Run only once per daytime change. + if (isNight == DAY_TIME.get()) + { + return; + } + DAY_TIME.set(isNight); + + // System message for Shadow Sense. + final SystemMessage msg = new SystemMessage(isNight ? SystemMessageId.IT_IS_NOW_MIDNIGHT_AND_THE_EFFECT_OF_S1_CAN_BE_FELT : SystemMessageId.IT_IS_DAWN_AND_THE_EFFECT_OF_S1_WILL_NOW_DISAPPEAR); + msg.addSkillName(SHADOW_SENSE); + + for (Creature creature : NIGHT_STAT_CHARACTERS) + { + // Pump again. + creature.getStat().recalculateStats(true); + + // Send Shadow Sense message when player has skill. + if (creature.getKnownSkill(SHADOW_SENSE) != null) + { + creature.sendPacket(msg); + } + } + } + } +} diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java deleted file mode 100644 index 55cb0d4924..0000000000 --- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package handlers.effecthandlers; - -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicBoolean; - -import org.l2jmobius.gameserver.enums.StatModifierType; -import org.l2jmobius.gameserver.model.StatSet; -import org.l2jmobius.gameserver.model.actor.Creature; -import org.l2jmobius.gameserver.model.effects.AbstractEffect; -import org.l2jmobius.gameserver.model.events.Containers; -import org.l2jmobius.gameserver.model.events.EventType; -import org.l2jmobius.gameserver.model.events.ListenersContainer; -import org.l2jmobius.gameserver.model.events.impl.OnDayNightChange; -import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; -import org.l2jmobius.gameserver.model.item.instance.Item; -import org.l2jmobius.gameserver.model.skill.Skill; -import org.l2jmobius.gameserver.model.stats.Stat; -import org.l2jmobius.gameserver.network.SystemMessageId; -import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; -import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager; - -/** - * @author Mobius - */ -public class StatAddForNight extends AbstractEffect -{ - private static final AtomicBoolean DAY_TIME = new AtomicBoolean(GameTimeTaskManager.getInstance().isNight()); - private static final Set NIGHT_STAT_CHARACTERS = ConcurrentHashMap.newKeySet(); - private static final int SHADOW_SENSE = 294; - - private final Stat _stat; - private final int _amount; - protected final StatModifierType _mode; - - public StatAddForNight(StatSet params) - { - _stat = params.getEnum("stat", Stat.class); - _amount = params.getInt("amount"); - _mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF); - - // Init a global day-night change listener. - final ListenersContainer container = Containers.Global(); - container.addListener(new ConsumerEventListener(container, EventType.ON_DAY_NIGHT_CHANGE, (OnDayNightChange event) -> onDayNightChange(event), this)); - } - - @Override - public void onStart(Creature effector, Creature effected, Skill skill, Item item) - { - NIGHT_STAT_CHARACTERS.add(effected); - } - - @Override - public void onExit(Creature effector, Creature effected, Skill skill) - { - NIGHT_STAT_CHARACTERS.remove(effected); - } - - @Override - public void pump(Creature effected, Skill skill) - { - // Not night. - if (!GameTimeTaskManager.getInstance().isNight()) - { - return; - } - - // Apply stat. - switch (_mode) - { - case DIFF: - { - effected.getStat().mergeAdd(_stat, _amount); - break; - } - case PER: - { - effected.getStat().mergeMul(_stat, (_amount / 100) + 1); - break; - } - } - } - - public void onDayNightChange(OnDayNightChange event) - { - synchronized (DAY_TIME) - { - final boolean isNight = event.isNight(); - - // Run only once per daytime change. - if (isNight == DAY_TIME.get()) - { - return; - } - DAY_TIME.set(isNight); - - // System message for Shadow Sense. - final SystemMessage msg = new SystemMessage(isNight ? SystemMessageId.IT_IS_NOW_MIDNIGHT_AND_THE_EFFECT_OF_S1_CAN_BE_FELT : SystemMessageId.IT_IS_DAWN_AND_THE_EFFECT_OF_S1_WILL_NOW_DISAPPEAR); - msg.addSkillName(SHADOW_SENSE); - - for (Creature creature : NIGHT_STAT_CHARACTERS) - { - // Pump again. - creature.getStat().recalculateStats(true); - - // Send Shadow Sense message when player has skill. - if (creature.getKnownSkill(SHADOW_SENSE) != null) - { - creature.sendPacket(msg); - } - } - } - } -} diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/00200-00299.xml b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/00200-00299.xml index 469a2cad71..25c6a0bed3 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/00200-00299.xml +++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/00200-00299.xml @@ -7192,7 +7192,7 @@ P 5 - + ACCURACY_COMBAT 3 diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/documentation.txt index 0107453d97..6f153be265 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/documentation.txt +++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/documentation.txt @@ -202,6 +202,7 @@ MpRegen: MP Regeneration stat. MpShield: Transfers given percentage of damage as mana damage. Mana Shield. MpVampiricAttack: Absorbs given percentage of mana during attack. Mute: Prevents target from using magical skills. Silence. +NightStatModifier: Modify a specific stat at night time. (l2jmobius) NoblesseBless: Does not remove buffs upon death except itself. OpenChest: Opens a treasure chest. OpenCommonRecipeBook: Shows the common recipe book window. @@ -300,7 +301,6 @@ SpeedLimit: Increase a character's max Speed limit. (l2jmobius) SpModify: Bonus SP stat. Spoil: Spoils a mob activating its extra sweep drop. StatAddForLevel: Adds a fixed amount of a Stat for a specific player level. (l2jmobius) -StatAddForNight: Modify a specific stat at night time. (l2jmobius) StatBonusSkillCritical: Changes skill critical rate to depend on the specified base stat. StatBonusSpeed: Changes Speed stat to depend on the specified base stat. StatByMoveType: Adds stat based on your movement type (standing, running, walking). diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/EffectMasterHandler.java index fd937c2af2..969874cbd3 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -235,6 +235,7 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("MpShield", MpShield::new); EffectHandler.getInstance().registerHandler("MpVampiricAttack", MpVampiricAttack::new); EffectHandler.getInstance().registerHandler("Mute", Mute::new); + EffectHandler.getInstance().registerHandler("NightStatModifier", NightStatModifier::new); EffectHandler.getInstance().registerHandler("NoblesseBless", NoblesseBless::new); EffectHandler.getInstance().registerHandler("OpenChest", OpenChest::new); EffectHandler.getInstance().registerHandler("OpenCommonRecipeBook", OpenCommonRecipeBook::new); @@ -335,7 +336,6 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("SpModify", SpModify::new); EffectHandler.getInstance().registerHandler("Spoil", Spoil::new); EffectHandler.getInstance().registerHandler("StatAddForLevel", StatAddForLevel::new); - EffectHandler.getInstance().registerHandler("StatAddForNight", StatAddForNight::new); EffectHandler.getInstance().registerHandler("StatBonusSkillCritical", StatBonusSkillCritical::new); EffectHandler.getInstance().registerHandler("StatBonusSpeed", StatBonusSpeed::new); EffectHandler.getInstance().registerHandler("StatByMoveType", StatByMoveType::new); diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java new file mode 100644 index 0000000000..8dce6e4312 --- /dev/null +++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java @@ -0,0 +1,130 @@ +/* + * 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.effecthandlers; + +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicBoolean; + +import org.l2jmobius.gameserver.enums.StatModifierType; +import org.l2jmobius.gameserver.model.StatSet; +import org.l2jmobius.gameserver.model.actor.Creature; +import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.events.Containers; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.ListenersContainer; +import org.l2jmobius.gameserver.model.events.impl.OnDayNightChange; +import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; +import org.l2jmobius.gameserver.model.item.instance.Item; +import org.l2jmobius.gameserver.model.skill.Skill; +import org.l2jmobius.gameserver.model.stats.Stat; +import org.l2jmobius.gameserver.network.SystemMessageId; +import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; +import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager; + +/** + * @author Mobius + */ +public class NightStatModifier extends AbstractEffect +{ + private static final AtomicBoolean DAY_TIME = new AtomicBoolean(GameTimeTaskManager.getInstance().isNight()); + private static final Set NIGHT_STAT_CHARACTERS = ConcurrentHashMap.newKeySet(); + private static final int SHADOW_SENSE = 294; + + private final Stat _stat; + private final int _amount; + protected final StatModifierType _mode; + + public NightStatModifier(StatSet params) + { + _stat = params.getEnum("stat", Stat.class); + _amount = params.getInt("amount"); + _mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF); + + // Init a global day-night change listener. + final ListenersContainer container = Containers.Global(); + container.addListener(new ConsumerEventListener(container, EventType.ON_DAY_NIGHT_CHANGE, (OnDayNightChange event) -> onDayNightChange(event), this)); + } + + @Override + public void onStart(Creature effector, Creature effected, Skill skill, Item item) + { + NIGHT_STAT_CHARACTERS.add(effected); + } + + @Override + public void onExit(Creature effector, Creature effected, Skill skill) + { + NIGHT_STAT_CHARACTERS.remove(effected); + } + + @Override + public void pump(Creature effected, Skill skill) + { + // Not night. + if (!GameTimeTaskManager.getInstance().isNight()) + { + return; + } + + // Apply stat. + switch (_mode) + { + case DIFF: + { + effected.getStat().mergeAdd(_stat, _amount); + break; + } + case PER: + { + effected.getStat().mergeMul(_stat, (_amount / 100) + 1); + break; + } + } + } + + public void onDayNightChange(OnDayNightChange event) + { + synchronized (DAY_TIME) + { + final boolean isNight = event.isNight(); + + // Run only once per daytime change. + if (isNight == DAY_TIME.get()) + { + return; + } + DAY_TIME.set(isNight); + + // System message for Shadow Sense. + final SystemMessage msg = new SystemMessage(isNight ? SystemMessageId.IT_IS_NOW_MIDNIGHT_AND_THE_EFFECT_OF_S1_CAN_BE_FELT : SystemMessageId.IT_IS_DAWN_AND_THE_EFFECT_OF_S1_WILL_NOW_DISAPPEAR); + msg.addSkillName(SHADOW_SENSE); + + for (Creature creature : NIGHT_STAT_CHARACTERS) + { + // Pump again. + creature.getStat().recalculateStats(true); + + // Send Shadow Sense message when player has skill. + if (creature.getKnownSkill(SHADOW_SENSE) != null) + { + creature.sendPacket(msg); + } + } + } + } +} diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java deleted file mode 100644 index 55cb0d4924..0000000000 --- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package handlers.effecthandlers; - -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicBoolean; - -import org.l2jmobius.gameserver.enums.StatModifierType; -import org.l2jmobius.gameserver.model.StatSet; -import org.l2jmobius.gameserver.model.actor.Creature; -import org.l2jmobius.gameserver.model.effects.AbstractEffect; -import org.l2jmobius.gameserver.model.events.Containers; -import org.l2jmobius.gameserver.model.events.EventType; -import org.l2jmobius.gameserver.model.events.ListenersContainer; -import org.l2jmobius.gameserver.model.events.impl.OnDayNightChange; -import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; -import org.l2jmobius.gameserver.model.item.instance.Item; -import org.l2jmobius.gameserver.model.skill.Skill; -import org.l2jmobius.gameserver.model.stats.Stat; -import org.l2jmobius.gameserver.network.SystemMessageId; -import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; -import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager; - -/** - * @author Mobius - */ -public class StatAddForNight extends AbstractEffect -{ - private static final AtomicBoolean DAY_TIME = new AtomicBoolean(GameTimeTaskManager.getInstance().isNight()); - private static final Set NIGHT_STAT_CHARACTERS = ConcurrentHashMap.newKeySet(); - private static final int SHADOW_SENSE = 294; - - private final Stat _stat; - private final int _amount; - protected final StatModifierType _mode; - - public StatAddForNight(StatSet params) - { - _stat = params.getEnum("stat", Stat.class); - _amount = params.getInt("amount"); - _mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF); - - // Init a global day-night change listener. - final ListenersContainer container = Containers.Global(); - container.addListener(new ConsumerEventListener(container, EventType.ON_DAY_NIGHT_CHANGE, (OnDayNightChange event) -> onDayNightChange(event), this)); - } - - @Override - public void onStart(Creature effector, Creature effected, Skill skill, Item item) - { - NIGHT_STAT_CHARACTERS.add(effected); - } - - @Override - public void onExit(Creature effector, Creature effected, Skill skill) - { - NIGHT_STAT_CHARACTERS.remove(effected); - } - - @Override - public void pump(Creature effected, Skill skill) - { - // Not night. - if (!GameTimeTaskManager.getInstance().isNight()) - { - return; - } - - // Apply stat. - switch (_mode) - { - case DIFF: - { - effected.getStat().mergeAdd(_stat, _amount); - break; - } - case PER: - { - effected.getStat().mergeMul(_stat, (_amount / 100) + 1); - break; - } - } - } - - public void onDayNightChange(OnDayNightChange event) - { - synchronized (DAY_TIME) - { - final boolean isNight = event.isNight(); - - // Run only once per daytime change. - if (isNight == DAY_TIME.get()) - { - return; - } - DAY_TIME.set(isNight); - - // System message for Shadow Sense. - final SystemMessage msg = new SystemMessage(isNight ? SystemMessageId.IT_IS_NOW_MIDNIGHT_AND_THE_EFFECT_OF_S1_CAN_BE_FELT : SystemMessageId.IT_IS_DAWN_AND_THE_EFFECT_OF_S1_WILL_NOW_DISAPPEAR); - msg.addSkillName(SHADOW_SENSE); - - for (Creature creature : NIGHT_STAT_CHARACTERS) - { - // Pump again. - creature.getStat().recalculateStats(true); - - // Send Shadow Sense message when player has skill. - if (creature.getKnownSkill(SHADOW_SENSE) != null) - { - creature.sendPacket(msg); - } - } - } - } -} diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/stats/skills/00200-00299.xml b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/stats/skills/00200-00299.xml index a9f607e257..cba90169b4 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/stats/skills/00200-00299.xml +++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/stats/skills/00200-00299.xml @@ -7234,7 +7234,7 @@ P 5 - + ACCURACY_COMBAT 3 diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/stats/skills/documentation.txt index a83f821655..cb2787b9cc 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/stats/skills/documentation.txt +++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/stats/skills/documentation.txt @@ -205,6 +205,7 @@ MpRegen: MP Regeneration stat. MpShield: Transfers given percentage of damage as mana damage. Mana Shield. MpVampiricAttack: Absorbs given percentage of mana during attack. Mute: Prevents target from using magical skills. Silence. +NightStatModifier: Modify a specific stat at night time. (l2jmobius) NoblesseBless: Does not remove buffs upon death except itself. OpenChest: Opens a treasure chest. OpenCommonRecipeBook: Shows the common recipe book window. @@ -304,7 +305,6 @@ SpiritExpModify: Spirit EXP modify stat effect. (JoeAlisson) SpModify: Bonus SP stat. Spoil: Spoils a mob activating its extra sweep drop. StatAddForLevel: Adds a fixed amount of a Stat for a specific player level. (l2jmobius) -StatAddForNight: Modify a specific stat at night time. (l2jmobius) StatBonusSkillCritical: Changes skill critical rate to depend on the specified base stat. StatBonusSpeed: Changes Speed stat to depend on the specified base stat. StatByMoveType: Adds stat based on your movement type (standing, running, walking). diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/EffectMasterHandler.java index fd937c2af2..969874cbd3 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -235,6 +235,7 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("MpShield", MpShield::new); EffectHandler.getInstance().registerHandler("MpVampiricAttack", MpVampiricAttack::new); EffectHandler.getInstance().registerHandler("Mute", Mute::new); + EffectHandler.getInstance().registerHandler("NightStatModifier", NightStatModifier::new); EffectHandler.getInstance().registerHandler("NoblesseBless", NoblesseBless::new); EffectHandler.getInstance().registerHandler("OpenChest", OpenChest::new); EffectHandler.getInstance().registerHandler("OpenCommonRecipeBook", OpenCommonRecipeBook::new); @@ -335,7 +336,6 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("SpModify", SpModify::new); EffectHandler.getInstance().registerHandler("Spoil", Spoil::new); EffectHandler.getInstance().registerHandler("StatAddForLevel", StatAddForLevel::new); - EffectHandler.getInstance().registerHandler("StatAddForNight", StatAddForNight::new); EffectHandler.getInstance().registerHandler("StatBonusSkillCritical", StatBonusSkillCritical::new); EffectHandler.getInstance().registerHandler("StatBonusSpeed", StatBonusSpeed::new); EffectHandler.getInstance().registerHandler("StatByMoveType", StatByMoveType::new); diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java new file mode 100644 index 0000000000..8dce6e4312 --- /dev/null +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java @@ -0,0 +1,130 @@ +/* + * 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.effecthandlers; + +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicBoolean; + +import org.l2jmobius.gameserver.enums.StatModifierType; +import org.l2jmobius.gameserver.model.StatSet; +import org.l2jmobius.gameserver.model.actor.Creature; +import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.events.Containers; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.ListenersContainer; +import org.l2jmobius.gameserver.model.events.impl.OnDayNightChange; +import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; +import org.l2jmobius.gameserver.model.item.instance.Item; +import org.l2jmobius.gameserver.model.skill.Skill; +import org.l2jmobius.gameserver.model.stats.Stat; +import org.l2jmobius.gameserver.network.SystemMessageId; +import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; +import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager; + +/** + * @author Mobius + */ +public class NightStatModifier extends AbstractEffect +{ + private static final AtomicBoolean DAY_TIME = new AtomicBoolean(GameTimeTaskManager.getInstance().isNight()); + private static final Set NIGHT_STAT_CHARACTERS = ConcurrentHashMap.newKeySet(); + private static final int SHADOW_SENSE = 294; + + private final Stat _stat; + private final int _amount; + protected final StatModifierType _mode; + + public NightStatModifier(StatSet params) + { + _stat = params.getEnum("stat", Stat.class); + _amount = params.getInt("amount"); + _mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF); + + // Init a global day-night change listener. + final ListenersContainer container = Containers.Global(); + container.addListener(new ConsumerEventListener(container, EventType.ON_DAY_NIGHT_CHANGE, (OnDayNightChange event) -> onDayNightChange(event), this)); + } + + @Override + public void onStart(Creature effector, Creature effected, Skill skill, Item item) + { + NIGHT_STAT_CHARACTERS.add(effected); + } + + @Override + public void onExit(Creature effector, Creature effected, Skill skill) + { + NIGHT_STAT_CHARACTERS.remove(effected); + } + + @Override + public void pump(Creature effected, Skill skill) + { + // Not night. + if (!GameTimeTaskManager.getInstance().isNight()) + { + return; + } + + // Apply stat. + switch (_mode) + { + case DIFF: + { + effected.getStat().mergeAdd(_stat, _amount); + break; + } + case PER: + { + effected.getStat().mergeMul(_stat, (_amount / 100) + 1); + break; + } + } + } + + public void onDayNightChange(OnDayNightChange event) + { + synchronized (DAY_TIME) + { + final boolean isNight = event.isNight(); + + // Run only once per daytime change. + if (isNight == DAY_TIME.get()) + { + return; + } + DAY_TIME.set(isNight); + + // System message for Shadow Sense. + final SystemMessage msg = new SystemMessage(isNight ? SystemMessageId.IT_IS_NOW_MIDNIGHT_AND_THE_EFFECT_OF_S1_CAN_BE_FELT : SystemMessageId.IT_IS_DAWN_AND_THE_EFFECT_OF_S1_WILL_NOW_DISAPPEAR); + msg.addSkillName(SHADOW_SENSE); + + for (Creature creature : NIGHT_STAT_CHARACTERS) + { + // Pump again. + creature.getStat().recalculateStats(true); + + // Send Shadow Sense message when player has skill. + if (creature.getKnownSkill(SHADOW_SENSE) != null) + { + creature.sendPacket(msg); + } + } + } + } +} diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java deleted file mode 100644 index 55cb0d4924..0000000000 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package handlers.effecthandlers; - -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicBoolean; - -import org.l2jmobius.gameserver.enums.StatModifierType; -import org.l2jmobius.gameserver.model.StatSet; -import org.l2jmobius.gameserver.model.actor.Creature; -import org.l2jmobius.gameserver.model.effects.AbstractEffect; -import org.l2jmobius.gameserver.model.events.Containers; -import org.l2jmobius.gameserver.model.events.EventType; -import org.l2jmobius.gameserver.model.events.ListenersContainer; -import org.l2jmobius.gameserver.model.events.impl.OnDayNightChange; -import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; -import org.l2jmobius.gameserver.model.item.instance.Item; -import org.l2jmobius.gameserver.model.skill.Skill; -import org.l2jmobius.gameserver.model.stats.Stat; -import org.l2jmobius.gameserver.network.SystemMessageId; -import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; -import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager; - -/** - * @author Mobius - */ -public class StatAddForNight extends AbstractEffect -{ - private static final AtomicBoolean DAY_TIME = new AtomicBoolean(GameTimeTaskManager.getInstance().isNight()); - private static final Set NIGHT_STAT_CHARACTERS = ConcurrentHashMap.newKeySet(); - private static final int SHADOW_SENSE = 294; - - private final Stat _stat; - private final int _amount; - protected final StatModifierType _mode; - - public StatAddForNight(StatSet params) - { - _stat = params.getEnum("stat", Stat.class); - _amount = params.getInt("amount"); - _mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF); - - // Init a global day-night change listener. - final ListenersContainer container = Containers.Global(); - container.addListener(new ConsumerEventListener(container, EventType.ON_DAY_NIGHT_CHANGE, (OnDayNightChange event) -> onDayNightChange(event), this)); - } - - @Override - public void onStart(Creature effector, Creature effected, Skill skill, Item item) - { - NIGHT_STAT_CHARACTERS.add(effected); - } - - @Override - public void onExit(Creature effector, Creature effected, Skill skill) - { - NIGHT_STAT_CHARACTERS.remove(effected); - } - - @Override - public void pump(Creature effected, Skill skill) - { - // Not night. - if (!GameTimeTaskManager.getInstance().isNight()) - { - return; - } - - // Apply stat. - switch (_mode) - { - case DIFF: - { - effected.getStat().mergeAdd(_stat, _amount); - break; - } - case PER: - { - effected.getStat().mergeMul(_stat, (_amount / 100) + 1); - break; - } - } - } - - public void onDayNightChange(OnDayNightChange event) - { - synchronized (DAY_TIME) - { - final boolean isNight = event.isNight(); - - // Run only once per daytime change. - if (isNight == DAY_TIME.get()) - { - return; - } - DAY_TIME.set(isNight); - - // System message for Shadow Sense. - final SystemMessage msg = new SystemMessage(isNight ? SystemMessageId.IT_IS_NOW_MIDNIGHT_AND_THE_EFFECT_OF_S1_CAN_BE_FELT : SystemMessageId.IT_IS_DAWN_AND_THE_EFFECT_OF_S1_WILL_NOW_DISAPPEAR); - msg.addSkillName(SHADOW_SENSE); - - for (Creature creature : NIGHT_STAT_CHARACTERS) - { - // Pump again. - creature.getStat().recalculateStats(true); - - // Send Shadow Sense message when player has skill. - if (creature.getKnownSkill(SHADOW_SENSE) != null) - { - creature.sendPacket(msg); - } - } - } - } -} diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/stats/skills/00200-00299.xml b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/stats/skills/00200-00299.xml index e19ce04464..83043c0313 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/stats/skills/00200-00299.xml +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/stats/skills/00200-00299.xml @@ -7817,7 +7817,7 @@ P 5 - + ACCURACY_COMBAT 3 diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/stats/skills/documentation.txt index a83f821655..cb2787b9cc 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/stats/skills/documentation.txt +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/stats/skills/documentation.txt @@ -205,6 +205,7 @@ MpRegen: MP Regeneration stat. MpShield: Transfers given percentage of damage as mana damage. Mana Shield. MpVampiricAttack: Absorbs given percentage of mana during attack. Mute: Prevents target from using magical skills. Silence. +NightStatModifier: Modify a specific stat at night time. (l2jmobius) NoblesseBless: Does not remove buffs upon death except itself. OpenChest: Opens a treasure chest. OpenCommonRecipeBook: Shows the common recipe book window. @@ -304,7 +305,6 @@ SpiritExpModify: Spirit EXP modify stat effect. (JoeAlisson) SpModify: Bonus SP stat. Spoil: Spoils a mob activating its extra sweep drop. StatAddForLevel: Adds a fixed amount of a Stat for a specific player level. (l2jmobius) -StatAddForNight: Modify a specific stat at night time. (l2jmobius) StatBonusSkillCritical: Changes skill critical rate to depend on the specified base stat. StatBonusSpeed: Changes Speed stat to depend on the specified base stat. StatByMoveType: Adds stat based on your movement type (standing, running, walking). diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/EffectMasterHandler.java index c92fcb5baf..f865417b40 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -237,6 +237,7 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("MpShield", MpShield::new); EffectHandler.getInstance().registerHandler("MpVampiricAttack", MpVampiricAttack::new); EffectHandler.getInstance().registerHandler("Mute", Mute::new); + EffectHandler.getInstance().registerHandler("NightStatModifier", NightStatModifier::new); EffectHandler.getInstance().registerHandler("NoblesseBless", NoblesseBless::new); EffectHandler.getInstance().registerHandler("OpenChest", OpenChest::new); EffectHandler.getInstance().registerHandler("OpenCommonRecipeBook", OpenCommonRecipeBook::new); @@ -337,7 +338,6 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("SpModify", SpModify::new); EffectHandler.getInstance().registerHandler("Spoil", Spoil::new); EffectHandler.getInstance().registerHandler("StatAddForLevel", StatAddForLevel::new); - EffectHandler.getInstance().registerHandler("StatAddForNight", StatAddForNight::new); EffectHandler.getInstance().registerHandler("StatBonusSkillCritical", StatBonusSkillCritical::new); EffectHandler.getInstance().registerHandler("StatBonusSpeed", StatBonusSpeed::new); EffectHandler.getInstance().registerHandler("StatByMoveType", StatByMoveType::new); diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java new file mode 100644 index 0000000000..8dce6e4312 --- /dev/null +++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java @@ -0,0 +1,130 @@ +/* + * 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.effecthandlers; + +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicBoolean; + +import org.l2jmobius.gameserver.enums.StatModifierType; +import org.l2jmobius.gameserver.model.StatSet; +import org.l2jmobius.gameserver.model.actor.Creature; +import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.events.Containers; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.ListenersContainer; +import org.l2jmobius.gameserver.model.events.impl.OnDayNightChange; +import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; +import org.l2jmobius.gameserver.model.item.instance.Item; +import org.l2jmobius.gameserver.model.skill.Skill; +import org.l2jmobius.gameserver.model.stats.Stat; +import org.l2jmobius.gameserver.network.SystemMessageId; +import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; +import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager; + +/** + * @author Mobius + */ +public class NightStatModifier extends AbstractEffect +{ + private static final AtomicBoolean DAY_TIME = new AtomicBoolean(GameTimeTaskManager.getInstance().isNight()); + private static final Set NIGHT_STAT_CHARACTERS = ConcurrentHashMap.newKeySet(); + private static final int SHADOW_SENSE = 294; + + private final Stat _stat; + private final int _amount; + protected final StatModifierType _mode; + + public NightStatModifier(StatSet params) + { + _stat = params.getEnum("stat", Stat.class); + _amount = params.getInt("amount"); + _mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF); + + // Init a global day-night change listener. + final ListenersContainer container = Containers.Global(); + container.addListener(new ConsumerEventListener(container, EventType.ON_DAY_NIGHT_CHANGE, (OnDayNightChange event) -> onDayNightChange(event), this)); + } + + @Override + public void onStart(Creature effector, Creature effected, Skill skill, Item item) + { + NIGHT_STAT_CHARACTERS.add(effected); + } + + @Override + public void onExit(Creature effector, Creature effected, Skill skill) + { + NIGHT_STAT_CHARACTERS.remove(effected); + } + + @Override + public void pump(Creature effected, Skill skill) + { + // Not night. + if (!GameTimeTaskManager.getInstance().isNight()) + { + return; + } + + // Apply stat. + switch (_mode) + { + case DIFF: + { + effected.getStat().mergeAdd(_stat, _amount); + break; + } + case PER: + { + effected.getStat().mergeMul(_stat, (_amount / 100) + 1); + break; + } + } + } + + public void onDayNightChange(OnDayNightChange event) + { + synchronized (DAY_TIME) + { + final boolean isNight = event.isNight(); + + // Run only once per daytime change. + if (isNight == DAY_TIME.get()) + { + return; + } + DAY_TIME.set(isNight); + + // System message for Shadow Sense. + final SystemMessage msg = new SystemMessage(isNight ? SystemMessageId.IT_IS_NOW_MIDNIGHT_AND_THE_EFFECT_OF_S1_CAN_BE_FELT : SystemMessageId.IT_IS_DAWN_AND_THE_EFFECT_OF_S1_WILL_NOW_DISAPPEAR); + msg.addSkillName(SHADOW_SENSE); + + for (Creature creature : NIGHT_STAT_CHARACTERS) + { + // Pump again. + creature.getStat().recalculateStats(true); + + // Send Shadow Sense message when player has skill. + if (creature.getKnownSkill(SHADOW_SENSE) != null) + { + creature.sendPacket(msg); + } + } + } + } +} diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java deleted file mode 100644 index 55cb0d4924..0000000000 --- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package handlers.effecthandlers; - -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicBoolean; - -import org.l2jmobius.gameserver.enums.StatModifierType; -import org.l2jmobius.gameserver.model.StatSet; -import org.l2jmobius.gameserver.model.actor.Creature; -import org.l2jmobius.gameserver.model.effects.AbstractEffect; -import org.l2jmobius.gameserver.model.events.Containers; -import org.l2jmobius.gameserver.model.events.EventType; -import org.l2jmobius.gameserver.model.events.ListenersContainer; -import org.l2jmobius.gameserver.model.events.impl.OnDayNightChange; -import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; -import org.l2jmobius.gameserver.model.item.instance.Item; -import org.l2jmobius.gameserver.model.skill.Skill; -import org.l2jmobius.gameserver.model.stats.Stat; -import org.l2jmobius.gameserver.network.SystemMessageId; -import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; -import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager; - -/** - * @author Mobius - */ -public class StatAddForNight extends AbstractEffect -{ - private static final AtomicBoolean DAY_TIME = new AtomicBoolean(GameTimeTaskManager.getInstance().isNight()); - private static final Set NIGHT_STAT_CHARACTERS = ConcurrentHashMap.newKeySet(); - private static final int SHADOW_SENSE = 294; - - private final Stat _stat; - private final int _amount; - protected final StatModifierType _mode; - - public StatAddForNight(StatSet params) - { - _stat = params.getEnum("stat", Stat.class); - _amount = params.getInt("amount"); - _mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF); - - // Init a global day-night change listener. - final ListenersContainer container = Containers.Global(); - container.addListener(new ConsumerEventListener(container, EventType.ON_DAY_NIGHT_CHANGE, (OnDayNightChange event) -> onDayNightChange(event), this)); - } - - @Override - public void onStart(Creature effector, Creature effected, Skill skill, Item item) - { - NIGHT_STAT_CHARACTERS.add(effected); - } - - @Override - public void onExit(Creature effector, Creature effected, Skill skill) - { - NIGHT_STAT_CHARACTERS.remove(effected); - } - - @Override - public void pump(Creature effected, Skill skill) - { - // Not night. - if (!GameTimeTaskManager.getInstance().isNight()) - { - return; - } - - // Apply stat. - switch (_mode) - { - case DIFF: - { - effected.getStat().mergeAdd(_stat, _amount); - break; - } - case PER: - { - effected.getStat().mergeMul(_stat, (_amount / 100) + 1); - break; - } - } - } - - public void onDayNightChange(OnDayNightChange event) - { - synchronized (DAY_TIME) - { - final boolean isNight = event.isNight(); - - // Run only once per daytime change. - if (isNight == DAY_TIME.get()) - { - return; - } - DAY_TIME.set(isNight); - - // System message for Shadow Sense. - final SystemMessage msg = new SystemMessage(isNight ? SystemMessageId.IT_IS_NOW_MIDNIGHT_AND_THE_EFFECT_OF_S1_CAN_BE_FELT : SystemMessageId.IT_IS_DAWN_AND_THE_EFFECT_OF_S1_WILL_NOW_DISAPPEAR); - msg.addSkillName(SHADOW_SENSE); - - for (Creature creature : NIGHT_STAT_CHARACTERS) - { - // Pump again. - creature.getStat().recalculateStats(true); - - // Send Shadow Sense message when player has skill. - if (creature.getKnownSkill(SHADOW_SENSE) != null) - { - creature.sendPacket(msg); - } - } - } - } -} diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/stats/skills/00200-00299.xml b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/stats/skills/00200-00299.xml index 1dac7a2975..5b89e79935 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/stats/skills/00200-00299.xml +++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/stats/skills/00200-00299.xml @@ -7817,7 +7817,7 @@ P 5 - + ACCURACY_COMBAT 3 diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/stats/skills/documentation.txt index e4a9d1fa66..d387638a59 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/stats/skills/documentation.txt +++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/stats/skills/documentation.txt @@ -207,6 +207,7 @@ MpRegen: MP Regeneration stat. MpShield: Transfers given percentage of damage as mana damage. Mana Shield. MpVampiricAttack: Absorbs given percentage of mana during attack. Mute: Prevents target from using magical skills. Silence. +NightStatModifier: Modify a specific stat at night time. (l2jmobius) NoblesseBless: Does not remove buffs upon death except itself. OpenChest: Opens a treasure chest. OpenCommonRecipeBook: Shows the common recipe book window. @@ -306,7 +307,6 @@ SpiritExpModify: Spirit EXP modify stat effect. (JoeAlisson) SpModify: Bonus SP stat. Spoil: Spoils a mob activating its extra sweep drop. StatAddForLevel: Adds a fixed amount of a Stat for a specific player level. (l2jmobius) -StatAddForNight: Modify a specific stat at night time. (l2jmobius) StatBonusSkillCritical: Changes skill critical rate to depend on the specified base stat. StatBonusSpeed: Changes Speed stat to depend on the specified base stat. StatByMoveType: Adds stat based on your movement type (standing, running, walking). diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/EffectMasterHandler.java index 3c41ee6c2c..4fd4274ef9 100644 --- a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -232,6 +232,7 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("MpShield", MpShield::new); EffectHandler.getInstance().registerHandler("MpVampiricAttack", MpVampiricAttack::new); EffectHandler.getInstance().registerHandler("Mute", Mute::new); + EffectHandler.getInstance().registerHandler("NightStatModifier", NightStatModifier::new); EffectHandler.getInstance().registerHandler("NoblesseBless", NoblesseBless::new); EffectHandler.getInstance().registerHandler("OpenChest", OpenChest::new); EffectHandler.getInstance().registerHandler("OpenCommonRecipeBook", OpenCommonRecipeBook::new); @@ -332,7 +333,6 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("SpModify", SpModify::new); EffectHandler.getInstance().registerHandler("Spoil", Spoil::new); EffectHandler.getInstance().registerHandler("StatAddForLevel", StatAddForLevel::new); - EffectHandler.getInstance().registerHandler("StatAddForNight", StatAddForNight::new); EffectHandler.getInstance().registerHandler("StatBonusSkillCritical", StatBonusSkillCritical::new); EffectHandler.getInstance().registerHandler("StatBonusSpeed", StatBonusSpeed::new); EffectHandler.getInstance().registerHandler("StatByMoveType", StatByMoveType::new); diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java new file mode 100644 index 0000000000..8dce6e4312 --- /dev/null +++ b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java @@ -0,0 +1,130 @@ +/* + * 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.effecthandlers; + +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicBoolean; + +import org.l2jmobius.gameserver.enums.StatModifierType; +import org.l2jmobius.gameserver.model.StatSet; +import org.l2jmobius.gameserver.model.actor.Creature; +import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.events.Containers; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.ListenersContainer; +import org.l2jmobius.gameserver.model.events.impl.OnDayNightChange; +import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; +import org.l2jmobius.gameserver.model.item.instance.Item; +import org.l2jmobius.gameserver.model.skill.Skill; +import org.l2jmobius.gameserver.model.stats.Stat; +import org.l2jmobius.gameserver.network.SystemMessageId; +import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; +import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager; + +/** + * @author Mobius + */ +public class NightStatModifier extends AbstractEffect +{ + private static final AtomicBoolean DAY_TIME = new AtomicBoolean(GameTimeTaskManager.getInstance().isNight()); + private static final Set NIGHT_STAT_CHARACTERS = ConcurrentHashMap.newKeySet(); + private static final int SHADOW_SENSE = 294; + + private final Stat _stat; + private final int _amount; + protected final StatModifierType _mode; + + public NightStatModifier(StatSet params) + { + _stat = params.getEnum("stat", Stat.class); + _amount = params.getInt("amount"); + _mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF); + + // Init a global day-night change listener. + final ListenersContainer container = Containers.Global(); + container.addListener(new ConsumerEventListener(container, EventType.ON_DAY_NIGHT_CHANGE, (OnDayNightChange event) -> onDayNightChange(event), this)); + } + + @Override + public void onStart(Creature effector, Creature effected, Skill skill, Item item) + { + NIGHT_STAT_CHARACTERS.add(effected); + } + + @Override + public void onExit(Creature effector, Creature effected, Skill skill) + { + NIGHT_STAT_CHARACTERS.remove(effected); + } + + @Override + public void pump(Creature effected, Skill skill) + { + // Not night. + if (!GameTimeTaskManager.getInstance().isNight()) + { + return; + } + + // Apply stat. + switch (_mode) + { + case DIFF: + { + effected.getStat().mergeAdd(_stat, _amount); + break; + } + case PER: + { + effected.getStat().mergeMul(_stat, (_amount / 100) + 1); + break; + } + } + } + + public void onDayNightChange(OnDayNightChange event) + { + synchronized (DAY_TIME) + { + final boolean isNight = event.isNight(); + + // Run only once per daytime change. + if (isNight == DAY_TIME.get()) + { + return; + } + DAY_TIME.set(isNight); + + // System message for Shadow Sense. + final SystemMessage msg = new SystemMessage(isNight ? SystemMessageId.IT_IS_NOW_MIDNIGHT_AND_THE_EFFECT_OF_S1_CAN_BE_FELT : SystemMessageId.IT_IS_DAWN_AND_THE_EFFECT_OF_S1_WILL_NOW_DISAPPEAR); + msg.addSkillName(SHADOW_SENSE); + + for (Creature creature : NIGHT_STAT_CHARACTERS) + { + // Pump again. + creature.getStat().recalculateStats(true); + + // Send Shadow Sense message when player has skill. + if (creature.getKnownSkill(SHADOW_SENSE) != null) + { + creature.sendPacket(msg); + } + } + } + } +} diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java deleted file mode 100644 index 55cb0d4924..0000000000 --- a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package handlers.effecthandlers; - -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicBoolean; - -import org.l2jmobius.gameserver.enums.StatModifierType; -import org.l2jmobius.gameserver.model.StatSet; -import org.l2jmobius.gameserver.model.actor.Creature; -import org.l2jmobius.gameserver.model.effects.AbstractEffect; -import org.l2jmobius.gameserver.model.events.Containers; -import org.l2jmobius.gameserver.model.events.EventType; -import org.l2jmobius.gameserver.model.events.ListenersContainer; -import org.l2jmobius.gameserver.model.events.impl.OnDayNightChange; -import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; -import org.l2jmobius.gameserver.model.item.instance.Item; -import org.l2jmobius.gameserver.model.skill.Skill; -import org.l2jmobius.gameserver.model.stats.Stat; -import org.l2jmobius.gameserver.network.SystemMessageId; -import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; -import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager; - -/** - * @author Mobius - */ -public class StatAddForNight extends AbstractEffect -{ - private static final AtomicBoolean DAY_TIME = new AtomicBoolean(GameTimeTaskManager.getInstance().isNight()); - private static final Set NIGHT_STAT_CHARACTERS = ConcurrentHashMap.newKeySet(); - private static final int SHADOW_SENSE = 294; - - private final Stat _stat; - private final int _amount; - protected final StatModifierType _mode; - - public StatAddForNight(StatSet params) - { - _stat = params.getEnum("stat", Stat.class); - _amount = params.getInt("amount"); - _mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF); - - // Init a global day-night change listener. - final ListenersContainer container = Containers.Global(); - container.addListener(new ConsumerEventListener(container, EventType.ON_DAY_NIGHT_CHANGE, (OnDayNightChange event) -> onDayNightChange(event), this)); - } - - @Override - public void onStart(Creature effector, Creature effected, Skill skill, Item item) - { - NIGHT_STAT_CHARACTERS.add(effected); - } - - @Override - public void onExit(Creature effector, Creature effected, Skill skill) - { - NIGHT_STAT_CHARACTERS.remove(effected); - } - - @Override - public void pump(Creature effected, Skill skill) - { - // Not night. - if (!GameTimeTaskManager.getInstance().isNight()) - { - return; - } - - // Apply stat. - switch (_mode) - { - case DIFF: - { - effected.getStat().mergeAdd(_stat, _amount); - break; - } - case PER: - { - effected.getStat().mergeMul(_stat, (_amount / 100) + 1); - break; - } - } - } - - public void onDayNightChange(OnDayNightChange event) - { - synchronized (DAY_TIME) - { - final boolean isNight = event.isNight(); - - // Run only once per daytime change. - if (isNight == DAY_TIME.get()) - { - return; - } - DAY_TIME.set(isNight); - - // System message for Shadow Sense. - final SystemMessage msg = new SystemMessage(isNight ? SystemMessageId.IT_IS_NOW_MIDNIGHT_AND_THE_EFFECT_OF_S1_CAN_BE_FELT : SystemMessageId.IT_IS_DAWN_AND_THE_EFFECT_OF_S1_WILL_NOW_DISAPPEAR); - msg.addSkillName(SHADOW_SENSE); - - for (Creature creature : NIGHT_STAT_CHARACTERS) - { - // Pump again. - creature.getStat().recalculateStats(true); - - // Send Shadow Sense message when player has skill. - if (creature.getKnownSkill(SHADOW_SENSE) != null) - { - creature.sendPacket(msg); - } - } - } - } -} diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/00200-00299.xml b/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/00200-00299.xml index ffa1c93e25..066e1a340b 100644 --- a/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/00200-00299.xml +++ b/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/00200-00299.xml @@ -6462,7 +6462,7 @@ P 5 - + ACCURACY_COMBAT 3 diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/documentation.txt index e070752f7d..efb126e47d 100644 --- a/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/documentation.txt +++ b/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/documentation.txt @@ -202,6 +202,7 @@ MpRegen: MP Regeneration stat. MpShield: Transfers given percentage of damage as mana damage. Mana Shield. MpVampiricAttack: Absorbs given percentage of mana during attack. Mute: Prevents target from using magical skills. Silence. +NightStatModifier: Modify a specific stat at night time. (l2jmobius) NoblesseBless: Does not remove buffs upon death except itself. OpenChest: Opens a treasure chest. OpenCommonRecipeBook: Shows the common recipe book window. @@ -300,7 +301,6 @@ SpeedLimit: Increase a character's max Speed limit. (l2jmobius) SpModify: Bonus SP stat. Spoil: Spoils a mob activating its extra sweep drop. StatAddForLevel: Adds a fixed amount of a Stat for a specific player level. (l2jmobius) -StatAddForNight: Modify a specific stat at night time. (l2jmobius) StatBonusSkillCritical: Changes skill critical rate to depend on the specified base stat. StatBonusSpeed: Changes Speed stat to depend on the specified base stat. StatByMoveType: Adds stat based on your movement type (standing, running, walking). diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/handlers/EffectMasterHandler.java index 4d7e86920d..9585b44c54 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -242,6 +242,7 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("MpShield", MpShield::new); EffectHandler.getInstance().registerHandler("MpVampiricAttack", MpVampiricAttack::new); EffectHandler.getInstance().registerHandler("Mute", Mute::new); + EffectHandler.getInstance().registerHandler("NightStatModifier", NightStatModifier::new); EffectHandler.getInstance().registerHandler("NoblesseBless", NoblesseBless::new); EffectHandler.getInstance().registerHandler("OpenChest", OpenChest::new); EffectHandler.getInstance().registerHandler("OpenCommonRecipeBook", OpenCommonRecipeBook::new); @@ -345,7 +346,6 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("Spoil", Spoil::new); EffectHandler.getInstance().registerHandler("StatAddForLevel", StatAddForLevel::new); EffectHandler.getInstance().registerHandler("StatAddForMp", StatAddForMp::new); - EffectHandler.getInstance().registerHandler("StatAddForNight", StatAddForNight::new); EffectHandler.getInstance().registerHandler("StatBonusSkillCritical", StatBonusSkillCritical::new); EffectHandler.getInstance().registerHandler("StatBonusSpeed", StatBonusSpeed::new); EffectHandler.getInstance().registerHandler("StatByMoveType", StatByMoveType::new); diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java new file mode 100644 index 0000000000..8dce6e4312 --- /dev/null +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java @@ -0,0 +1,130 @@ +/* + * 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.effecthandlers; + +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicBoolean; + +import org.l2jmobius.gameserver.enums.StatModifierType; +import org.l2jmobius.gameserver.model.StatSet; +import org.l2jmobius.gameserver.model.actor.Creature; +import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.events.Containers; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.ListenersContainer; +import org.l2jmobius.gameserver.model.events.impl.OnDayNightChange; +import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; +import org.l2jmobius.gameserver.model.item.instance.Item; +import org.l2jmobius.gameserver.model.skill.Skill; +import org.l2jmobius.gameserver.model.stats.Stat; +import org.l2jmobius.gameserver.network.SystemMessageId; +import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; +import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager; + +/** + * @author Mobius + */ +public class NightStatModifier extends AbstractEffect +{ + private static final AtomicBoolean DAY_TIME = new AtomicBoolean(GameTimeTaskManager.getInstance().isNight()); + private static final Set NIGHT_STAT_CHARACTERS = ConcurrentHashMap.newKeySet(); + private static final int SHADOW_SENSE = 294; + + private final Stat _stat; + private final int _amount; + protected final StatModifierType _mode; + + public NightStatModifier(StatSet params) + { + _stat = params.getEnum("stat", Stat.class); + _amount = params.getInt("amount"); + _mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF); + + // Init a global day-night change listener. + final ListenersContainer container = Containers.Global(); + container.addListener(new ConsumerEventListener(container, EventType.ON_DAY_NIGHT_CHANGE, (OnDayNightChange event) -> onDayNightChange(event), this)); + } + + @Override + public void onStart(Creature effector, Creature effected, Skill skill, Item item) + { + NIGHT_STAT_CHARACTERS.add(effected); + } + + @Override + public void onExit(Creature effector, Creature effected, Skill skill) + { + NIGHT_STAT_CHARACTERS.remove(effected); + } + + @Override + public void pump(Creature effected, Skill skill) + { + // Not night. + if (!GameTimeTaskManager.getInstance().isNight()) + { + return; + } + + // Apply stat. + switch (_mode) + { + case DIFF: + { + effected.getStat().mergeAdd(_stat, _amount); + break; + } + case PER: + { + effected.getStat().mergeMul(_stat, (_amount / 100) + 1); + break; + } + } + } + + public void onDayNightChange(OnDayNightChange event) + { + synchronized (DAY_TIME) + { + final boolean isNight = event.isNight(); + + // Run only once per daytime change. + if (isNight == DAY_TIME.get()) + { + return; + } + DAY_TIME.set(isNight); + + // System message for Shadow Sense. + final SystemMessage msg = new SystemMessage(isNight ? SystemMessageId.IT_IS_NOW_MIDNIGHT_AND_THE_EFFECT_OF_S1_CAN_BE_FELT : SystemMessageId.IT_IS_DAWN_AND_THE_EFFECT_OF_S1_WILL_NOW_DISAPPEAR); + msg.addSkillName(SHADOW_SENSE); + + for (Creature creature : NIGHT_STAT_CHARACTERS) + { + // Pump again. + creature.getStat().recalculateStats(true); + + // Send Shadow Sense message when player has skill. + if (creature.getKnownSkill(SHADOW_SENSE) != null) + { + creature.sendPacket(msg); + } + } + } + } +} diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java deleted file mode 100644 index 55cb0d4924..0000000000 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package handlers.effecthandlers; - -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicBoolean; - -import org.l2jmobius.gameserver.enums.StatModifierType; -import org.l2jmobius.gameserver.model.StatSet; -import org.l2jmobius.gameserver.model.actor.Creature; -import org.l2jmobius.gameserver.model.effects.AbstractEffect; -import org.l2jmobius.gameserver.model.events.Containers; -import org.l2jmobius.gameserver.model.events.EventType; -import org.l2jmobius.gameserver.model.events.ListenersContainer; -import org.l2jmobius.gameserver.model.events.impl.OnDayNightChange; -import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; -import org.l2jmobius.gameserver.model.item.instance.Item; -import org.l2jmobius.gameserver.model.skill.Skill; -import org.l2jmobius.gameserver.model.stats.Stat; -import org.l2jmobius.gameserver.network.SystemMessageId; -import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; -import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager; - -/** - * @author Mobius - */ -public class StatAddForNight extends AbstractEffect -{ - private static final AtomicBoolean DAY_TIME = new AtomicBoolean(GameTimeTaskManager.getInstance().isNight()); - private static final Set NIGHT_STAT_CHARACTERS = ConcurrentHashMap.newKeySet(); - private static final int SHADOW_SENSE = 294; - - private final Stat _stat; - private final int _amount; - protected final StatModifierType _mode; - - public StatAddForNight(StatSet params) - { - _stat = params.getEnum("stat", Stat.class); - _amount = params.getInt("amount"); - _mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF); - - // Init a global day-night change listener. - final ListenersContainer container = Containers.Global(); - container.addListener(new ConsumerEventListener(container, EventType.ON_DAY_NIGHT_CHANGE, (OnDayNightChange event) -> onDayNightChange(event), this)); - } - - @Override - public void onStart(Creature effector, Creature effected, Skill skill, Item item) - { - NIGHT_STAT_CHARACTERS.add(effected); - } - - @Override - public void onExit(Creature effector, Creature effected, Skill skill) - { - NIGHT_STAT_CHARACTERS.remove(effected); - } - - @Override - public void pump(Creature effected, Skill skill) - { - // Not night. - if (!GameTimeTaskManager.getInstance().isNight()) - { - return; - } - - // Apply stat. - switch (_mode) - { - case DIFF: - { - effected.getStat().mergeAdd(_stat, _amount); - break; - } - case PER: - { - effected.getStat().mergeMul(_stat, (_amount / 100) + 1); - break; - } - } - } - - public void onDayNightChange(OnDayNightChange event) - { - synchronized (DAY_TIME) - { - final boolean isNight = event.isNight(); - - // Run only once per daytime change. - if (isNight == DAY_TIME.get()) - { - return; - } - DAY_TIME.set(isNight); - - // System message for Shadow Sense. - final SystemMessage msg = new SystemMessage(isNight ? SystemMessageId.IT_IS_NOW_MIDNIGHT_AND_THE_EFFECT_OF_S1_CAN_BE_FELT : SystemMessageId.IT_IS_DAWN_AND_THE_EFFECT_OF_S1_WILL_NOW_DISAPPEAR); - msg.addSkillName(SHADOW_SENSE); - - for (Creature creature : NIGHT_STAT_CHARACTERS) - { - // Pump again. - creature.getStat().recalculateStats(true); - - // Send Shadow Sense message when player has skill. - if (creature.getKnownSkill(SHADOW_SENSE) != null) - { - creature.sendPacket(msg); - } - } - } - } -} diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/stats/skills/00200-00299.xml b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/stats/skills/00200-00299.xml index 24957195d0..efc6b45cf3 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/stats/skills/00200-00299.xml +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/stats/skills/00200-00299.xml @@ -7752,7 +7752,7 @@ P 5 - + ACCURACY_COMBAT 3 diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/stats/skills/documentation.txt index 930d65bc15..ed2ed02e05 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/stats/skills/documentation.txt +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/stats/skills/documentation.txt @@ -212,6 +212,7 @@ MpRegen: MP Regeneration stat. MpShield: Transfers given percentage of damage as mana damage. Mana Shield. MpVampiricAttack: Absorbs given percentage of mana during attack. Mute: Prevents target from using magical skills. Silence. +NightStatModifier: Modify a specific stat at night time. (l2jmobius) NoblesseBless: Does not remove buffs upon death except itself. OpenChest: Opens a treasure chest. OpenCommonRecipeBook: Shows the common recipe book window. @@ -314,7 +315,6 @@ SpModify: Bonus SP stat. Spoil: Spoils a mob activating its extra sweep drop. StatAddForLevel: Adds a fixed amount of a Stat for a specific player level. (l2jmobius) StatAddForMp: Adds a fixed amount of a Stat for when player max MP is over a value. (l2jmobius) -StatAddForNight: Modify a specific stat at night time. (l2jmobius) StatBonusSkillCritical: Changes skill critical rate to depend on the specified base stat. StatBonusSpeed: Changes Speed stat to depend on the specified base stat. StatByMoveType: Adds stat based on your movement type (standing, running, walking). diff --git a/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/handlers/EffectMasterHandler.java index 186b66e0c3..37f4eb0bbc 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -243,6 +243,7 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("MpShield", MpShield::new); EffectHandler.getInstance().registerHandler("MpVampiricAttack", MpVampiricAttack::new); EffectHandler.getInstance().registerHandler("Mute", Mute::new); + EffectHandler.getInstance().registerHandler("NightStatModifier", NightStatModifier::new); EffectHandler.getInstance().registerHandler("NoblesseBless", NoblesseBless::new); EffectHandler.getInstance().registerHandler("OpenChest", OpenChest::new); EffectHandler.getInstance().registerHandler("OpenCommonRecipeBook", OpenCommonRecipeBook::new); @@ -347,7 +348,6 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("Spoil", Spoil::new); EffectHandler.getInstance().registerHandler("StatAddForLevel", StatAddForLevel::new); EffectHandler.getInstance().registerHandler("StatAddForMp", StatAddForMp::new); - EffectHandler.getInstance().registerHandler("StatAddForNight", StatAddForNight::new); EffectHandler.getInstance().registerHandler("StatBonusSkillCritical", StatBonusSkillCritical::new); EffectHandler.getInstance().registerHandler("StatBonusSpeed", StatBonusSpeed::new); EffectHandler.getInstance().registerHandler("StatByMoveType", StatByMoveType::new); diff --git a/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java b/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java new file mode 100644 index 0000000000..8dce6e4312 --- /dev/null +++ b/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java @@ -0,0 +1,130 @@ +/* + * 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.effecthandlers; + +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicBoolean; + +import org.l2jmobius.gameserver.enums.StatModifierType; +import org.l2jmobius.gameserver.model.StatSet; +import org.l2jmobius.gameserver.model.actor.Creature; +import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.events.Containers; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.ListenersContainer; +import org.l2jmobius.gameserver.model.events.impl.OnDayNightChange; +import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; +import org.l2jmobius.gameserver.model.item.instance.Item; +import org.l2jmobius.gameserver.model.skill.Skill; +import org.l2jmobius.gameserver.model.stats.Stat; +import org.l2jmobius.gameserver.network.SystemMessageId; +import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; +import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager; + +/** + * @author Mobius + */ +public class NightStatModifier extends AbstractEffect +{ + private static final AtomicBoolean DAY_TIME = new AtomicBoolean(GameTimeTaskManager.getInstance().isNight()); + private static final Set NIGHT_STAT_CHARACTERS = ConcurrentHashMap.newKeySet(); + private static final int SHADOW_SENSE = 294; + + private final Stat _stat; + private final int _amount; + protected final StatModifierType _mode; + + public NightStatModifier(StatSet params) + { + _stat = params.getEnum("stat", Stat.class); + _amount = params.getInt("amount"); + _mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF); + + // Init a global day-night change listener. + final ListenersContainer container = Containers.Global(); + container.addListener(new ConsumerEventListener(container, EventType.ON_DAY_NIGHT_CHANGE, (OnDayNightChange event) -> onDayNightChange(event), this)); + } + + @Override + public void onStart(Creature effector, Creature effected, Skill skill, Item item) + { + NIGHT_STAT_CHARACTERS.add(effected); + } + + @Override + public void onExit(Creature effector, Creature effected, Skill skill) + { + NIGHT_STAT_CHARACTERS.remove(effected); + } + + @Override + public void pump(Creature effected, Skill skill) + { + // Not night. + if (!GameTimeTaskManager.getInstance().isNight()) + { + return; + } + + // Apply stat. + switch (_mode) + { + case DIFF: + { + effected.getStat().mergeAdd(_stat, _amount); + break; + } + case PER: + { + effected.getStat().mergeMul(_stat, (_amount / 100) + 1); + break; + } + } + } + + public void onDayNightChange(OnDayNightChange event) + { + synchronized (DAY_TIME) + { + final boolean isNight = event.isNight(); + + // Run only once per daytime change. + if (isNight == DAY_TIME.get()) + { + return; + } + DAY_TIME.set(isNight); + + // System message for Shadow Sense. + final SystemMessage msg = new SystemMessage(isNight ? SystemMessageId.IT_IS_NOW_MIDNIGHT_AND_THE_EFFECT_OF_S1_CAN_BE_FELT : SystemMessageId.IT_IS_DAWN_AND_THE_EFFECT_OF_S1_WILL_NOW_DISAPPEAR); + msg.addSkillName(SHADOW_SENSE); + + for (Creature creature : NIGHT_STAT_CHARACTERS) + { + // Pump again. + creature.getStat().recalculateStats(true); + + // Send Shadow Sense message when player has skill. + if (creature.getKnownSkill(SHADOW_SENSE) != null) + { + creature.sendPacket(msg); + } + } + } + } +} diff --git a/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java b/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java deleted file mode 100644 index 55cb0d4924..0000000000 --- a/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package handlers.effecthandlers; - -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicBoolean; - -import org.l2jmobius.gameserver.enums.StatModifierType; -import org.l2jmobius.gameserver.model.StatSet; -import org.l2jmobius.gameserver.model.actor.Creature; -import org.l2jmobius.gameserver.model.effects.AbstractEffect; -import org.l2jmobius.gameserver.model.events.Containers; -import org.l2jmobius.gameserver.model.events.EventType; -import org.l2jmobius.gameserver.model.events.ListenersContainer; -import org.l2jmobius.gameserver.model.events.impl.OnDayNightChange; -import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; -import org.l2jmobius.gameserver.model.item.instance.Item; -import org.l2jmobius.gameserver.model.skill.Skill; -import org.l2jmobius.gameserver.model.stats.Stat; -import org.l2jmobius.gameserver.network.SystemMessageId; -import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; -import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager; - -/** - * @author Mobius - */ -public class StatAddForNight extends AbstractEffect -{ - private static final AtomicBoolean DAY_TIME = new AtomicBoolean(GameTimeTaskManager.getInstance().isNight()); - private static final Set NIGHT_STAT_CHARACTERS = ConcurrentHashMap.newKeySet(); - private static final int SHADOW_SENSE = 294; - - private final Stat _stat; - private final int _amount; - protected final StatModifierType _mode; - - public StatAddForNight(StatSet params) - { - _stat = params.getEnum("stat", Stat.class); - _amount = params.getInt("amount"); - _mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF); - - // Init a global day-night change listener. - final ListenersContainer container = Containers.Global(); - container.addListener(new ConsumerEventListener(container, EventType.ON_DAY_NIGHT_CHANGE, (OnDayNightChange event) -> onDayNightChange(event), this)); - } - - @Override - public void onStart(Creature effector, Creature effected, Skill skill, Item item) - { - NIGHT_STAT_CHARACTERS.add(effected); - } - - @Override - public void onExit(Creature effector, Creature effected, Skill skill) - { - NIGHT_STAT_CHARACTERS.remove(effected); - } - - @Override - public void pump(Creature effected, Skill skill) - { - // Not night. - if (!GameTimeTaskManager.getInstance().isNight()) - { - return; - } - - // Apply stat. - switch (_mode) - { - case DIFF: - { - effected.getStat().mergeAdd(_stat, _amount); - break; - } - case PER: - { - effected.getStat().mergeMul(_stat, (_amount / 100) + 1); - break; - } - } - } - - public void onDayNightChange(OnDayNightChange event) - { - synchronized (DAY_TIME) - { - final boolean isNight = event.isNight(); - - // Run only once per daytime change. - if (isNight == DAY_TIME.get()) - { - return; - } - DAY_TIME.set(isNight); - - // System message for Shadow Sense. - final SystemMessage msg = new SystemMessage(isNight ? SystemMessageId.IT_IS_NOW_MIDNIGHT_AND_THE_EFFECT_OF_S1_CAN_BE_FELT : SystemMessageId.IT_IS_DAWN_AND_THE_EFFECT_OF_S1_WILL_NOW_DISAPPEAR); - msg.addSkillName(SHADOW_SENSE); - - for (Creature creature : NIGHT_STAT_CHARACTERS) - { - // Pump again. - creature.getStat().recalculateStats(true); - - // Send Shadow Sense message when player has skill. - if (creature.getKnownSkill(SHADOW_SENSE) != null) - { - creature.sendPacket(msg); - } - } - } - } -} diff --git a/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/stats/skills/00200-00299.xml b/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/stats/skills/00200-00299.xml index e22470c8e6..c4ad97ff1f 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/stats/skills/00200-00299.xml +++ b/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/stats/skills/00200-00299.xml @@ -7943,7 +7943,7 @@ P 5 - + ACCURACY_COMBAT 3 diff --git a/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/stats/skills/documentation.txt index 63566b2226..22d0072be0 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/stats/skills/documentation.txt +++ b/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/stats/skills/documentation.txt @@ -213,6 +213,7 @@ MpRegen: MP Regeneration stat. MpShield: Transfers given percentage of damage as mana damage. Mana Shield. MpVampiricAttack: Absorbs given percentage of mana during attack. Mute: Prevents target from using magical skills. Silence. +NightStatModifier: Modify a specific stat at night time. (l2jmobius) NoblesseBless: Does not remove buffs upon death except itself. OpenChest: Opens a treasure chest. OpenCommonRecipeBook: Shows the common recipe book window. @@ -316,7 +317,6 @@ SpModify: Bonus SP stat. Spoil: Spoils a mob activating its extra sweep drop. StatAddForLevel: Adds a fixed amount of a Stat for a specific player level. (l2jmobius) StatAddForMp: Adds a fixed amount of a Stat for when player max MP is over a value. (l2jmobius) -StatAddForNight: Modify a specific stat at night time. (l2jmobius) StatBonusSkillCritical: Changes skill critical rate to depend on the specified base stat. StatBonusSpeed: Changes Speed stat to depend on the specified base stat. StatByMoveType: Adds stat based on your movement type (standing, running, walking). diff --git a/L2J_Mobius_Essence_6.1_BattleChronicle/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_Essence_6.1_BattleChronicle/dist/game/data/scripts/handlers/EffectMasterHandler.java index 33c3a139cc..6aead3c085 100644 --- a/L2J_Mobius_Essence_6.1_BattleChronicle/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_Essence_6.1_BattleChronicle/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -245,6 +245,7 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("MpVampiricAttack", MpVampiricAttack::new); EffectHandler.getInstance().registerHandler("Mute", Mute::new); EffectHandler.getInstance().registerHandler("NewHennaSlot", NewHennaSlot::new); + EffectHandler.getInstance().registerHandler("NightStatModifier", NightStatModifier::new); EffectHandler.getInstance().registerHandler("NoblesseBless", NoblesseBless::new); EffectHandler.getInstance().registerHandler("OpenChest", OpenChest::new); EffectHandler.getInstance().registerHandler("OpenCommonRecipeBook", OpenCommonRecipeBook::new); @@ -350,7 +351,6 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("Spoil", Spoil::new); EffectHandler.getInstance().registerHandler("StatAddForLevel", StatAddForLevel::new); EffectHandler.getInstance().registerHandler("StatAddForMp", StatAddForMp::new); - EffectHandler.getInstance().registerHandler("StatAddForNight", StatAddForNight::new); EffectHandler.getInstance().registerHandler("StatAddForStat", StatAddForStat::new); EffectHandler.getInstance().registerHandler("StatBonusSkillCritical", StatBonusSkillCritical::new); EffectHandler.getInstance().registerHandler("StatBonusSpeed", StatBonusSpeed::new); diff --git a/L2J_Mobius_Essence_6.1_BattleChronicle/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java b/L2J_Mobius_Essence_6.1_BattleChronicle/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java new file mode 100644 index 0000000000..8dce6e4312 --- /dev/null +++ b/L2J_Mobius_Essence_6.1_BattleChronicle/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java @@ -0,0 +1,130 @@ +/* + * 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.effecthandlers; + +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicBoolean; + +import org.l2jmobius.gameserver.enums.StatModifierType; +import org.l2jmobius.gameserver.model.StatSet; +import org.l2jmobius.gameserver.model.actor.Creature; +import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.events.Containers; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.ListenersContainer; +import org.l2jmobius.gameserver.model.events.impl.OnDayNightChange; +import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; +import org.l2jmobius.gameserver.model.item.instance.Item; +import org.l2jmobius.gameserver.model.skill.Skill; +import org.l2jmobius.gameserver.model.stats.Stat; +import org.l2jmobius.gameserver.network.SystemMessageId; +import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; +import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager; + +/** + * @author Mobius + */ +public class NightStatModifier extends AbstractEffect +{ + private static final AtomicBoolean DAY_TIME = new AtomicBoolean(GameTimeTaskManager.getInstance().isNight()); + private static final Set NIGHT_STAT_CHARACTERS = ConcurrentHashMap.newKeySet(); + private static final int SHADOW_SENSE = 294; + + private final Stat _stat; + private final int _amount; + protected final StatModifierType _mode; + + public NightStatModifier(StatSet params) + { + _stat = params.getEnum("stat", Stat.class); + _amount = params.getInt("amount"); + _mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF); + + // Init a global day-night change listener. + final ListenersContainer container = Containers.Global(); + container.addListener(new ConsumerEventListener(container, EventType.ON_DAY_NIGHT_CHANGE, (OnDayNightChange event) -> onDayNightChange(event), this)); + } + + @Override + public void onStart(Creature effector, Creature effected, Skill skill, Item item) + { + NIGHT_STAT_CHARACTERS.add(effected); + } + + @Override + public void onExit(Creature effector, Creature effected, Skill skill) + { + NIGHT_STAT_CHARACTERS.remove(effected); + } + + @Override + public void pump(Creature effected, Skill skill) + { + // Not night. + if (!GameTimeTaskManager.getInstance().isNight()) + { + return; + } + + // Apply stat. + switch (_mode) + { + case DIFF: + { + effected.getStat().mergeAdd(_stat, _amount); + break; + } + case PER: + { + effected.getStat().mergeMul(_stat, (_amount / 100) + 1); + break; + } + } + } + + public void onDayNightChange(OnDayNightChange event) + { + synchronized (DAY_TIME) + { + final boolean isNight = event.isNight(); + + // Run only once per daytime change. + if (isNight == DAY_TIME.get()) + { + return; + } + DAY_TIME.set(isNight); + + // System message for Shadow Sense. + final SystemMessage msg = new SystemMessage(isNight ? SystemMessageId.IT_IS_NOW_MIDNIGHT_AND_THE_EFFECT_OF_S1_CAN_BE_FELT : SystemMessageId.IT_IS_DAWN_AND_THE_EFFECT_OF_S1_WILL_NOW_DISAPPEAR); + msg.addSkillName(SHADOW_SENSE); + + for (Creature creature : NIGHT_STAT_CHARACTERS) + { + // Pump again. + creature.getStat().recalculateStats(true); + + // Send Shadow Sense message when player has skill. + if (creature.getKnownSkill(SHADOW_SENSE) != null) + { + creature.sendPacket(msg); + } + } + } + } +} diff --git a/L2J_Mobius_Essence_6.1_BattleChronicle/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java b/L2J_Mobius_Essence_6.1_BattleChronicle/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java deleted file mode 100644 index 55cb0d4924..0000000000 --- a/L2J_Mobius_Essence_6.1_BattleChronicle/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package handlers.effecthandlers; - -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicBoolean; - -import org.l2jmobius.gameserver.enums.StatModifierType; -import org.l2jmobius.gameserver.model.StatSet; -import org.l2jmobius.gameserver.model.actor.Creature; -import org.l2jmobius.gameserver.model.effects.AbstractEffect; -import org.l2jmobius.gameserver.model.events.Containers; -import org.l2jmobius.gameserver.model.events.EventType; -import org.l2jmobius.gameserver.model.events.ListenersContainer; -import org.l2jmobius.gameserver.model.events.impl.OnDayNightChange; -import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; -import org.l2jmobius.gameserver.model.item.instance.Item; -import org.l2jmobius.gameserver.model.skill.Skill; -import org.l2jmobius.gameserver.model.stats.Stat; -import org.l2jmobius.gameserver.network.SystemMessageId; -import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; -import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager; - -/** - * @author Mobius - */ -public class StatAddForNight extends AbstractEffect -{ - private static final AtomicBoolean DAY_TIME = new AtomicBoolean(GameTimeTaskManager.getInstance().isNight()); - private static final Set NIGHT_STAT_CHARACTERS = ConcurrentHashMap.newKeySet(); - private static final int SHADOW_SENSE = 294; - - private final Stat _stat; - private final int _amount; - protected final StatModifierType _mode; - - public StatAddForNight(StatSet params) - { - _stat = params.getEnum("stat", Stat.class); - _amount = params.getInt("amount"); - _mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF); - - // Init a global day-night change listener. - final ListenersContainer container = Containers.Global(); - container.addListener(new ConsumerEventListener(container, EventType.ON_DAY_NIGHT_CHANGE, (OnDayNightChange event) -> onDayNightChange(event), this)); - } - - @Override - public void onStart(Creature effector, Creature effected, Skill skill, Item item) - { - NIGHT_STAT_CHARACTERS.add(effected); - } - - @Override - public void onExit(Creature effector, Creature effected, Skill skill) - { - NIGHT_STAT_CHARACTERS.remove(effected); - } - - @Override - public void pump(Creature effected, Skill skill) - { - // Not night. - if (!GameTimeTaskManager.getInstance().isNight()) - { - return; - } - - // Apply stat. - switch (_mode) - { - case DIFF: - { - effected.getStat().mergeAdd(_stat, _amount); - break; - } - case PER: - { - effected.getStat().mergeMul(_stat, (_amount / 100) + 1); - break; - } - } - } - - public void onDayNightChange(OnDayNightChange event) - { - synchronized (DAY_TIME) - { - final boolean isNight = event.isNight(); - - // Run only once per daytime change. - if (isNight == DAY_TIME.get()) - { - return; - } - DAY_TIME.set(isNight); - - // System message for Shadow Sense. - final SystemMessage msg = new SystemMessage(isNight ? SystemMessageId.IT_IS_NOW_MIDNIGHT_AND_THE_EFFECT_OF_S1_CAN_BE_FELT : SystemMessageId.IT_IS_DAWN_AND_THE_EFFECT_OF_S1_WILL_NOW_DISAPPEAR); - msg.addSkillName(SHADOW_SENSE); - - for (Creature creature : NIGHT_STAT_CHARACTERS) - { - // Pump again. - creature.getStat().recalculateStats(true); - - // Send Shadow Sense message when player has skill. - if (creature.getKnownSkill(SHADOW_SENSE) != null) - { - creature.sendPacket(msg); - } - } - } - } -} diff --git a/L2J_Mobius_Essence_6.1_BattleChronicle/dist/game/data/stats/skills/00200-00299.xml b/L2J_Mobius_Essence_6.1_BattleChronicle/dist/game/data/stats/skills/00200-00299.xml index 49400aa9a0..4820d270e1 100644 --- a/L2J_Mobius_Essence_6.1_BattleChronicle/dist/game/data/stats/skills/00200-00299.xml +++ b/L2J_Mobius_Essence_6.1_BattleChronicle/dist/game/data/stats/skills/00200-00299.xml @@ -7943,7 +7943,7 @@ P 5 - + ACCURACY_COMBAT 3 diff --git a/L2J_Mobius_Essence_6.1_BattleChronicle/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_Essence_6.1_BattleChronicle/dist/game/data/stats/skills/documentation.txt index 80f5add5a3..51fa1c000b 100644 --- a/L2J_Mobius_Essence_6.1_BattleChronicle/dist/game/data/stats/skills/documentation.txt +++ b/L2J_Mobius_Essence_6.1_BattleChronicle/dist/game/data/stats/skills/documentation.txt @@ -215,6 +215,7 @@ MpShield: Transfers given percentage of damage as mana damage. Mana Shield. MpVampiricAttack: Absorbs given percentage of mana during attack. Mute: Prevents target from using magical skills. Silence. NewHennaSlot: New henna slot modifier. (l2jmobius) +NightStatModifier: Modify a specific stat at night time. (l2jmobius) NoblesseBless: Does not remove buffs upon death except itself. OpenChest: Opens a treasure chest. OpenCommonRecipeBook: Shows the common recipe book window. @@ -319,7 +320,6 @@ SpModify: Bonus SP stat. Spoil: Spoils a mob activating its extra sweep drop. StatAddForLevel: Adds a fixed amount of a Stat for a specific player level. (l2jmobius) StatAddForMp: Adds a fixed amount of a Stat for when player max MP is over a value. (l2jmobius) -StatAddForNight: Modify a specific stat at night time. (l2jmobius) StatAddForStat: Adds a fixed amount of a Stat based on player current value. (l2jmobius) StatBonusSkillCritical: Changes skill critical rate to depend on the specified base stat. StatBonusSpeed: Changes Speed stat to depend on the specified base stat. diff --git a/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/scripts/handlers/EffectMasterHandler.java index 4f5e99cda4..de67b019a1 100644 --- a/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -248,6 +248,7 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("MpVampiricAttack", MpVampiricAttack::new); EffectHandler.getInstance().registerHandler("Mute", Mute::new); EffectHandler.getInstance().registerHandler("NewHennaSlot", NewHennaSlot::new); + EffectHandler.getInstance().registerHandler("NightStatModifier", NightStatModifier::new); EffectHandler.getInstance().registerHandler("NoblesseBless", NoblesseBless::new); EffectHandler.getInstance().registerHandler("OpenChest", OpenChest::new); EffectHandler.getInstance().registerHandler("OpenCommonRecipeBook", OpenCommonRecipeBook::new); @@ -353,7 +354,6 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("Spoil", Spoil::new); EffectHandler.getInstance().registerHandler("StatAddForLevel", StatAddForLevel::new); EffectHandler.getInstance().registerHandler("StatAddForMp", StatAddForMp::new); - EffectHandler.getInstance().registerHandler("StatAddForNight", StatAddForNight::new); EffectHandler.getInstance().registerHandler("StatAddForStat", StatAddForStat::new); EffectHandler.getInstance().registerHandler("StatBonusSkillCritical", StatBonusSkillCritical::new); EffectHandler.getInstance().registerHandler("StatBonusSpeed", StatBonusSpeed::new); diff --git a/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java b/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java new file mode 100644 index 0000000000..8dce6e4312 --- /dev/null +++ b/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/scripts/handlers/effecthandlers/NightStatModifier.java @@ -0,0 +1,130 @@ +/* + * 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.effecthandlers; + +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicBoolean; + +import org.l2jmobius.gameserver.enums.StatModifierType; +import org.l2jmobius.gameserver.model.StatSet; +import org.l2jmobius.gameserver.model.actor.Creature; +import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.events.Containers; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.ListenersContainer; +import org.l2jmobius.gameserver.model.events.impl.OnDayNightChange; +import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; +import org.l2jmobius.gameserver.model.item.instance.Item; +import org.l2jmobius.gameserver.model.skill.Skill; +import org.l2jmobius.gameserver.model.stats.Stat; +import org.l2jmobius.gameserver.network.SystemMessageId; +import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; +import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager; + +/** + * @author Mobius + */ +public class NightStatModifier extends AbstractEffect +{ + private static final AtomicBoolean DAY_TIME = new AtomicBoolean(GameTimeTaskManager.getInstance().isNight()); + private static final Set NIGHT_STAT_CHARACTERS = ConcurrentHashMap.newKeySet(); + private static final int SHADOW_SENSE = 294; + + private final Stat _stat; + private final int _amount; + protected final StatModifierType _mode; + + public NightStatModifier(StatSet params) + { + _stat = params.getEnum("stat", Stat.class); + _amount = params.getInt("amount"); + _mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF); + + // Init a global day-night change listener. + final ListenersContainer container = Containers.Global(); + container.addListener(new ConsumerEventListener(container, EventType.ON_DAY_NIGHT_CHANGE, (OnDayNightChange event) -> onDayNightChange(event), this)); + } + + @Override + public void onStart(Creature effector, Creature effected, Skill skill, Item item) + { + NIGHT_STAT_CHARACTERS.add(effected); + } + + @Override + public void onExit(Creature effector, Creature effected, Skill skill) + { + NIGHT_STAT_CHARACTERS.remove(effected); + } + + @Override + public void pump(Creature effected, Skill skill) + { + // Not night. + if (!GameTimeTaskManager.getInstance().isNight()) + { + return; + } + + // Apply stat. + switch (_mode) + { + case DIFF: + { + effected.getStat().mergeAdd(_stat, _amount); + break; + } + case PER: + { + effected.getStat().mergeMul(_stat, (_amount / 100) + 1); + break; + } + } + } + + public void onDayNightChange(OnDayNightChange event) + { + synchronized (DAY_TIME) + { + final boolean isNight = event.isNight(); + + // Run only once per daytime change. + if (isNight == DAY_TIME.get()) + { + return; + } + DAY_TIME.set(isNight); + + // System message for Shadow Sense. + final SystemMessage msg = new SystemMessage(isNight ? SystemMessageId.IT_IS_NOW_MIDNIGHT_AND_THE_EFFECT_OF_S1_CAN_BE_FELT : SystemMessageId.IT_IS_DAWN_AND_THE_EFFECT_OF_S1_WILL_NOW_DISAPPEAR); + msg.addSkillName(SHADOW_SENSE); + + for (Creature creature : NIGHT_STAT_CHARACTERS) + { + // Pump again. + creature.getStat().recalculateStats(true); + + // Send Shadow Sense message when player has skill. + if (creature.getKnownSkill(SHADOW_SENSE) != null) + { + creature.sendPacket(msg); + } + } + } + } +} diff --git a/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java b/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java deleted file mode 100644 index 55cb0d4924..0000000000 --- a/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/scripts/handlers/effecthandlers/StatAddForNight.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package handlers.effecthandlers; - -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicBoolean; - -import org.l2jmobius.gameserver.enums.StatModifierType; -import org.l2jmobius.gameserver.model.StatSet; -import org.l2jmobius.gameserver.model.actor.Creature; -import org.l2jmobius.gameserver.model.effects.AbstractEffect; -import org.l2jmobius.gameserver.model.events.Containers; -import org.l2jmobius.gameserver.model.events.EventType; -import org.l2jmobius.gameserver.model.events.ListenersContainer; -import org.l2jmobius.gameserver.model.events.impl.OnDayNightChange; -import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; -import org.l2jmobius.gameserver.model.item.instance.Item; -import org.l2jmobius.gameserver.model.skill.Skill; -import org.l2jmobius.gameserver.model.stats.Stat; -import org.l2jmobius.gameserver.network.SystemMessageId; -import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; -import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager; - -/** - * @author Mobius - */ -public class StatAddForNight extends AbstractEffect -{ - private static final AtomicBoolean DAY_TIME = new AtomicBoolean(GameTimeTaskManager.getInstance().isNight()); - private static final Set NIGHT_STAT_CHARACTERS = ConcurrentHashMap.newKeySet(); - private static final int SHADOW_SENSE = 294; - - private final Stat _stat; - private final int _amount; - protected final StatModifierType _mode; - - public StatAddForNight(StatSet params) - { - _stat = params.getEnum("stat", Stat.class); - _amount = params.getInt("amount"); - _mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF); - - // Init a global day-night change listener. - final ListenersContainer container = Containers.Global(); - container.addListener(new ConsumerEventListener(container, EventType.ON_DAY_NIGHT_CHANGE, (OnDayNightChange event) -> onDayNightChange(event), this)); - } - - @Override - public void onStart(Creature effector, Creature effected, Skill skill, Item item) - { - NIGHT_STAT_CHARACTERS.add(effected); - } - - @Override - public void onExit(Creature effector, Creature effected, Skill skill) - { - NIGHT_STAT_CHARACTERS.remove(effected); - } - - @Override - public void pump(Creature effected, Skill skill) - { - // Not night. - if (!GameTimeTaskManager.getInstance().isNight()) - { - return; - } - - // Apply stat. - switch (_mode) - { - case DIFF: - { - effected.getStat().mergeAdd(_stat, _amount); - break; - } - case PER: - { - effected.getStat().mergeMul(_stat, (_amount / 100) + 1); - break; - } - } - } - - public void onDayNightChange(OnDayNightChange event) - { - synchronized (DAY_TIME) - { - final boolean isNight = event.isNight(); - - // Run only once per daytime change. - if (isNight == DAY_TIME.get()) - { - return; - } - DAY_TIME.set(isNight); - - // System message for Shadow Sense. - final SystemMessage msg = new SystemMessage(isNight ? SystemMessageId.IT_IS_NOW_MIDNIGHT_AND_THE_EFFECT_OF_S1_CAN_BE_FELT : SystemMessageId.IT_IS_DAWN_AND_THE_EFFECT_OF_S1_WILL_NOW_DISAPPEAR); - msg.addSkillName(SHADOW_SENSE); - - for (Creature creature : NIGHT_STAT_CHARACTERS) - { - // Pump again. - creature.getStat().recalculateStats(true); - - // Send Shadow Sense message when player has skill. - if (creature.getKnownSkill(SHADOW_SENSE) != null) - { - creature.sendPacket(msg); - } - } - } - } -} diff --git a/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/stats/skills/00200-00299.xml b/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/stats/skills/00200-00299.xml index 15ec6ff4dc..d512c8d2c3 100644 --- a/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/stats/skills/00200-00299.xml +++ b/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/stats/skills/00200-00299.xml @@ -7945,7 +7945,7 @@ P 5 - + ACCURACY_COMBAT 3 diff --git a/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/stats/skills/documentation.txt index 5399b5257c..732418450c 100644 --- a/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/stats/skills/documentation.txt +++ b/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/stats/skills/documentation.txt @@ -218,6 +218,7 @@ MpShield: Transfers given percentage of damage as mana damage. Mana Shield. MpVampiricAttack: Absorbs given percentage of mana during attack. Mute: Prevents target from using magical skills. Silence. NewHennaSlot: New henna slot modifier. (l2jmobius) +NightStatModifier: Modify a specific stat at night time. (l2jmobius) NoblesseBless: Does not remove buffs upon death except itself. OpenChest: Opens a treasure chest. OpenCommonRecipeBook: Shows the common recipe book window. @@ -322,7 +323,6 @@ SpModify: Bonus SP stat. Spoil: Spoils a mob activating its extra sweep drop. StatAddForLevel: Adds a fixed amount of a Stat for a specific player level. (l2jmobius) StatAddForMp: Adds a fixed amount of a Stat for when player max MP is over a value. (l2jmobius) -StatAddForNight: Modify a specific stat at night time. (l2jmobius) StatAddForStat: Adds a fixed amount of a Stat based on player current value. (l2jmobius) StatBonusSkillCritical: Changes skill critical rate to depend on the specified base stat. StatBonusSpeed: Changes Speed stat to depend on the specified base stat.