MobSkillFactory takes MobSkillType instead of int as id argument
This commit is contained in:
@@ -64,10 +64,7 @@ import server.events.Events;
|
|||||||
import server.events.RescueGaga;
|
import server.events.RescueGaga;
|
||||||
import server.events.gm.Fitness;
|
import server.events.gm.Fitness;
|
||||||
import server.events.gm.Ola;
|
import server.events.gm.Ola;
|
||||||
import server.life.MobSkill;
|
import server.life.*;
|
||||||
import server.life.MobSkillFactory;
|
|
||||||
import server.life.Monster;
|
|
||||||
import server.life.PlayerNPC;
|
|
||||||
import server.maps.*;
|
import server.maps.*;
|
||||||
import server.maps.MiniGame.MiniGameResult;
|
import server.maps.MiniGame.MiniGameResult;
|
||||||
import server.minigame.RockPaperScissor;
|
import server.minigame.RockPaperScissor;
|
||||||
@@ -7329,7 +7326,7 @@ public class Character extends AbstractCharacterObject {
|
|||||||
final int skilllv = rs.getInt("mobskilllv");
|
final int skilllv = rs.getInt("mobskilllv");
|
||||||
final long length = rs.getInt("length");
|
final long length = rs.getInt("length");
|
||||||
|
|
||||||
MobSkill ms = MobSkillFactory.getMobSkill(skillid, skilllv);
|
MobSkill ms = MobSkillFactory.getMobSkill(MobSkillType.from(skillid), skilllv);
|
||||||
if (ms != null) {
|
if (ms != null) {
|
||||||
loadedDiseases.put(disease, new Pair<>(length, ms));
|
loadedDiseases.put(disease, new Pair<>(length, ms));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import client.Client;
|
|||||||
import client.command.Command;
|
import client.command.Command;
|
||||||
import server.life.MobSkill;
|
import server.life.MobSkill;
|
||||||
import server.life.MobSkillFactory;
|
import server.life.MobSkillFactory;
|
||||||
|
import server.life.MobSkillType;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
|
||||||
@@ -21,7 +22,8 @@ public class MobSkillCommand extends Command {
|
|||||||
|
|
||||||
String skillId = params[0];
|
String skillId = params[0];
|
||||||
String skillLevel = params[1];
|
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) {
|
if (mobSkill == null) {
|
||||||
throw new IllegalArgumentException("Mob skill not found. Id: %s, level: %s".formatted(skillId, skillLevel));
|
throw new IllegalArgumentException("Mob skill not found. Id: %s, level: %s".formatted(skillId, skillLevel));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ import client.Disease;
|
|||||||
import client.command.Command;
|
import client.command.Command;
|
||||||
import server.life.MobSkill;
|
import server.life.MobSkill;
|
||||||
import server.life.MobSkillFactory;
|
import server.life.MobSkillFactory;
|
||||||
|
import server.life.MobSkillType;
|
||||||
import server.maps.MapObject;
|
import server.maps.MapObject;
|
||||||
import server.maps.MapObjectType;
|
import server.maps.MapObjectType;
|
||||||
|
|
||||||
@@ -51,55 +52,46 @@ public class DebuffCommand extends Command {
|
|||||||
MobSkill skill = null;
|
MobSkill skill = null;
|
||||||
|
|
||||||
switch (params[0].toUpperCase()) {
|
switch (params[0].toUpperCase()) {
|
||||||
case "SLOW":
|
case "SLOW" -> {
|
||||||
disease = Disease.SLOW;
|
disease = Disease.SLOW;
|
||||||
skill = MobSkillFactory.getMobSkill(126, 7);
|
skill = MobSkillFactory.getMobSkill(MobSkillType.SLOW, 7);
|
||||||
break;
|
}
|
||||||
|
case "SEDUCE" -> {
|
||||||
case "SEDUCE":
|
|
||||||
disease = Disease.SEDUCE;
|
disease = Disease.SEDUCE;
|
||||||
skill = MobSkillFactory.getMobSkill(128, 7);
|
skill = MobSkillFactory.getMobSkill(MobSkillType.SEDUCE, 7);
|
||||||
break;
|
}
|
||||||
|
case "ZOMBIFY" -> {
|
||||||
case "ZOMBIFY":
|
|
||||||
disease = Disease.ZOMBIFY;
|
disease = Disease.ZOMBIFY;
|
||||||
skill = MobSkillFactory.getMobSkill(133, 1);
|
skill = MobSkillFactory.getMobSkill(MobSkillType.UNDEAD, 1);
|
||||||
break;
|
}
|
||||||
|
case "CONFUSE" -> {
|
||||||
case "CONFUSE":
|
|
||||||
disease = Disease.CONFUSE;
|
disease = Disease.CONFUSE;
|
||||||
skill = MobSkillFactory.getMobSkill(132, 2);
|
skill = MobSkillFactory.getMobSkill(MobSkillType.REVERSE_INPUT, 2);
|
||||||
break;
|
}
|
||||||
|
case "STUN" -> {
|
||||||
case "STUN":
|
|
||||||
disease = Disease.STUN;
|
disease = Disease.STUN;
|
||||||
skill = MobSkillFactory.getMobSkill(123, 7);
|
skill = MobSkillFactory.getMobSkill(MobSkillType.STUN, 7);
|
||||||
break;
|
}
|
||||||
|
case "POISON" -> {
|
||||||
case "POISON":
|
|
||||||
disease = Disease.POISON;
|
disease = Disease.POISON;
|
||||||
skill = MobSkillFactory.getMobSkill(125, 5);
|
skill = MobSkillFactory.getMobSkill(MobSkillType.POISON, 5);
|
||||||
break;
|
}
|
||||||
|
case "SEAL" -> {
|
||||||
case "SEAL":
|
|
||||||
disease = Disease.SEAL;
|
disease = Disease.SEAL;
|
||||||
skill = MobSkillFactory.getMobSkill(120, 1);
|
skill = MobSkillFactory.getMobSkill(MobSkillType.SEAL, 1);
|
||||||
break;
|
}
|
||||||
|
case "DARKNESS" -> {
|
||||||
case "DARKNESS":
|
|
||||||
disease = Disease.DARKNESS;
|
disease = Disease.DARKNESS;
|
||||||
skill = MobSkillFactory.getMobSkill(121, 1);
|
skill = MobSkillFactory.getMobSkill(MobSkillType.DARKNESS, 1);
|
||||||
break;
|
}
|
||||||
|
case "WEAKEN" -> {
|
||||||
case "WEAKEN":
|
|
||||||
disease = Disease.WEAKEN;
|
disease = Disease.WEAKEN;
|
||||||
skill = MobSkillFactory.getMobSkill(122, 1);
|
skill = MobSkillFactory.getMobSkill(MobSkillType.WEAKNESS, 1);
|
||||||
break;
|
}
|
||||||
|
case "CURSE" -> {
|
||||||
case "CURSE":
|
|
||||||
disease = Disease.CURSE;
|
disease = Disease.CURSE;
|
||||||
skill = MobSkillFactory.getMobSkill(124, 1);
|
skill = MobSkillFactory.getMobSkill(MobSkillType.CURSE, 1);
|
||||||
break;
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (disease == null) {
|
if (disease == null) {
|
||||||
|
|||||||
@@ -494,8 +494,8 @@ public abstract class AbstractDealDamageHandler extends AbstractPacketHandler {
|
|||||||
List<Pair<Integer, Integer>> mobSkills = monster.getSkills();
|
List<Pair<Integer, Integer>> mobSkills = monster.getSkills();
|
||||||
|
|
||||||
for (Pair<Integer, Integer> ms : mobSkills) {
|
for (Pair<Integer, Integer> ms : mobSkills) {
|
||||||
if (ms.left == 145) {
|
if (ms.left == 145) { // TODO: de-magic
|
||||||
MobSkill toUse = MobSkillFactory.getMobSkill(ms.left, ms.right);
|
MobSkill toUse = MobSkillFactory.getMobSkill(MobSkillType.PHYSICAL_AND_MAGIC_COUNTER, ms.right);
|
||||||
player.addHP(-toUse.getX());
|
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);
|
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<Pair<Integer, Integer>> mobSkills = monster.getSkills();
|
List<Pair<Integer, Integer>> mobSkills = monster.getSkills();
|
||||||
|
|
||||||
for (Pair<Integer, Integer> ms : mobSkills) {
|
for (Pair<Integer, Integer> ms : mobSkills) {
|
||||||
if (ms.left == 145) {
|
if (ms.left == 145) { // TODO: de-magic
|
||||||
MobSkill toUse = MobSkillFactory.getMobSkill(ms.left, ms.right);
|
MobSkill toUse = MobSkillFactory.getMobSkill(MobSkillType.PHYSICAL_AND_MAGIC_COUNTER, ms.right);
|
||||||
player.addHP(-toUse.getY());
|
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);
|
map.broadcastMessage(player, PacketCreator.damagePlayer(0, monster.getId(), player.getId(), toUse.getY(), 0, 0, false, 0, true, monster.getObjectId(), 0, 0), true);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -96,7 +96,7 @@ public final class MoveLifeHandler extends AbstractMovementPacketHandler {
|
|||||||
|
|
||||||
castPos = monster.getSkillPos(useSkillId, useSkillLevel);
|
castPos = monster.getSkillPos(useSkillId, useSkillLevel);
|
||||||
if (castPos != -1) {
|
if (castPos != -1) {
|
||||||
toUse = MobSkillFactory.getMobSkill(useSkillId, useSkillLevel);
|
toUse = MobSkillFactory.getMobSkill(MobSkillType.from(useSkillId), useSkillLevel);
|
||||||
|
|
||||||
if (monster.canUseSkill(toUse, true)) {
|
if (monster.canUseSkill(toUse, true)) {
|
||||||
int animationTime = MonsterInformationProvider.getInstance().getMobSkillAnimationTime(toUse);
|
int animationTime = MonsterInformationProvider.getInstance().getMobSkillAnimationTime(toUse);
|
||||||
@@ -127,7 +127,7 @@ public final class MoveLifeHandler extends AbstractMovementPacketHandler {
|
|||||||
Pair<Integer, Integer> skillToUse = monster.getSkills().get(rndSkill);
|
Pair<Integer, Integer> skillToUse = monster.getSkills().get(rndSkill);
|
||||||
nextSkillId = skillToUse.getLeft();
|
nextSkillId = skillToUse.getLeft();
|
||||||
nextSkillLevel = skillToUse.getRight();
|
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())) {
|
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
|
// thanks OishiiKawaiiDesu for noticing mobs trying to cast skills they are not supposed to be able
|
||||||
|
|||||||
@@ -151,7 +151,7 @@ public final class TakeDamageHandler extends AbstractPacketHandler {
|
|||||||
is_deadly = true;
|
is_deadly = true;
|
||||||
}
|
}
|
||||||
mpattack += attackInfo.getMpBurn();
|
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) {
|
if (mobSkill != null && damage > 0) {
|
||||||
mobSkill.applyEffect(chr, attacker, false, banishPlayers);
|
mobSkill.applyEffect(chr, attacker, false, banishPlayers);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -965,10 +965,6 @@ public class AbstractPlayerInteraction {
|
|||||||
return LifeFactory.getMonster(mid);
|
return LifeFactory.getMonster(mid);
|
||||||
}
|
}
|
||||||
|
|
||||||
public MobSkill getMobSkill(int skill, int level) {
|
|
||||||
return MobSkillFactory.getMobSkill(skill, level);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void spawnGuide() {
|
public void spawnGuide() {
|
||||||
c.sendPacket(PacketCreator.spawnGuide(true));
|
c.sendPacket(PacketCreator.spawnGuide(true));
|
||||||
}
|
}
|
||||||
@@ -1199,12 +1195,12 @@ public class AbstractPlayerInteraction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void applySealSkill(Monster monster) {
|
private void applySealSkill(Monster monster) {
|
||||||
MobSkill sealSkill = MobSkillFactory.getMobSkill(157, 1);
|
MobSkill sealSkill = MobSkillFactory.getMobSkill(MobSkillType.SEAL_SKILL, 1);
|
||||||
sealSkill.applyEffect(monster);
|
sealSkill.applyEffect(monster);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void applyReduceAvoid(Monster monster) {
|
private void applyReduceAvoid(Monster monster) {
|
||||||
MobSkill reduceAvoidSkill = MobSkillFactory.getMobSkill(155, 2);
|
MobSkill reduceAvoidSkill = MobSkillFactory.getMobSkill(MobSkillType.EVA, 2);
|
||||||
reduceAvoidSkill.applyEffect(monster);
|
reduceAvoidSkill.applyEffect(monster);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ import provider.Data;
|
|||||||
import provider.DataTool;
|
import provider.DataTool;
|
||||||
import server.life.MobSkill;
|
import server.life.MobSkill;
|
||||||
import server.life.MobSkillFactory;
|
import server.life.MobSkillFactory;
|
||||||
|
import server.life.MobSkillType;
|
||||||
import server.life.Monster;
|
import server.life.Monster;
|
||||||
import server.maps.*;
|
import server.maps.*;
|
||||||
import server.partyquest.CarnivalFactory;
|
import server.partyquest.CarnivalFactory;
|
||||||
@@ -1067,7 +1068,7 @@ public class StatEffect {
|
|||||||
applyfrom.dispelDebuff(debuff);
|
applyfrom.dispelDebuff(debuff);
|
||||||
}
|
}
|
||||||
} else if (mobSkill > 0 && mobSkillLevel > 0) {
|
} 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);
|
Disease dis = Disease.getBySkill(mobSkill);
|
||||||
|
|
||||||
if (target > 0) {
|
if (target > 0) {
|
||||||
|
|||||||
@@ -201,7 +201,7 @@ public class LifeFactory {
|
|||||||
animationTime += DataTool.getIntConvert("delay", effectEntry, 0);
|
animationTime += DataTool.getIntConvert("delay", effectEntry, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
MobSkill skill = MobSkillFactory.getMobSkill(skillId, skillLv);
|
MobSkill skill = MobSkillFactory.getMobSkill(MobSkillType.from(skillId), skillLv);
|
||||||
mi.setMobSkillAnimationTime(skill, animationTime);
|
mi.setMobSkillAnimationTime(skill, animationTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -47,11 +47,10 @@ public class MobSkillFactory {
|
|||||||
private static final Lock readLock = readWriteLock.readLock();
|
private static final Lock readLock = readWriteLock.readLock();
|
||||||
private static final Lock writeLock = readWriteLock.writeLock();
|
private static final Lock writeLock = readWriteLock.writeLock();
|
||||||
|
|
||||||
// TODO: take in MobSkillType as argument instead of skillId
|
public static MobSkill getMobSkill(final MobSkillType type, final int level) { // TODO: return Optional
|
||||||
public static MobSkill getMobSkill(final int skillId, final int level) { // TODO: return Optional
|
|
||||||
readLock.lock();
|
readLock.lock();
|
||||||
try {
|
try {
|
||||||
MobSkill ms = mobSkills.get(createKey(skillId, level));
|
MobSkill ms = mobSkills.get(createKey(type, level));
|
||||||
if (ms != null) {
|
if (ms != null) {
|
||||||
return ms;
|
return ms;
|
||||||
}
|
}
|
||||||
@@ -59,18 +58,18 @@ public class MobSkillFactory {
|
|||||||
readLock.unlock();
|
readLock.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
return loadMobSkill(skillId, level).orElse(null);
|
return loadMobSkill(type, level).orElse(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Optional<MobSkill> loadMobSkill(final int skillId, final int level) {
|
private static Optional<MobSkill> loadMobSkill(final MobSkillType type, final int level) {
|
||||||
writeLock.lock();
|
writeLock.lock();
|
||||||
try {
|
try {
|
||||||
MobSkill existingMs = mobSkills.get(createKey(skillId, level));
|
MobSkill existingMs = mobSkills.get(createKey(type, level));
|
||||||
if (existingMs != null) {
|
if (existingMs != null) {
|
||||||
return Optional.of(existingMs);
|
return Optional.of(existingMs);
|
||||||
}
|
}
|
||||||
|
|
||||||
Data skillData = skillRoot.getChildByPath(skillId + "/level/" + level);
|
Data skillData = skillRoot.getChildByPath(type + "/level/" + level);
|
||||||
if (skillData == null) {
|
if (skillData == null) {
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
@@ -103,7 +102,7 @@ public class MobSkillFactory {
|
|||||||
rb = (Point) rbData.getData();
|
rb = (Point) rbData.getData();
|
||||||
}
|
}
|
||||||
|
|
||||||
MobSkill loadedMobSkill = new MobSkill.Builder(MobSkillType.from(skillId), level)
|
MobSkill loadedMobSkill = new MobSkill.Builder(type, level)
|
||||||
.toSummon(toSummon)
|
.toSummon(toSummon)
|
||||||
.cooltime(cooltime)
|
.cooltime(cooltime)
|
||||||
.duration(duration)
|
.duration(duration)
|
||||||
@@ -117,14 +116,14 @@ public class MobSkillFactory {
|
|||||||
.rb(rb)
|
.rb(rb)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
mobSkills.put(createKey(skillId, level), loadedMobSkill);
|
mobSkills.put(createKey(type, level), loadedMobSkill);
|
||||||
return Optional.of(loadedMobSkill);
|
return Optional.of(loadedMobSkill);
|
||||||
} finally {
|
} finally {
|
||||||
writeLock.unlock();
|
writeLock.unlock();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String createKey(int skillId, int skillLevel) {
|
private static String createKey(MobSkillType type, int skillLevel) {
|
||||||
return skillId + "" + skillLevel;
|
return type.getId() + "" + skillLevel;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import provider.DataTool;
|
|||||||
import provider.wz.WZFiles;
|
import provider.wz.WZFiles;
|
||||||
import server.life.MobSkill;
|
import server.life.MobSkill;
|
||||||
import server.life.MobSkillFactory;
|
import server.life.MobSkillFactory;
|
||||||
|
import server.life.MobSkillType;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@@ -94,7 +95,7 @@ public class CarnivalFactory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static MobSkill getMobSkill(int skillid, int level) {
|
public static MobSkill getMobSkill(int skillid, int level) {
|
||||||
return MobSkillFactory.getMobSkill(skillid, level);
|
return MobSkillFactory.getMobSkill(MobSkillType.from(skillid), level);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Disease getDisease() {
|
public Disease getDisease() {
|
||||||
|
|||||||
Reference in New Issue
Block a user