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; package client;
import constants.game.GameConstants; import constants.game.GameConstants;
import server.life.MobSkillType;
import java.util.Arrays;
public enum Disease { public enum Disease {
NULL(0x0), NULL(0x0),
SLOW(0x1, 126), SLOW(0x1, MobSkillType.SLOW),
SEDUCE(0x80, 128), SEDUCE(0x80, MobSkillType.SEDUCE),
FISHABLE(0x100), FISHABLE(0x100),
ZOMBIFY(0x4000), ZOMBIFY(0x4000),
CONFUSE(0x80000, 132), CONFUSE(0x80000, MobSkillType.REVERSE_INPUT),
STUN(0x2000000000000L, 123), STUN(0x2000000000000L, MobSkillType.STUN),
POISON(0x4000000000000L, 125), POISON(0x4000000000000L, MobSkillType.POISON),
SEAL(0x8000000000000L, 120), SEAL(0x8000000000000L, MobSkillType.SEAL),
DARKNESS(0x10000000000000L, 121), DARKNESS(0x10000000000000L, MobSkillType.DARKNESS),
WEAKEN(0x4000000000000000L, 122), WEAKEN(0x4000000000000000L, MobSkillType.WEAKNESS),
CURSE(0x8000000000000000L, 124); CURSE(0x8000000000000000L, MobSkillType.CURSE);
private final long i; private final long i;
private final boolean first; private final MobSkillType mobSkillType;
private final int mobskill;
Disease(long i) { Disease(long i) {
this(i, false, 0); this(i, null);
} }
Disease(long i, int skill) { Disease(long i, MobSkillType skill) {
this(i, false, skill);
}
Disease(long i, boolean first, int skill) {
this.i = i; this.i = i;
this.first = first; this.mobSkillType = skill;
this.mobskill = skill;
} }
public long getValue() { public long getValue() {
@@ -60,11 +57,11 @@ public enum Disease {
} }
public boolean isFirst() { public boolean isFirst() {
return first; return false;
} }
public int getDisease() { public MobSkillType getMobSkillType() {
return mobskill; return mobSkillType;
} }
public static Disease ordinal(int ord) { public static Disease ordinal(int ord) {
@@ -80,13 +77,14 @@ public enum Disease {
return diseases[(int) (Math.random() * diseases.length)]; return diseases[(int) (Math.random() * diseases.length)];
} }
public static final Disease getBySkill(final int skill) { public static final Disease getBySkill(MobSkillType skill) {
for (Disease d : Disease.values()) { if (skill == null) {
if (d.getDisease() == skill && d.getDisease() != 0) { return null;
return d;
}
} }
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.Party;
import net.server.world.PartyCharacter; import net.server.world.PartyCharacter;
import server.life.LifeFactory; import server.life.LifeFactory;
import server.life.MobSkillType;
import server.life.Monster; import server.life.Monster;
import server.partyquest.CarnivalFactory; import server.partyquest.CarnivalFactory;
import server.partyquest.CarnivalFactory.MCSkill; import server.partyquest.CarnivalFactory.MCSkill;
@@ -102,10 +103,7 @@ public final class MonsterCarnivalHandler extends AbstractPacketHandler {
final Disease dis = skill.getDisease(); final Disease dis = skill.getDisease();
Party enemies = c.getPlayer().getParty().getEnemy(); Party enemies = c.getPlayer().getParty().getEnemy();
if (skill.targetsAll) { if (skill.targetsAll) {
int hitChance = 0; int hitChance = rollHitChance(dis.getMobSkillType());
if (dis.getDisease() == 121 || dis.getDisease() == 122 || dis.getDisease() == 125 || dis.getDisease() == 126) {
hitChance = (int) (Math.random() * 100);
}
if (hitChance <= 80) { if (hitChance <= 80) {
for (PartyCharacter mpc : enemies.getPartyMembers()) { for (PartyCharacter mpc : enemies.getPartyMembers()) {
Character mc = mpc.getPlayer(); 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) { if (dis == null) {
chrApp.dispel(); chrApp.dispel();
} else { } 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) { if (dis == null) {
chrApp.dispel(); chrApp.dispel();
} else { } 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); applyfrom.dispelDebuff(debuff);
} }
} else if (mobSkill > 0 && mobSkillLevel > 0) { } else if (mobSkill > 0 && mobSkillLevel > 0) {
MobSkill ms = MobSkillFactory.getMobSkill(MobSkillType.from(mobSkill), mobSkillLevel); var mobSkillType = MobSkillType.from(mobSkill);
Disease dis = Disease.getBySkill(mobSkill); MobSkill ms = MobSkillFactory.getMobSkill(mobSkillType, mobSkillLevel);
Disease dis = Disease.getBySkill(mobSkillType);
if (target > 0) { if (target > 0) {
for (Character chr : applyto.getMap().getAllPlayers()) { for (Character chr : applyto.getMap().getAllPlayers()) {

View File

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