Disease and MCSkill hold MobSkillType instead of int

This commit is contained in:
P0nk
2022-09-03 05:20:54 +02:00
parent fba49e7eec
commit 7a784a7938
4 changed files with 64 additions and 46 deletions

View File

@@ -22,37 +22,34 @@
package client;
import constants.game.GameConstants;
import server.life.MobSkillType;
import java.util.Arrays;
public enum Disease {
NULL(0x0),
SLOW(0x1, 126),
SEDUCE(0x80, 128),
SLOW(0x1, MobSkillType.SLOW),
SEDUCE(0x80, MobSkillType.SEDUCE),
FISHABLE(0x100),
ZOMBIFY(0x4000),
CONFUSE(0x80000, 132),
STUN(0x2000000000000L, 123),
POISON(0x4000000000000L, 125),
SEAL(0x8000000000000L, 120),
DARKNESS(0x10000000000000L, 121),
WEAKEN(0x4000000000000000L, 122),
CURSE(0x8000000000000000L, 124);
CONFUSE(0x80000, MobSkillType.REVERSE_INPUT),
STUN(0x2000000000000L, MobSkillType.STUN),
POISON(0x4000000000000L, MobSkillType.POISON),
SEAL(0x8000000000000L, MobSkillType.SEAL),
DARKNESS(0x10000000000000L, MobSkillType.DARKNESS),
WEAKEN(0x4000000000000000L, MobSkillType.WEAKNESS),
CURSE(0x8000000000000000L, MobSkillType.CURSE);
private final long i;
private final boolean first;
private final int mobskill;
private final MobSkillType mobSkillType;
Disease(long i) {
this(i, false, 0);
this(i, null);
}
Disease(long i, int skill) {
this(i, false, skill);
}
Disease(long i, boolean first, int skill) {
Disease(long i, MobSkillType skill) {
this.i = i;
this.first = first;
this.mobskill = skill;
this.mobSkillType = skill;
}
public long getValue() {
@@ -60,11 +57,11 @@ public enum Disease {
}
public boolean isFirst() {
return first;
return false;
}
public int getDisease() {
return mobskill;
public MobSkillType getMobSkillType() {
return mobSkillType;
}
public static Disease ordinal(int ord) {
@@ -80,13 +77,14 @@ public enum Disease {
return diseases[(int) (Math.random() * diseases.length)];
}
public static final Disease getBySkill(final int skill) {
for (Disease d : Disease.values()) {
if (d.getDisease() == skill && d.getDisease() != 0) {
return d;
}
public static final Disease getBySkill(MobSkillType skill) {
if (skill == null) {
return null;
}
return null;
return Arrays.stream(Disease.values())
.filter(d -> d.mobSkillType == skill)
.findAny()
.orElse(null);
}
}

View File

@@ -29,6 +29,7 @@ import net.packet.InPacket;
import net.server.world.Party;
import net.server.world.PartyCharacter;
import server.life.LifeFactory;
import server.life.MobSkillType;
import server.life.Monster;
import server.partyquest.CarnivalFactory;
import server.partyquest.CarnivalFactory.MCSkill;
@@ -102,10 +103,7 @@ public final class MonsterCarnivalHandler extends AbstractPacketHandler {
final Disease dis = skill.getDisease();
Party enemies = c.getPlayer().getParty().getEnemy();
if (skill.targetsAll) {
int hitChance = 0;
if (dis.getDisease() == 121 || dis.getDisease() == 122 || dis.getDisease() == 125 || dis.getDisease() == 126) {
hitChance = (int) (Math.random() * 100);
}
int hitChance = rollHitChance(dis.getMobSkillType());
if (hitChance <= 80) {
for (PartyCharacter mpc : enemies.getPartyMembers()) {
Character mc = mpc.getPlayer();
@@ -179,4 +177,11 @@ public final class MonsterCarnivalHandler extends AbstractPacketHandler {
}
}
}
private int rollHitChance(MobSkillType type) {
return switch (type) {
case DARKNESS, WEAKNESS, POISON, SLOW -> (int) (Math.random() * 100);
default -> 0;
};
}
}

View File

@@ -1046,7 +1046,7 @@ public class StatEffect {
if (dis == null) {
chrApp.dispel();
} else {
chrApp.giveDebuff(dis, MCSkill.getMobSkill(dis.getDisease(), skill.level));
chrApp.giveDebuff(dis, MCSkill.getMobSkill(dis.getMobSkillType(), skill.level));
}
}
}
@@ -1058,7 +1058,7 @@ public class StatEffect {
if (dis == null) {
chrApp.dispel();
} else {
chrApp.giveDebuff(dis, MCSkill.getMobSkill(dis.getDisease(), skill.level));
chrApp.giveDebuff(dis, MCSkill.getMobSkill(dis.getMobSkillType(), skill.level));
}
}
}
@@ -1068,8 +1068,9 @@ public class StatEffect {
applyfrom.dispelDebuff(debuff);
}
} else if (mobSkill > 0 && mobSkillLevel > 0) {
MobSkill ms = MobSkillFactory.getMobSkill(MobSkillType.from(mobSkill), mobSkillLevel);
Disease dis = Disease.getBySkill(mobSkill);
var mobSkillType = MobSkillType.from(mobSkill);
MobSkill ms = MobSkillFactory.getMobSkill(mobSkillType, mobSkillLevel);
Disease dis = Disease.getBySkill(mobSkillType);
if (target > 0) {
for (Character chr : applyto.getMap().getAllPlayers()) {

View File

@@ -43,7 +43,15 @@ public class CarnivalFactory {
}
for (Data z : dataRoot.getData("MCSkill.img")) {
Integer id = Integer.parseInt(z.getName());
MCSkill ms = new MCSkill(DataTool.getInt("spendCP", z, 0), DataTool.getInt("mobSkillID", z, 0), DataTool.getInt("level", z, 0), DataTool.getInt("target", z, 1) > 1);
int spendCp = DataTool.getInt("spendCP", z, 0);
int mobSkillId = DataTool.getInt("mobSkillID", z, 0);
MobSkillType mobSkillType = null;
if (mobSkillId != 0) {
mobSkillType = MobSkillType.from(mobSkillId);
}
int level = DataTool.getInt("level", z, 0);
boolean isMultiTarget = DataTool.getInt("target", z, 1) > 1;
MCSkill ms = new MCSkill(spendCp, mobSkillType, level, isMultiTarget);
skills.put(id, ms);
if (ms.targetsAll) {
@@ -53,7 +61,11 @@ public class CarnivalFactory {
}
}
for (Data z : dataRoot.getData("MCGuardian.img")) {
guardians.put(Integer.parseInt(z.getName()), new MCSkill(DataTool.getInt("spendCP", z, 0), DataTool.getInt("mobSkillID", z, 0), DataTool.getInt("level", z, 0), true));
int spendCp = DataTool.getInt("spendCP", z, 0);
int mobSkillId = DataTool.getInt("mobSkillID", z, 0);
MobSkillType mobSkillType = MobSkillType.from(mobSkillId);
int level = DataTool.getInt("level", z, 0);
guardians.put(Integer.parseInt(z.getName()), new MCSkill(spendCp, mobSkillType, level, true));
}
}
@@ -67,7 +79,7 @@ public class CarnivalFactory {
public MCSkill getSkill(final int id) {
MCSkill skill = skills.get(id);
if (skill != null && skill.skillid <= 0) {
if (skill != null && skill.mobSkillType == null) {
return randomizeSkill(skill.targetsAll);
} else {
return skill;
@@ -80,26 +92,28 @@ public class CarnivalFactory {
public static class MCSkill {
public int cpLoss, skillid, level;
public int cpLoss;
public MobSkillType mobSkillType;
public int level;
public boolean targetsAll;
public MCSkill(int _cpLoss, int _skillid, int _level, boolean _targetsAll) {
public MCSkill(int _cpLoss, MobSkillType mobSkillType, int _level, boolean _targetsAll) {
cpLoss = _cpLoss;
skillid = _skillid;
mobSkillType = mobSkillType;
level = _level;
targetsAll = _targetsAll;
}
public MobSkill getSkill() {
return getMobSkill(skillid, level);
return getMobSkill(mobSkillType, level);
}
public static MobSkill getMobSkill(int skillid, int level) {
return MobSkillFactory.getMobSkill(MobSkillType.from(skillid), level);
public static MobSkill getMobSkill(MobSkillType type, int level) {
return MobSkillFactory.getMobSkill(type, level);
}
public Disease getDisease() {
return Disease.getBySkill(skillid);
return Disease.getBySkill(mobSkillType);
}
}
}