Combine type and skillLevel in MobSkill
This commit is contained in:
@@ -8108,8 +8108,9 @@ public class Character extends AbstractCharacterObject {
|
||||
ps.setInt(2, e.getKey().ordinal());
|
||||
|
||||
MobSkill ms = e.getValue().getRight();
|
||||
ps.setInt(3, ms.getSkillId());
|
||||
ps.setInt(4, ms.getSkillLevel());
|
||||
MobSkillId msId = ms.getId();
|
||||
ps.setInt(3, msId.type().getId());
|
||||
ps.setInt(4, msId.level());
|
||||
ps.setInt(5, e.getValue().getLeft().intValue());
|
||||
ps.addBatch();
|
||||
}
|
||||
|
||||
@@ -47,8 +47,7 @@ import java.util.*;
|
||||
public class MobSkill {
|
||||
private static final Logger log = LoggerFactory.getLogger(MobSkill.class);
|
||||
|
||||
private final MobSkillType type;
|
||||
private final int skillLevel;
|
||||
private final MobSkillId id;
|
||||
private final int mpCon;
|
||||
private final int spawnEffect;
|
||||
private final int hp;
|
||||
@@ -65,8 +64,7 @@ public class MobSkill {
|
||||
|
||||
private MobSkill(MobSkillType type, int level, int mpCon, int spawnEffect, int hp, int x, int y, int count,
|
||||
long duration, long cooltime, float prop, Point lt, Point rb, int limit, List<Integer> toSummon) {
|
||||
this.type = type;
|
||||
this.skillLevel = level;
|
||||
this.id = new MobSkillId(type, level);
|
||||
this.mpCon = mpCon;
|
||||
this.spawnEffect = spawnEffect;
|
||||
this.hp = hp;
|
||||
@@ -195,7 +193,7 @@ public class MobSkill {
|
||||
Disease disease = null;
|
||||
Map<MonsterStatus, Integer> stats = new EnumMap<>(MonsterStatus.class);
|
||||
List<Integer> reflection = new ArrayList<>();
|
||||
switch (type) {
|
||||
switch (id.type()) {
|
||||
case ATTACK_UP, ATTACK_UP_M, PAD -> stats.put(MonsterStatus.WEAPON_ATTACK_UP, x);
|
||||
case MAGIC_ATTACK_UP, MAGIC_ATTACK_UP_M, MAD -> stats.put(MonsterStatus.MAGIC_ATTACK_UP, x);
|
||||
case DEFENSE_UP, DEFENSE_UP_M, PDR -> stats.put(MonsterStatus.WEAPON_DEFENSE_UP, x);
|
||||
@@ -368,10 +366,10 @@ public class MobSkill {
|
||||
private void applyMonsterBuffs(Map<MonsterStatus, Integer> stats, boolean skill, Monster monster, List<Integer> reflection) {
|
||||
if (lt != null && rb != null && skill) {
|
||||
for (MapObject mons : getObjectsInRange(monster, MapObjectType.MONSTER)) {
|
||||
((Monster) mons).applyMonsterBuff(stats, getX(), type.getId(), getDuration(), this, reflection);
|
||||
((Monster) mons).applyMonsterBuff(stats, getX(), getDuration(), this, reflection);
|
||||
}
|
||||
} else {
|
||||
monster.applyMonsterBuff(stats, getX(), type.getId(), getDuration(), this, reflection);
|
||||
monster.applyMonsterBuff(stats, getX(), getDuration(), this, reflection);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -399,16 +397,12 @@ public class MobSkill {
|
||||
return monster.getMap().getPlayersInRange(calculateBoundingBox(monster.getPosition()));
|
||||
}
|
||||
|
||||
public MobSkillId getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public MobSkillType getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public int getSkillId() {
|
||||
return type.getId();
|
||||
}
|
||||
|
||||
public int getSkillLevel() {
|
||||
return skillLevel;
|
||||
return id.type();
|
||||
}
|
||||
|
||||
public int getMpCon() {
|
||||
|
||||
@@ -82,7 +82,7 @@ public class Monster extends AbstractLoadedLife {
|
||||
private int VenomMultiplier = 0;
|
||||
private boolean fake = false;
|
||||
private boolean dropsDisabled = false;
|
||||
private final List<Pair<Integer, Integer>> usedSkills = new ArrayList<>();
|
||||
private final List<Pair<Integer, Integer>> usedSkills = new ArrayList<>(); // TODO: change to Set<MobSkillId>
|
||||
private final Map<Pair<Integer, Integer>, Integer> skillsUsed = new HashMap<>();
|
||||
private final Set<Integer> usedAttacks = new HashSet<>();
|
||||
private Set<Integer> calledMobOids = null;
|
||||
@@ -1289,7 +1289,7 @@ public class Monster extends AbstractLoadedLife {
|
||||
}
|
||||
}
|
||||
|
||||
public void applyMonsterBuff(final Map<MonsterStatus, Integer> stats, final int x, int skillId, long duration, MobSkill skill, final List<Integer> reflection) {
|
||||
public void applyMonsterBuff(final Map<MonsterStatus, Integer> stats, final int x, long duration, MobSkill skill, final List<Integer> reflection) {
|
||||
final Runnable cancelTask = () -> {
|
||||
if (isAlive()) {
|
||||
Packet packet = PacketCreator.cancelMonsterStatus(getObjectId(), stats);
|
||||
@@ -1448,7 +1448,8 @@ public class Monster extends AbstractLoadedLife {
|
||||
monsterLock.lock();
|
||||
try {
|
||||
for (Pair<Integer, Integer> skill : usedSkills) { // thanks OishiiKawaiiDesu for noticing an issue with mobskill cooldown
|
||||
if (skill.getLeft() == toUse.getSkillId() && skill.getRight() == toUse.getSkillLevel()) {
|
||||
MobSkillId msId = toUse.getId();
|
||||
if (skill.getLeft() == msId.type().getId() && skill.getRight() == msId.level()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -1482,8 +1483,8 @@ public class Monster extends AbstractLoadedLife {
|
||||
}
|
||||
|
||||
private void usedSkill(MobSkill skill) {
|
||||
final int skillId = skill.getSkillId();
|
||||
final int level = skill.getSkillLevel();
|
||||
final int skillId = skill.getId().type().getId();
|
||||
final int level = skill.getId().level();
|
||||
long cooltime = skill.getCoolTime();
|
||||
|
||||
monsterLock.lock();
|
||||
|
||||
@@ -138,14 +138,14 @@ public class Mist extends AbstractMapObject {
|
||||
if (owner != null) {
|
||||
return PacketCreator.spawnMist(getObjectId(), owner.getId(), getSourceSkill().getId(), owner.getSkillLevel(SkillFactory.getSkill(source.getSourceId())), this);
|
||||
}
|
||||
return PacketCreator.spawnMist(getObjectId(), mob.getId(), skill.getSkillId(), skill.getSkillLevel(), this);
|
||||
return PacketCreator.spawnMobMist(getObjectId(), mob.getId(), skill.getId(), this);
|
||||
}
|
||||
|
||||
public final Packet makeFakeSpawnData(int level) {
|
||||
if (owner != null) {
|
||||
return PacketCreator.spawnMist(getObjectId(), owner.getId(), getSourceSkill().getId(), level, this);
|
||||
}
|
||||
return PacketCreator.spawnMist(getObjectId(), mob.getId(), skill.getSkillId(), skill.getSkillLevel(), this);
|
||||
return PacketCreator.spawnMobMist(getObjectId(), mob.getId(), skill.getId(), this);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -64,10 +64,7 @@ import server.CashShop.CashItemFactory;
|
||||
import server.CashShop.SpecialCashItem;
|
||||
import server.*;
|
||||
import server.events.gm.Snowball;
|
||||
import server.life.MobSkill;
|
||||
import server.life.Monster;
|
||||
import server.life.NPC;
|
||||
import server.life.PlayerNPC;
|
||||
import server.life.*;
|
||||
import server.maps.*;
|
||||
import server.maps.MiniGame.MiniGameResult;
|
||||
import server.movement.LifeMovementFragment;
|
||||
@@ -106,6 +103,11 @@ public class PacketCreator {
|
||||
return utcTimestamp * 10000 + FT_UT_OFFSET;
|
||||
}
|
||||
|
||||
private static void writeMobSkillId(OutPacket packet, MobSkillId msId) {
|
||||
packet.writeShort(msId.type().getId());
|
||||
packet.writeShort(msId.level());
|
||||
}
|
||||
|
||||
public static Packet showHpHealed(int cid, int amount) {
|
||||
OutPacket p = OutPacket.create(SendOpcode.SHOW_FOREIGN_EFFECT);
|
||||
p.writeInt(cid);
|
||||
@@ -1410,8 +1412,7 @@ public class PacketCreator {
|
||||
|
||||
MobSkill mobSkill = mse.getMobSkill();
|
||||
if (mobSkill != null) {
|
||||
p.writeShort(mobSkill.getSkillId());
|
||||
p.writeShort(mobSkill.getSkillLevel());
|
||||
writeMobSkillId(p, mobSkill.getId());
|
||||
|
||||
switch (s.getKey()) {
|
||||
case WEAPON_REFLECT -> pCounter = mobSkill.getX();
|
||||
@@ -2917,8 +2918,7 @@ public class PacketCreator {
|
||||
writeLongMaskD(p, statups);
|
||||
for (Pair<Disease, Integer> statup : statups) {
|
||||
p.writeShort(statup.getRight().shortValue());
|
||||
p.writeShort(skill.getSkillId());
|
||||
p.writeShort(skill.getSkillLevel());
|
||||
writeMobSkillId(p, skill.getId());
|
||||
p.writeInt((int) skill.getDuration());
|
||||
}
|
||||
p.writeShort(0); // ??? wk charges have 600 here o.o
|
||||
@@ -2936,8 +2936,7 @@ public class PacketCreator {
|
||||
if (statup.getLeft() == Disease.POISON) {
|
||||
p.writeShort(statup.getRight().shortValue());
|
||||
}
|
||||
p.writeShort(skill.getSkillId());
|
||||
p.writeShort(skill.getSkillLevel());
|
||||
writeMobSkillId(p, skill.getId());
|
||||
}
|
||||
p.writeShort(0); // same as give_buff
|
||||
p.writeShort(900);//Delay
|
||||
@@ -3051,8 +3050,7 @@ public class PacketCreator {
|
||||
if (statup.getLeft() == Disease.POISON) {
|
||||
p.writeShort(statup.getRight().shortValue());
|
||||
}
|
||||
p.writeShort(skill.getSkillId());
|
||||
p.writeShort(skill.getSkillLevel());
|
||||
writeMobSkillId(p, skill.getId());
|
||||
}
|
||||
p.writeShort(0); // same as give_buff
|
||||
p.writeShort(900);//Delay
|
||||
@@ -3932,8 +3930,7 @@ public class PacketCreator {
|
||||
for (Map.Entry<MonsterStatus, Integer> stat : stati.entrySet()) {
|
||||
p.writeShort(stat.getValue());
|
||||
if (mse.isMonsterSkill()) {
|
||||
p.writeShort(mse.getMobSkill().getSkillId());
|
||||
p.writeShort(mse.getMobSkill().getSkillLevel());
|
||||
writeMobSkillId(p, mse.getMobSkill().getId());
|
||||
} else {
|
||||
p.writeInt(mse.getSkill().getId());
|
||||
}
|
||||
@@ -3984,11 +3981,15 @@ public class PacketCreator {
|
||||
return p;
|
||||
}
|
||||
|
||||
public static Packet spawnMist(int objId, int ownerChrId, int skill, int level, Mist mist) {
|
||||
public static Packet spawnMobMist(int objId, int ownerMobId, MobSkillId msId, Mist mist) {
|
||||
return spawnMist(objId, ownerMobId, msId.type().getId(), msId.level(), mist);
|
||||
}
|
||||
|
||||
public static Packet spawnMist(int objId, int ownerId, int skill, int level, Mist mist) {
|
||||
OutPacket p = OutPacket.create(SendOpcode.SPAWN_MIST);
|
||||
p.writeInt(objId);
|
||||
p.writeInt(mist.isMobMist() ? 0 : mist.isPoisonMist() ? 1 : mist.isRecoveryMist() ? 4 : 2); // mob mist = 0, player poison = 1, smokescreen = 2, unknown = 3, recovery = 4
|
||||
p.writeInt(ownerChrId);
|
||||
p.writeInt(ownerId);
|
||||
p.writeInt(skill);
|
||||
p.writeByte(level);
|
||||
p.writeShort(mist.getSkillDelay()); // Skill delay
|
||||
|
||||
Reference in New Issue
Block a user