From fba49e7eec13b3f0aeab8ea0a4617759f63ea71e Mon Sep 17 00:00:00 2001 From: P0nk Date: Sat, 3 Sep 2022 04:52:55 +0200 Subject: [PATCH] MobSkillFactory takes MobSkillType instead of int as id argument --- src/main/java/client/Character.java | 7 +- .../command/commands/gm2/MobSkillCommand.java | 4 +- .../command/commands/gm3/DebuffCommand.java | 70 ++++++++----------- .../handlers/AbstractDealDamageHandler.java | 8 +-- .../channel/handlers/MoveLifeHandler.java | 4 +- .../channel/handlers/TakeDamageHandler.java | 2 +- .../scripting/AbstractPlayerInteraction.java | 8 +-- src/main/java/server/StatEffect.java | 3 +- src/main/java/server/life/LifeFactory.java | 2 +- .../java/server/life/MobSkillFactory.java | 21 +++--- .../server/partyquest/CarnivalFactory.java | 3 +- 11 files changed, 60 insertions(+), 72 deletions(-) diff --git a/src/main/java/client/Character.java b/src/main/java/client/Character.java index b9972d4248..0713864928 100644 --- a/src/main/java/client/Character.java +++ b/src/main/java/client/Character.java @@ -64,10 +64,7 @@ import server.events.Events; import server.events.RescueGaga; import server.events.gm.Fitness; import server.events.gm.Ola; -import server.life.MobSkill; -import server.life.MobSkillFactory; -import server.life.Monster; -import server.life.PlayerNPC; +import server.life.*; import server.maps.*; import server.maps.MiniGame.MiniGameResult; import server.minigame.RockPaperScissor; @@ -7329,7 +7326,7 @@ public class Character extends AbstractCharacterObject { final int skilllv = rs.getInt("mobskilllv"); final long length = rs.getInt("length"); - MobSkill ms = MobSkillFactory.getMobSkill(skillid, skilllv); + MobSkill ms = MobSkillFactory.getMobSkill(MobSkillType.from(skillid), skilllv); if (ms != null) { loadedDiseases.put(disease, new Pair<>(length, ms)); } diff --git a/src/main/java/client/command/commands/gm2/MobSkillCommand.java b/src/main/java/client/command/commands/gm2/MobSkillCommand.java index bba008aef7..63b3cb8994 100644 --- a/src/main/java/client/command/commands/gm2/MobSkillCommand.java +++ b/src/main/java/client/command/commands/gm2/MobSkillCommand.java @@ -5,6 +5,7 @@ import client.Client; import client.command.Command; import server.life.MobSkill; import server.life.MobSkillFactory; +import server.life.MobSkillType; import java.util.Collections; @@ -21,7 +22,8 @@ public class MobSkillCommand extends Command { String skillId = params[0]; String skillLevel = params[1]; - MobSkill mobSkill = MobSkillFactory.getMobSkill(Integer.parseInt(skillId), Integer.parseInt(skillLevel)); + MobSkillType type = MobSkillType.from(Integer.parseInt(skillId)); + MobSkill mobSkill = MobSkillFactory.getMobSkill(type, Integer.parseInt(skillLevel)); if (mobSkill == null) { throw new IllegalArgumentException("Mob skill not found. Id: %s, level: %s".formatted(skillId, skillLevel)); } diff --git a/src/main/java/client/command/commands/gm3/DebuffCommand.java b/src/main/java/client/command/commands/gm3/DebuffCommand.java index aed248286d..bcd18ae9c1 100644 --- a/src/main/java/client/command/commands/gm3/DebuffCommand.java +++ b/src/main/java/client/command/commands/gm3/DebuffCommand.java @@ -29,6 +29,7 @@ import client.Disease; import client.command.Command; import server.life.MobSkill; import server.life.MobSkillFactory; +import server.life.MobSkillType; import server.maps.MapObject; import server.maps.MapObjectType; @@ -51,55 +52,46 @@ public class DebuffCommand extends Command { MobSkill skill = null; switch (params[0].toUpperCase()) { - case "SLOW": + case "SLOW" -> { disease = Disease.SLOW; - skill = MobSkillFactory.getMobSkill(126, 7); - break; - - case "SEDUCE": + skill = MobSkillFactory.getMobSkill(MobSkillType.SLOW, 7); + } + case "SEDUCE" -> { disease = Disease.SEDUCE; - skill = MobSkillFactory.getMobSkill(128, 7); - break; - - case "ZOMBIFY": + skill = MobSkillFactory.getMobSkill(MobSkillType.SEDUCE, 7); + } + case "ZOMBIFY" -> { disease = Disease.ZOMBIFY; - skill = MobSkillFactory.getMobSkill(133, 1); - break; - - case "CONFUSE": + skill = MobSkillFactory.getMobSkill(MobSkillType.UNDEAD, 1); + } + case "CONFUSE" -> { disease = Disease.CONFUSE; - skill = MobSkillFactory.getMobSkill(132, 2); - break; - - case "STUN": + skill = MobSkillFactory.getMobSkill(MobSkillType.REVERSE_INPUT, 2); + } + case "STUN" -> { disease = Disease.STUN; - skill = MobSkillFactory.getMobSkill(123, 7); - break; - - case "POISON": + skill = MobSkillFactory.getMobSkill(MobSkillType.STUN, 7); + } + case "POISON" -> { disease = Disease.POISON; - skill = MobSkillFactory.getMobSkill(125, 5); - break; - - case "SEAL": + skill = MobSkillFactory.getMobSkill(MobSkillType.POISON, 5); + } + case "SEAL" -> { disease = Disease.SEAL; - skill = MobSkillFactory.getMobSkill(120, 1); - break; - - case "DARKNESS": + skill = MobSkillFactory.getMobSkill(MobSkillType.SEAL, 1); + } + case "DARKNESS" -> { disease = Disease.DARKNESS; - skill = MobSkillFactory.getMobSkill(121, 1); - break; - - case "WEAKEN": + skill = MobSkillFactory.getMobSkill(MobSkillType.DARKNESS, 1); + } + case "WEAKEN" -> { disease = Disease.WEAKEN; - skill = MobSkillFactory.getMobSkill(122, 1); - break; - - case "CURSE": + skill = MobSkillFactory.getMobSkill(MobSkillType.WEAKNESS, 1); + } + case "CURSE" -> { disease = Disease.CURSE; - skill = MobSkillFactory.getMobSkill(124, 1); - break; + skill = MobSkillFactory.getMobSkill(MobSkillType.CURSE, 1); + } } if (disease == null) { diff --git a/src/main/java/net/server/channel/handlers/AbstractDealDamageHandler.java b/src/main/java/net/server/channel/handlers/AbstractDealDamageHandler.java index 9343a4f8de..d438238c35 100644 --- a/src/main/java/net/server/channel/handlers/AbstractDealDamageHandler.java +++ b/src/main/java/net/server/channel/handlers/AbstractDealDamageHandler.java @@ -494,8 +494,8 @@ public abstract class AbstractDealDamageHandler extends AbstractPacketHandler { List> mobSkills = monster.getSkills(); for (Pair ms : mobSkills) { - if (ms.left == 145) { - MobSkill toUse = MobSkillFactory.getMobSkill(ms.left, ms.right); + if (ms.left == 145) { // TODO: de-magic + MobSkill toUse = MobSkillFactory.getMobSkill(MobSkillType.PHYSICAL_AND_MAGIC_COUNTER, ms.right); player.addHP(-toUse.getX()); map.broadcastMessage(player, PacketCreator.damagePlayer(0, monster.getId(), player.getId(), toUse.getX(), 0, 0, false, 0, true, monster.getObjectId(), 0, 0), true); } @@ -505,8 +505,8 @@ public abstract class AbstractDealDamageHandler extends AbstractPacketHandler { List> mobSkills = monster.getSkills(); for (Pair ms : mobSkills) { - if (ms.left == 145) { - MobSkill toUse = MobSkillFactory.getMobSkill(ms.left, ms.right); + if (ms.left == 145) { // TODO: de-magic + MobSkill toUse = MobSkillFactory.getMobSkill(MobSkillType.PHYSICAL_AND_MAGIC_COUNTER, ms.right); player.addHP(-toUse.getY()); map.broadcastMessage(player, PacketCreator.damagePlayer(0, monster.getId(), player.getId(), toUse.getY(), 0, 0, false, 0, true, monster.getObjectId(), 0, 0), true); } diff --git a/src/main/java/net/server/channel/handlers/MoveLifeHandler.java b/src/main/java/net/server/channel/handlers/MoveLifeHandler.java index e29cc79277..3d522a02e5 100644 --- a/src/main/java/net/server/channel/handlers/MoveLifeHandler.java +++ b/src/main/java/net/server/channel/handlers/MoveLifeHandler.java @@ -96,7 +96,7 @@ public final class MoveLifeHandler extends AbstractMovementPacketHandler { castPos = monster.getSkillPos(useSkillId, useSkillLevel); if (castPos != -1) { - toUse = MobSkillFactory.getMobSkill(useSkillId, useSkillLevel); + toUse = MobSkillFactory.getMobSkill(MobSkillType.from(useSkillId), useSkillLevel); if (monster.canUseSkill(toUse, true)) { int animationTime = MonsterInformationProvider.getInstance().getMobSkillAnimationTime(toUse); @@ -127,7 +127,7 @@ public final class MoveLifeHandler extends AbstractMovementPacketHandler { Pair skillToUse = monster.getSkills().get(rndSkill); nextSkillId = skillToUse.getLeft(); nextSkillLevel = skillToUse.getRight(); - nextUse = MobSkillFactory.getMobSkill(nextSkillId, nextSkillLevel); + nextUse = MobSkillFactory.getMobSkill(MobSkillType.from(nextSkillId), nextSkillLevel); if (!(nextUse != null && monster.canUseSkill(nextUse, false) && nextUse.getHP() >= (int) (((float) monster.getHp() / monster.getMaxHp()) * 100) && mobMp >= nextUse.getMpCon())) { // thanks OishiiKawaiiDesu for noticing mobs trying to cast skills they are not supposed to be able diff --git a/src/main/java/net/server/channel/handlers/TakeDamageHandler.java b/src/main/java/net/server/channel/handlers/TakeDamageHandler.java index 28b6373c2a..4a3f331cf5 100644 --- a/src/main/java/net/server/channel/handlers/TakeDamageHandler.java +++ b/src/main/java/net/server/channel/handlers/TakeDamageHandler.java @@ -151,7 +151,7 @@ public final class TakeDamageHandler extends AbstractPacketHandler { is_deadly = true; } mpattack += attackInfo.getMpBurn(); - MobSkill mobSkill = MobSkillFactory.getMobSkill(attackInfo.getDiseaseSkill(), attackInfo.getDiseaseLevel()); + MobSkill mobSkill = MobSkillFactory.getMobSkill(MobSkillType.from(attackInfo.getDiseaseSkill()), attackInfo.getDiseaseLevel()); if (mobSkill != null && damage > 0) { mobSkill.applyEffect(chr, attacker, false, banishPlayers); } diff --git a/src/main/java/scripting/AbstractPlayerInteraction.java b/src/main/java/scripting/AbstractPlayerInteraction.java index 12a0f34f40..91f9ee40f7 100644 --- a/src/main/java/scripting/AbstractPlayerInteraction.java +++ b/src/main/java/scripting/AbstractPlayerInteraction.java @@ -965,10 +965,6 @@ public class AbstractPlayerInteraction { return LifeFactory.getMonster(mid); } - public MobSkill getMobSkill(int skill, int level) { - return MobSkillFactory.getMobSkill(skill, level); - } - public void spawnGuide() { c.sendPacket(PacketCreator.spawnGuide(true)); } @@ -1199,12 +1195,12 @@ public class AbstractPlayerInteraction { } private void applySealSkill(Monster monster) { - MobSkill sealSkill = MobSkillFactory.getMobSkill(157, 1); + MobSkill sealSkill = MobSkillFactory.getMobSkill(MobSkillType.SEAL_SKILL, 1); sealSkill.applyEffect(monster); } private void applyReduceAvoid(Monster monster) { - MobSkill reduceAvoidSkill = MobSkillFactory.getMobSkill(155, 2); + MobSkill reduceAvoidSkill = MobSkillFactory.getMobSkill(MobSkillType.EVA, 2); reduceAvoidSkill.applyEffect(monster); } diff --git a/src/main/java/server/StatEffect.java b/src/main/java/server/StatEffect.java index aa682f2e35..a0791a1281 100644 --- a/src/main/java/server/StatEffect.java +++ b/src/main/java/server/StatEffect.java @@ -42,6 +42,7 @@ import provider.Data; import provider.DataTool; import server.life.MobSkill; import server.life.MobSkillFactory; +import server.life.MobSkillType; import server.life.Monster; import server.maps.*; import server.partyquest.CarnivalFactory; @@ -1067,7 +1068,7 @@ public class StatEffect { applyfrom.dispelDebuff(debuff); } } else if (mobSkill > 0 && mobSkillLevel > 0) { - MobSkill ms = MobSkillFactory.getMobSkill(mobSkill, mobSkillLevel); + MobSkill ms = MobSkillFactory.getMobSkill(MobSkillType.from(mobSkill), mobSkillLevel); Disease dis = Disease.getBySkill(mobSkill); if (target > 0) { diff --git a/src/main/java/server/life/LifeFactory.java b/src/main/java/server/life/LifeFactory.java index 80eb10462c..772a4a5373 100644 --- a/src/main/java/server/life/LifeFactory.java +++ b/src/main/java/server/life/LifeFactory.java @@ -201,7 +201,7 @@ public class LifeFactory { animationTime += DataTool.getIntConvert("delay", effectEntry, 0); } - MobSkill skill = MobSkillFactory.getMobSkill(skillId, skillLv); + MobSkill skill = MobSkillFactory.getMobSkill(MobSkillType.from(skillId), skillLv); mi.setMobSkillAnimationTime(skill, animationTime); } diff --git a/src/main/java/server/life/MobSkillFactory.java b/src/main/java/server/life/MobSkillFactory.java index ea263cd21e..4de58ec8ad 100644 --- a/src/main/java/server/life/MobSkillFactory.java +++ b/src/main/java/server/life/MobSkillFactory.java @@ -47,11 +47,10 @@ public class MobSkillFactory { private static final Lock readLock = readWriteLock.readLock(); private static final Lock writeLock = readWriteLock.writeLock(); - // TODO: take in MobSkillType as argument instead of skillId - public static MobSkill getMobSkill(final int skillId, final int level) { // TODO: return Optional + public static MobSkill getMobSkill(final MobSkillType type, final int level) { // TODO: return Optional readLock.lock(); try { - MobSkill ms = mobSkills.get(createKey(skillId, level)); + MobSkill ms = mobSkills.get(createKey(type, level)); if (ms != null) { return ms; } @@ -59,18 +58,18 @@ public class MobSkillFactory { readLock.unlock(); } - return loadMobSkill(skillId, level).orElse(null); + return loadMobSkill(type, level).orElse(null); } - private static Optional loadMobSkill(final int skillId, final int level) { + private static Optional loadMobSkill(final MobSkillType type, final int level) { writeLock.lock(); try { - MobSkill existingMs = mobSkills.get(createKey(skillId, level)); + MobSkill existingMs = mobSkills.get(createKey(type, level)); if (existingMs != null) { return Optional.of(existingMs); } - Data skillData = skillRoot.getChildByPath(skillId + "/level/" + level); + Data skillData = skillRoot.getChildByPath(type + "/level/" + level); if (skillData == null) { return Optional.empty(); } @@ -103,7 +102,7 @@ public class MobSkillFactory { rb = (Point) rbData.getData(); } - MobSkill loadedMobSkill = new MobSkill.Builder(MobSkillType.from(skillId), level) + MobSkill loadedMobSkill = new MobSkill.Builder(type, level) .toSummon(toSummon) .cooltime(cooltime) .duration(duration) @@ -117,14 +116,14 @@ public class MobSkillFactory { .rb(rb) .build(); - mobSkills.put(createKey(skillId, level), loadedMobSkill); + mobSkills.put(createKey(type, level), loadedMobSkill); return Optional.of(loadedMobSkill); } finally { writeLock.unlock(); } } - private static String createKey(int skillId, int skillLevel) { - return skillId + "" + skillLevel; + private static String createKey(MobSkillType type, int skillLevel) { + return type.getId() + "" + skillLevel; } } diff --git a/src/main/java/server/partyquest/CarnivalFactory.java b/src/main/java/server/partyquest/CarnivalFactory.java index 5eb40a6224..19c55bc61e 100644 --- a/src/main/java/server/partyquest/CarnivalFactory.java +++ b/src/main/java/server/partyquest/CarnivalFactory.java @@ -8,6 +8,7 @@ import provider.DataTool; import provider.wz.WZFiles; import server.life.MobSkill; import server.life.MobSkillFactory; +import server.life.MobSkillType; import java.util.ArrayList; import java.util.HashMap; @@ -94,7 +95,7 @@ public class CarnivalFactory { } public static MobSkill getMobSkill(int skillid, int level) { - return MobSkillFactory.getMobSkill(skillid, level); + return MobSkillFactory.getMobSkill(MobSkillType.from(skillid), level); } public Disease getDisease() {