Move some autoban logic to new BanService

This commit is contained in:
P0nk
2023-08-10 22:48:10 +02:00
parent cb31121fe7
commit cd75e85bec
15 changed files with 139 additions and 85 deletions

View File

@@ -76,6 +76,7 @@ import server.expeditions.ExpeditionBossLog;
import server.life.PlayerNPCFactory;
import server.quest.Quest;
import server.shop.ShopFactory;
import service.BanService;
import service.NoteService;
import service.TransitionService;
import tools.DatabaseConnection;
@@ -981,6 +982,7 @@ public class Server {
CharacterLoader characterLoader = new CharacterLoader(monsterCardDao);
CharacterSaver characterSaver = new CharacterSaver(monsterCardDao);
TransitionService transitionService = new TransitionService(characterSaver);
BanService banService = new BanService(transitionService);
NoteService noteService = new NoteService(new NoteDao(connection));
MakerProcessor makerProcessor = new MakerProcessor(new MakerInfoProvider(new MakerDao(connection)));
FredrickProcessor fredrickProcessor = new FredrickProcessor(noteService);
@@ -990,7 +992,8 @@ public class Server {
characterSaver, transitionService);
CommandsExecutor commandsExecutor = new CommandsExecutor(commandContext);
ChannelDependencies channelDependencies = new ChannelDependencies(characterLoader, characterSaver, noteService,
fredrickProcessor, makerProcessor, dropProvider, commandsExecutor, shopFactory, transitionService);
fredrickProcessor, makerProcessor, dropProvider, commandsExecutor, shopFactory, transitionService,
banService);
PacketProcessor.registerGameHandlerDependencies(channelDependencies);

View File

