Move "steal item" logic to DropProvider
This commit is contained in:
@@ -32,6 +32,7 @@ import constants.id.ItemId;
|
||||
import constants.id.MapId;
|
||||
import constants.id.MobId;
|
||||
import constants.skills.*;
|
||||
import database.drop.DropProvider;
|
||||
import net.AbstractPacketHandler;
|
||||
import net.packet.InPacket;
|
||||
import net.server.PlayerBuffValueHolder;
|
||||
@@ -54,6 +55,11 @@ import static java.util.concurrent.TimeUnit.MINUTES;
|
||||
import static java.util.concurrent.TimeUnit.SECONDS;
|
||||
|
||||
public abstract class AbstractDealDamageHandler extends AbstractPacketHandler {
|
||||
private final DropProvider dropProvider;
|
||||
|
||||
public AbstractDealDamageHandler(DropProvider dropProvider) {
|
||||
this.dropProvider = dropProvider;
|
||||
}
|
||||
|
||||
public static class AttackInfo {
|
||||
|
||||
@@ -284,25 +290,14 @@ public abstract class AbstractDealDamageHandler extends AbstractPacketHandler {
|
||||
player.addHP(Math.min(monster.getMaxHp(), Math.min((int) ((double) totDamage * (double) SkillFactory.getSkill(attack.skill).getEffect(player.getSkillLevel(SkillFactory.getSkill(attack.skill))).getX() / 100.0), player.getCurrentMaxHp() / 2)));
|
||||
} else if (attack.skill == Bandit.STEAL) {
|
||||
Skill steal = SkillFactory.getSkill(Bandit.STEAL);
|
||||
if (monster.getStolen().size() < 1) { // One steal per mob <3
|
||||
if (monster.getStolen().isEmpty()) { // One steal per mob <3
|
||||
if (steal.getEffect(player.getSkillLevel(steal)).makeChanceResult()) {
|
||||
monster.addStolen(0);
|
||||
|
||||
MonsterInformationProvider mi = MonsterInformationProvider.getInstance();
|
||||
List<Integer> dropPool = mi.retrieveDropPool(monster.getId());
|
||||
if (!dropPool.isEmpty()) {
|
||||
int rndPool = (int) Math.floor(Math.random() * dropPool.get(dropPool.size() - 1));
|
||||
|
||||
int i = 0;
|
||||
while (rndPool >= dropPool.get(i)) {
|
||||
i++;
|
||||
}
|
||||
|
||||
List<MonsterDropEntry> toSteal = new ArrayList<>();
|
||||
toSteal.add(mi.retrieveDrop(monster.getId()).get(i));
|
||||
|
||||
map.dropItemsFromMonster(toSteal, player, monster);
|
||||
monster.addStolen(toSteal.get(0).itemId);
|
||||
Optional<MonsterDropEntry> stolenItem = dropProvider.getRandomStealDrop(monster.getId());
|
||||
if (stolenItem.isPresent()) {
|
||||
map.dropItemsFromMonster(Collections.singletonList(stolenItem.get()), player, monster);
|
||||
monster.addStolen(stolenItem.get().itemId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,6 +27,7 @@ import config.YamlConfig;
|
||||
import constants.game.GameConstants;
|
||||
import constants.id.MapId;
|
||||
import constants.skills.*;
|
||||
import database.drop.DropProvider;
|
||||
import net.packet.InPacket;
|
||||
import server.StatEffect;
|
||||
import tools.PacketCreator;
|
||||
@@ -40,6 +41,10 @@ import static java.util.concurrent.TimeUnit.SECONDS;
|
||||
|
||||
public final class CloseRangeDamageHandler extends AbstractDealDamageHandler {
|
||||
|
||||
public CloseRangeDamageHandler(DropProvider dropProvider) {
|
||||
super(dropProvider);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void handlePacket(InPacket p, Client c) {
|
||||
Character chr = c.getPlayer();
|
||||
@@ -183,4 +188,4 @@ public final class CloseRangeDamageHandler extends AbstractDealDamageHandler {
|
||||
|
||||
applyAttack(attack, chr, attackCount);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,6 +29,7 @@ import constants.skills.Bishop;
|
||||
import constants.skills.Evan;
|
||||
import constants.skills.FPArchMage;
|
||||
import constants.skills.ILArchMage;
|
||||
import database.drop.DropProvider;
|
||||
import net.packet.InPacket;
|
||||
import net.packet.Packet;
|
||||
import server.StatEffect;
|
||||
@@ -37,6 +38,10 @@ import tools.PacketCreator;
|
||||
import static java.util.concurrent.TimeUnit.SECONDS;
|
||||
|
||||
public final class MagicDamageHandler extends AbstractDealDamageHandler {
|
||||
|
||||
public MagicDamageHandler(DropProvider dropProvider) {
|
||||
super(dropProvider);
|
||||
}
|
||||
@Override
|
||||
public final void handlePacket(InPacket p, Client c) {
|
||||
Character chr = c.getPlayer();
|
||||
|
||||
@@ -33,6 +33,7 @@ import constants.id.ItemId;
|
||||
import constants.id.MapId;
|
||||
import constants.inventory.ItemConstants;
|
||||
import constants.skills.*;
|
||||
import database.drop.DropProvider;
|
||||
import net.packet.InPacket;
|
||||
import net.packet.Packet;
|
||||
import org.slf4j.Logger;
|
||||
@@ -48,6 +49,10 @@ import static java.util.concurrent.TimeUnit.SECONDS;
|
||||
public final class RangedAttackHandler extends AbstractDealDamageHandler {
|
||||
private static final Logger log = LoggerFactory.getLogger(RangedAttackHandler.class);
|
||||
|
||||
public RangedAttackHandler(DropProvider dropProvider) {
|
||||
super(dropProvider);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handlePacket(InPacket p, Client c) {
|
||||
Character chr = c.getPlayer();
|
||||
@@ -237,4 +242,4 @@ public final class RangedAttackHandler extends AbstractDealDamageHandler {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,6 +31,7 @@ import client.inventory.Item;
|
||||
import client.inventory.WeaponType;
|
||||
import client.status.MonsterStatusEffect;
|
||||
import constants.skills.Outlaw;
|
||||
import database.drop.DropProvider;
|
||||
import net.packet.InPacket;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@@ -47,6 +48,10 @@ import java.util.List;
|
||||
public final class SummonDamageHandler extends AbstractDealDamageHandler {
|
||||
private static final Logger log = LoggerFactory.getLogger(SummonDamageHandler.class);
|
||||
|
||||
public SummonDamageHandler(DropProvider dropProvider) {
|
||||
super(dropProvider);
|
||||
}
|
||||
|
||||
public final class SummonAttackEntry {
|
||||
|
||||
private final int monsterOid;
|
||||
|
||||
@@ -24,9 +24,15 @@ package net.server.channel.handlers;
|
||||
import client.BuffStat;
|
||||
import client.Character;
|
||||
import client.Client;
|
||||
import database.drop.DropProvider;
|
||||
import net.packet.InPacket;
|
||||
|
||||
public final class TouchMonsterDamageHandler extends AbstractDealDamageHandler {
|
||||
|
||||
public TouchMonsterDamageHandler(DropProvider dropProvider) {
|
||||
super(dropProvider);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void handlePacket(InPacket p, Client c) {
|
||||
Character chr = c.getPlayer();
|
||||
|
||||
Reference in New Issue
Block a user