From 2823174ded78a3345a405f487a900409553f7ef0 Mon Sep 17 00:00:00 2001 From: MobiusDev <8391001+MobiusDevelopment@users.noreply.github.com> Date: Tue, 23 Aug 2016 21:42:58 +0000 Subject: [PATCH] Handy's Block Checker Event related improvements. --- .../scripts/handlers/EffectMasterHandler.java | 1 + .../handlers/effecthandlers/FlipBlock.java | 76 +++++++++++++++++ .../game/data/stats/skills/05800-05899.xml | 12 ++- .../gameserver/enums/InstanceType.java | 1 + .../gameserver/enums/NpcInfoType.java | 2 +- .../gameserver/model/skills/Skill.java | 85 +++++-------------- .../network/serverpackets/ExPetInfo.java | 4 +- .../network/serverpackets/NpcInfo.java | 7 +- .../network/serverpackets/SummonInfo.java | 4 +- 9 files changed, 117 insertions(+), 75 deletions(-) create mode 100644 L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/FlipBlock.java diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/EffectMasterHandler.java index b51ada8bb8..076f7a68d6 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -130,6 +130,7 @@ public final class EffectMasterHandler EffectHandler.getInstance().registerHandler("Fear", Fear::new); EffectHandler.getInstance().registerHandler("Feed", Feed::new); EffectHandler.getInstance().registerHandler("Flag", Flag::new); + EffectHandler.getInstance().registerHandler("FlipBlock", FlipBlock::new); EffectHandler.getInstance().registerHandler("FlyMove", FlyMove::new); EffectHandler.getInstance().registerHandler("FocusEnergy", FocusEnergy::new); EffectHandler.getInstance().registerHandler("FocusMomentum", FocusMomentum::new); diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/FlipBlock.java b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/FlipBlock.java new file mode 100644 index 0000000000..4713cb4116 --- /dev/null +++ b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/FlipBlock.java @@ -0,0 +1,76 @@ +/* + * 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 com.l2jmobius.gameserver.instancemanager.HandysBlockCheckerManager; +import com.l2jmobius.gameserver.model.ArenaParticipantsHolder; +import com.l2jmobius.gameserver.model.StatsSet; +import com.l2jmobius.gameserver.model.actor.L2Character; +import com.l2jmobius.gameserver.model.actor.instance.L2BlockInstance; +import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; +import com.l2jmobius.gameserver.model.effects.AbstractEffect; +import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; +import com.l2jmobius.gameserver.model.skills.Skill; + +/** + * Flip Block effect implementation. + * @author Mobius + */ +public final class FlipBlock extends AbstractEffect +{ + public FlipBlock(StatsSet params) + { + } + + @Override + public boolean isInstant() + { + return true; + } + + @Override + public void instant(L2Character effector, L2Character effected, Skill skill, L2ItemInstance item) + { + final L2BlockInstance block = effected instanceof L2BlockInstance ? (L2BlockInstance) effected : null; + final L2PcInstance player = effector.isPlayer() ? (L2PcInstance) effector : null; + if ((block == null) || (player == null)) + { + return; + } + + final int arena = player.getBlockCheckerArena(); + if (arena != -1) + { + final ArenaParticipantsHolder holder = HandysBlockCheckerManager.getInstance().getHolder(arena); + if (holder == null) + { + return; + } + + final int team = holder.getPlayerTeam(player); + final int color = block.getColorEffect(); + if ((team == 0) && (color == 0x00)) + { + block.changeColor(player, holder, team); + } + else if ((team == 1) && (color == 0x53)) + { + block.changeColor(player, holder, team); + } + } + } +} \ No newline at end of file diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/05800-05899.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/05800-05899.xml index 78803bc367..6fee4f03d8 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/05800-05899.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/05800-05899.xml @@ -1252,6 +1252,7 @@ 40 + -1 400 1000 icon.skill_transform_s_attack @@ -1260,12 +1261,16 @@ 2000 NONE -5 - OTHERS + ENEMY SINGLE + + + 40 + -1 400 1000 icon.skill_transform_s_attack @@ -1274,8 +1279,11 @@ 2000 NONE -5 - OTHERS + ENEMY SINGLE + + + 3 diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/enums/InstanceType.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/enums/InstanceType.java index 84d862402e..677acb99d9 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/enums/InstanceType.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/enums/InstanceType.java @@ -44,6 +44,7 @@ public enum InstanceType L2GuardInstance(L2Attackable), L2QuestGuardInstance(L2GuardInstance), L2MonsterInstance(L2Attackable), + L2BlockInstance(L2Attackable), L2ChestInstance(L2MonsterInstance), L2ControllableMobInstance(L2MonsterInstance), L2FeedableBeastInstance(L2MonsterInstance), diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/enums/NpcInfoType.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/enums/NpcInfoType.java index 40c34b99ab..036787eb61 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/enums/NpcInfoType.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/enums/NpcInfoType.java @@ -45,7 +45,7 @@ public enum NpcInfoType implements IUpdateTypeComponent ENCHANT(0x10, 4), FLYING(0x11, 4), CLONE(0x12, 4), - UNKNOWN8(0x13, 4), + COLOR_EFFECT(0x13, 4), DISPLAY_EFFECT(0x16, 4), TRANSFORMATION(0x17, 4), diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/skills/Skill.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/skills/Skill.java index ee4e2714c6..18c19ffce7 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/skills/Skill.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/skills/Skill.java @@ -42,13 +42,10 @@ import com.l2jmobius.gameserver.handler.AffectScopeHandler; import com.l2jmobius.gameserver.handler.IAffectScopeHandler; import com.l2jmobius.gameserver.handler.ITargetTypeHandler; import com.l2jmobius.gameserver.handler.TargetHandler; -import com.l2jmobius.gameserver.instancemanager.HandysBlockCheckerManager; -import com.l2jmobius.gameserver.model.ArenaParticipantsHolder; import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.PcCondOverride; import com.l2jmobius.gameserver.model.StatsSet; import com.l2jmobius.gameserver.model.actor.L2Character; -import com.l2jmobius.gameserver.model.actor.instance.L2BlockInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.cubic.CubicInstance; import com.l2jmobius.gameserver.model.effects.AbstractEffect; @@ -1404,71 +1401,31 @@ public final class Skill implements IIdentifiable */ public final void activateSkill(L2Character caster, CubicInstance cubic, L2ItemInstance item, L2Object... targets) { - // TODO: replace with AI - switch (getId()) + for (L2Object targetObject : targets) { - case 5852: - case 5853: + if (!targetObject.isCharacter()) { - final L2BlockInstance block = targets[0] instanceof L2BlockInstance ? (L2BlockInstance) targets[0] : null; - final L2PcInstance player = caster.isPlayer() ? (L2PcInstance) caster : null; - if ((block == null) || (player == null)) - { - return; - } - - final int arena = player.getBlockCheckerArena(); - if (arena != -1) - { - final ArenaParticipantsHolder holder = HandysBlockCheckerManager.getInstance().getHolder(arena); - if (holder == null) - { - return; - } - - final int team = holder.getPlayerTeam(player); - final int color = block.getColorEffect(); - if ((team == 0) && (color == 0x00)) - { - block.changeColor(player, holder, team); - } - else if ((team == 1) && (color == 0x53)) - { - block.changeColor(player, holder, team); - } - } - break; + continue; } - default: + + final L2Character target = (L2Character) targetObject; + if (Formulas.calcBuffDebuffReflection(target, this)) { - for (L2Object targetObject : targets) - { - if (!targetObject.isCharacter()) - { - continue; - } - - final L2Character target = (L2Character) targetObject; - if (Formulas.calcBuffDebuffReflection(target, this)) - { - // if skill is reflected instant effects should be casted on target - // and continuous effects on caster - applyEffects(target, caster, false, 0); - - final BuffInfo info = new BuffInfo(caster, target, this, false, item, null); - applyEffectScope(EffectScope.GENERAL, info, true, false); - - final EffectScope pvpOrPveEffectScope = caster.isPlayable() && target.isAttackable() ? EffectScope.PVE : caster.isPlayable() && target.isPlayable() ? EffectScope.PVP : null; - applyEffectScope(pvpOrPveEffectScope, info, true, false); - - applyEffectScope(EffectScope.CHANNELING, info, true, false); - } - else - { - applyEffects(caster, target, item); - } - } - break; + // if skill is reflected instant effects should be casted on target + // and continuous effects on caster + applyEffects(target, caster, false, 0); + + final BuffInfo info = new BuffInfo(caster, target, this, false, item, null); + applyEffectScope(EffectScope.GENERAL, info, true, false); + + final EffectScope pvpOrPveEffectScope = caster.isPlayable() && target.isAttackable() ? EffectScope.PVE : caster.isPlayable() && target.isPlayable() ? EffectScope.PVP : null; + applyEffectScope(pvpOrPveEffectScope, info, true, false); + + applyEffectScope(EffectScope.CHANNELING, info, true, false); + } + else + { + applyEffects(caster, target, item); } } diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ExPetInfo.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ExPetInfo.java index 39c5a756c7..05dc405f2f 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ExPetInfo.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ExPetInfo.java @@ -158,7 +158,7 @@ public class ExPetInfo extends AbstractMaskPacket addComponentType(NpcInfoType.CLAN); } - addComponentType(NpcInfoType.UNKNOWN8); + addComponentType(NpcInfoType.COLOR_EFFECT); // TODO: Confirm me if (summon.isInCombat()) @@ -312,7 +312,7 @@ public class ExPetInfo extends AbstractMaskPacket { packet.writeD(0x00); // Player ObjectId with Decoy } - if (containsMask(NpcInfoType.UNKNOWN8)) + if (containsMask(NpcInfoType.COLOR_EFFECT)) { // No visual effect packet.writeD(0x00); // Unknown diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/NpcInfo.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/NpcInfo.java index 5bc3f96e20..d3bf66b8e2 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/NpcInfo.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/NpcInfo.java @@ -184,7 +184,7 @@ public class NpcInfo extends AbstractMaskPacket } } - addComponentType(NpcInfoType.UNKNOWN8); + addComponentType(NpcInfoType.COLOR_EFFECT); if (npc.getPvpFlag() > 0) { @@ -345,10 +345,9 @@ public class NpcInfo extends AbstractMaskPacket { packet.writeD(_npc.getCloneObjId()); // Player ObjectId with Decoy } - if (containsMask(NpcInfoType.UNKNOWN8)) + if (containsMask(NpcInfoType.COLOR_EFFECT)) { - // No visual effect - packet.writeD(0x00); // Unknown + packet.writeD(_npc.getColorEffect()); // Color effect } if (containsMask(NpcInfoType.DISPLAY_EFFECT)) { diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/SummonInfo.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/SummonInfo.java index ea2dcc0716..82f939d4c7 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/SummonInfo.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/SummonInfo.java @@ -158,7 +158,7 @@ public class SummonInfo extends AbstractMaskPacket addComponentType(NpcInfoType.CLAN); } - addComponentType(NpcInfoType.UNKNOWN8); + addComponentType(NpcInfoType.COLOR_EFFECT); // TODO: Confirm me if (summon.isInCombat()) @@ -312,7 +312,7 @@ public class SummonInfo extends AbstractMaskPacket { packet.writeD(0x00); // Player ObjectId with Decoy } - if (containsMask(NpcInfoType.UNKNOWN8)) + if (containsMask(NpcInfoType.COLOR_EFFECT)) { // No visual effect packet.writeD(0x00); // Unknown