@@ -44,6 +44,7 @@ import server.maps.MapItem;
import server.maps.MapObject;
import server.maps.MapObjectType;
import server.maps.MapleMap;
import service.BanService;
import tools.PacketCreator;
import tools.Randomizer;
@@ -56,12 +57,14 @@ import static java.util.concurrent.TimeUnit.SECONDS;
public abstract class AbstractDealDamageHandler extends AbstractPacketHandler {
private final DropProvider dropProvider;
private final BanService banService;
public AbstractDealDamageHandler(DropProvider dropProvider) {
public AbstractDealDamageHandler(DropProvider dropProvider, BanService banService) {
this.dropProvider = dropProvider;
this.banService = banService;
}
public static class AttackInfo {
public class AttackInfo {
public int numAttacked, numDamage, numAttackedAndDamage, skill, skilllevel, stance, direction, rangedirection, charge, display;
public Map<Integer, List<Integer>> allDamage;
@@ -85,7 +88,7 @@ public abstract class AbstractDealDamageHandler extends AbstractPacketHandler {
}
if (display > 80) { //Hmm
if (!mySkill.getAction()) {
AutobanFactory.FAST_ATTACK.autoban(chr, "WZ Edit; adding action to a skill: " + display);
banService.autoban(chr, AutobanFactory.FAST_ATTACK, "WZ Edit; adding action to a skill: " + display);
return null;
}
}
@@ -115,7 +118,7 @@ public abstract class AbstractDealDamageHandler extends AbstractPacketHandler {
}
if (player.getMp() < attackEffect.getMpCon()) {
AutobanFactory.MPCON.addPoint(player.getAutobanManager(), "Skill: " + attack.skill + "; Player MP: " + player.getMp() + "; MP Needed: " + attackEffect.getMpCon());
banService.addPoint(player, AutobanFactory.MPCON, "Skill: " + attack.skill + "; Player MP: " + player.getMp() + "; MP Needed: " + attackEffect.getMpCon());
}
int mobCount = attackEffect.getMobCount();
@@ -146,7 +149,7 @@ public abstract class AbstractDealDamageHandler extends AbstractPacketHandler {
}
if (attack.numAttacked > mobCount) {
AutobanFactory.MOB_COUNT.autoban(player, "Skill: " + attack.skill + "; Count: " + attack.numAttacked + " Max: " + attackEffect.getMobCount());
banService.autoban(player, AutobanFactory.MOB_COUNT, "Skill: " + attack.skill + "; Count: " + attack.numAttacked + " Max: " + attackEffect.getMobCount());
return;
}
}
@@ -419,7 +422,7 @@ public abstract class AbstractDealDamageHandler extends AbstractPacketHandler {
if (attack.skill != 0) {
if (attackEffect.getFixDamage() != -1) {
if (totDamageToOneMonster != attackEffect.getFixDamage() && totDamageToOneMonster != 0) {
AutobanFactory.FIX_DAMAGE.autoban(player, totDamageToOneMonster + " damage");
banService.autoban(player, AutobanFactory.FIX_DAMAGE, totDamageToOneMonster + " damage");
}
int threeSnailsId = player.getJobType() * 10000000 + 1000;
@@ -852,7 +855,7 @@ public abstract class AbstractDealDamageHandler extends AbstractPacketHandler {
// Add a ab point if its over 5x what we calculated.
if (damage > maxWithCrit * 5) {
AutobanFactory.DAMAGE_HACK.addPoint(chr.getAutobanManager(), "DMG: " + damage + " MaxDMG: " + maxWithCrit + " SID: " + ret.skill + " MobID: " + (monster != null ? monster.getId() : "null") + " Map: " + chr.getMap().getMapName() + " (" + chr.getMapId() + ")");
banService.addPoint(chr, AutobanFactory.DAMAGE_HACK, "DMG: " + damage + " MaxDMG: " + maxWithCrit + " SID: " + ret.skill + " MobID: " + (monster != null ? monster.getId() : "null") + " Map: " + chr.getMap().getMapName() + " (" + chr.getMapId() + ")");
}
if (ret.skill == Marksman.SNIPE || (canCrit && damage > hitDmgMax)) {

View File

@@ -31,6 +31,7 @@ import database.drop.DropProvider;
import net.netty.GameViolationException;
import net.packet.InPacket;
import server.StatEffect;
import service.BanService;
import tools.PacketCreator;
import tools.Pair;
@@ -42,8 +43,8 @@ import static java.util.concurrent.TimeUnit.SECONDS;
public final class CloseRangeDamageHandler extends AbstractDealDamageHandler {
public CloseRangeDamageHandler(DropProvider dropProvider) {
super(dropProvider);
public CloseRangeDamageHandler(DropProvider dropProvider, BanService banService) {
super(dropProvider, banService);
}
@Override

View File

@@ -29,9 +29,16 @@ import net.AbstractPacketHandler;
import net.packet.InPacket;
import net.server.Server;
import server.maps.MapleMap;
import service.BanService;
import tools.PacketCreator;
public final class HealOvertimeHandler extends AbstractPacketHandler {
private final BanService banService;
public HealOvertimeHandler(BanService banService) {
this.banService = banService;
}
@Override
public final void handlePacket(InPacket p, Client c) {
Character chr = c.getPlayer();
@@ -47,13 +54,13 @@ public final class HealOvertimeHandler extends AbstractPacketHandler {
if (healHP != 0) {
abm.setTimestamp(8, timestamp, 28); // thanks Vcoc & Thora for pointing out d/c happening here
if ((abm.getLastSpam(0) + 1500) > timestamp) {
AutobanFactory.FAST_HP_HEALING.addPoint(abm, "Fast hp healing");
banService.addPoint(chr, AutobanFactory.FAST_HP_HEALING, "Fast hp healing");
}
MapleMap map = chr.getMap();
int abHeal = (int) (77 * map.getRecovery() * 1.5); // thanks Ari for noticing players not getting healed in sauna in certain cases
if (healHP > abHeal) {
AutobanFactory.HIGH_HP_HEALING.autoban(chr, "Healing: " + healHP + "; Max is " + abHeal + ".");
banService.autoban(chr, AutobanFactory.HIGH_HP_HEALING, "Healing: " + healHP + "; Max is " + abHeal + ".");
return;
}
@@ -65,7 +72,7 @@ public final class HealOvertimeHandler extends AbstractPacketHandler {
if (healMP != 0 && healMP < 1000) {
abm.setTimestamp(9, timestamp, 28);
if ((abm.getLastSpam(1) + 1500) > timestamp) {
AutobanFactory.FAST_MP_HEALING.addPoint(abm, "Fast mp healing");
banService.addPoint(chr, AutobanFactory.FAST_MP_HEALING, "Fast mp healing");
return; // thanks resinate for noticing mp being gained even after detection
}
chr.addMP(healMP);

View File

@@ -34,14 +34,15 @@ import net.netty.GameViolationException;
import net.packet.InPacket;
import net.packet.Packet;
import server.StatEffect;
import service.BanService;
import tools.PacketCreator;
import static java.util.concurrent.TimeUnit.SECONDS;
public final class MagicDamageHandler extends AbstractDealDamageHandler {
public MagicDamageHandler(DropProvider dropProvider) {
super(dropProvider);
public MagicDamageHandler(DropProvider dropProvider, BanService banService) {
super(dropProvider, banService);
}
@Override
public final void handlePacket(InPacket p, Client c) {

View File

@@ -41,6 +41,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import server.ItemInformationProvider;
import server.StatEffect;
import service.BanService;
import tools.PacketCreator;
import tools.Randomizer;
@@ -50,8 +51,8 @@ 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);
public RangedAttackHandler(DropProvider dropProvider, BanService banService) {
super(dropProvider, banService);
}
@Override

View File

@@ -40,6 +40,7 @@ import server.StatEffect;
import server.life.Monster;
import server.life.MonsterInformationProvider;
import server.maps.Summon;
import service.BanService;
import tools.PacketCreator;
import java.util.ArrayList;
@@ -48,8 +49,8 @@ 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 SummonDamageHandler(DropProvider dropProvider, BanService banService) {
super(dropProvider, banService);
}
public final class SummonAttackEntry {

View File

@@ -26,11 +26,12 @@ import client.Character;
import client.Client;
import database.drop.DropProvider;
import net.packet.InPacket;
import service.BanService;
public final class TouchMonsterDamageHandler extends AbstractDealDamageHandler {
public TouchMonsterDamageHandler(DropProvider dropProvider) {
super(dropProvider);
public TouchMonsterDamageHandler(DropProvider dropProvider, BanService banService) {
super(dropProvider, banService);
}
@Override

View File

@@ -26,6 +26,7 @@ import client.Client;
import client.autoban.AutobanFactory;
import net.AbstractPacketHandler;
import net.packet.InPacket;
import service.BanService;
import tools.PacketCreator;
/**
@@ -34,6 +35,11 @@ import tools.PacketCreator;
* Modified by -- Ronan - concurrency protection
*/
public class UseGachaExpHandler extends AbstractPacketHandler {
private final BanService banService;
public UseGachaExpHandler(BanService banService) {
this.banService = banService;
}
@Override
public void handlePacket(InPacket p, Client c) {
@@ -41,7 +47,8 @@ public class UseGachaExpHandler extends AbstractPacketHandler {
if (c.tryacquireClient()) {
try {
if (c.getPlayer().getGachaExp() <= 0) {
AutobanFactory.GACHA_EXP.autoban(c.getPlayer(), "Player tried to redeem GachaEXP, but had none to redeem.");
banService.autoban(c.getPlayer(), AutobanFactory.GACHA_EXP, "Player tried to redeem GachaEXP, but had none to redeem.");
return;
}
c.getPlayer().gainGachaExp();
} finally {