diff --git a/src/main/java/client/Character.java b/src/main/java/client/Character.java index e527244d1e..adeab8dad7 100644 --- a/src/main/java/client/Character.java +++ b/src/main/java/client/Character.java @@ -1724,7 +1724,7 @@ public class Character extends AbstractCharacterObject { resetHpDecreaseTask(); } } else { - FilePrinter.printError(FilePrinter.MAPLE_MAP, "Character " + this.getName() + " got stuck when moving to map " + map.getId() + "."); + log.warn("Chr {} got stuck when moving to map {}", getName(), map.getId()); client.disconnect(true, false); // thanks BHB for noticing a player storage stuck case here return; } @@ -5607,9 +5607,8 @@ public class Character extends AbstractCharacterObject { } try { merchant.saveItems(false); - } catch (SQLException ex) { - ex.printStackTrace(); - FilePrinter.printError(FilePrinter.EXCEPTION_CAUGHT, "Error while saving " + name + "'s Hired Merchant items."); + } catch (SQLException e) { + log.error("Error while saving {}'s Hired Merchant items.", name, e); } } } @@ -8244,7 +8243,7 @@ public class Character extends AbstractCharacterObject { int updateRows = ps.executeUpdate(); if (updateRows < 1) { - FilePrinter.printError(FilePrinter.INSERT_CHAR, "Error trying to insert " + name); + log.error("Error trying to insert chr {}", name); return false; } @@ -8252,7 +8251,7 @@ public class Character extends AbstractCharacterObject { if (rs.next()) { this.id = rs.getInt(1); } else { - FilePrinter.printError(FilePrinter.INSERT_CHAR, "Inserting char failed " + name); + log.error("Inserting chr {} failed", name); return false; } } diff --git a/src/main/java/client/command/commands/gm0/GmCommand.java b/src/main/java/client/command/commands/gm0/GmCommand.java index 53810d3f4f..5d24133717 100644 --- a/src/main/java/client/command/commands/gm0/GmCommand.java +++ b/src/main/java/client/command/commands/gm0/GmCommand.java @@ -27,7 +27,8 @@ import client.Character; import client.Client; import client.command.Command; import net.server.Server; -import tools.FilePrinter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import tools.PacketCreator; import tools.Randomizer; @@ -36,6 +37,8 @@ public class GmCommand extends Command { setDescription("Send a message to the game masters."); } + private static final Logger log = LoggerFactory.getLogger(GmCommand.class); + @Override public void execute(Client c, String[] params) { String[] tips = { @@ -53,7 +56,7 @@ public class GmCommand extends Command { String message = player.getLastCommandMessage(); Server.getInstance().broadcastGMMessage(c.getWorld(), PacketCreator.sendYellowTip("[GM Message]:" + Character.makeMapleReadable(player.getName()) + ": " + message)); Server.getInstance().broadcastGMMessage(c.getWorld(), PacketCreator.serverNotice(1, message)); - FilePrinter.printError(FilePrinter.COMMAND_GM, Character.makeMapleReadable(player.getName()) + ": " + message); + log.info("{}: {}", Character.makeMapleReadable(player.getName()), message); player.dropMessage(5, "Your message '" + message + "' was sent to GMs."); player.dropMessage(5, tips[Randomizer.nextInt(tips.length)]); } diff --git a/src/main/java/client/command/commands/gm0/ReportBugCommand.java b/src/main/java/client/command/commands/gm0/ReportBugCommand.java index dc2f539dba..53e35013db 100644 --- a/src/main/java/client/command/commands/gm0/ReportBugCommand.java +++ b/src/main/java/client/command/commands/gm0/ReportBugCommand.java @@ -27,7 +27,8 @@ import client.Character; import client.Client; import client.command.Command; import net.server.Server; -import tools.FilePrinter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import tools.PacketCreator; public class ReportBugCommand extends Command { @@ -35,6 +36,8 @@ public class ReportBugCommand extends Command { setDescription("Send in a bug report."); } + private static final Logger log = LoggerFactory.getLogger(ReportBugCommand.class); + @Override public void execute(Client c, String[] params) { Character player = c.getPlayer(); @@ -46,7 +49,7 @@ public class ReportBugCommand extends Command { String message = player.getLastCommandMessage(); Server.getInstance().broadcastGMMessage(c.getWorld(), PacketCreator.sendYellowTip("[Bug]:" + Character.makeMapleReadable(player.getName()) + ": " + message)); Server.getInstance().broadcastGMMessage(c.getWorld(), PacketCreator.serverNotice(1, message)); - FilePrinter.printError(FilePrinter.COMMAND_BUG, Character.makeMapleReadable(player.getName()) + ": " + message); + log.info("{}: {}", Character.makeMapleReadable(player.getName()), message); player.dropMessage(5, "Your bug '" + message + "' was submitted successfully to our developers. Thank you!"); } diff --git a/src/main/java/client/inventory/Inventory.java b/src/main/java/client/inventory/Inventory.java index 04c0eeec46..c7cebaf0ce 100644 --- a/src/main/java/client/inventory/Inventory.java +++ b/src/main/java/client/inventory/Inventory.java @@ -27,9 +27,10 @@ import client.inventory.manipulator.InventoryManipulator; import constants.inventory.ItemConstants; import net.server.audit.locks.MonitoredLockType; import net.server.audit.locks.factory.MonitoredReentrantLockFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import server.ItemInformationProvider; import server.ThreadManager; -import tools.FilePrinter; import tools.Pair; import java.util.*; @@ -40,6 +41,7 @@ import java.util.concurrent.locks.Lock; * @author Matze, Ronan */ public class Inventory implements Iterable { + private static final Logger log = LoggerFactory.getLogger(Inventory.class); protected final Map inventory; protected final InventoryType type; protected final Lock lock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.INVENTORY, true); @@ -117,7 +119,7 @@ public class Inventory implements Iterable { for (Item item : list()) { String itemName = ii.getName(item.getItemId()); if (itemName == null) { - FilePrinter.printError(FilePrinter.EXCEPTION, "[CRITICAL] Item " + item.getItemId() + " has no name."); + log.error("[CRITICAL] Item {} has no name", item.getItemId()); continue; } diff --git a/src/main/java/client/inventory/manipulator/InventoryManipulator.java b/src/main/java/client/inventory/manipulator/InventoryManipulator.java index cf2d885f22..6ec0aa01d2 100644 --- a/src/main/java/client/inventory/manipulator/InventoryManipulator.java +++ b/src/main/java/client/inventory/manipulator/InventoryManipulator.java @@ -29,9 +29,10 @@ import client.newyear.NewYearCardRecord; import config.YamlConfig; import constants.id.ItemId; import constants.inventory.ItemConstants; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import server.ItemInformationProvider; import server.maps.MapleMap; -import tools.FilePrinter; import tools.PacketCreator; import java.awt.*; @@ -45,6 +46,7 @@ import java.util.List; * @author Ronan - improved check space feature and removed redundant object calls */ public class InventoryManipulator { + private static final Logger log = LoggerFactory.getLogger(InventoryManipulator.class); public static boolean addById(Client c, int itemId, short quantity) { return addById(c, itemId, quantity, null, -1, -1); @@ -269,7 +271,7 @@ public class InventoryManipulator { chr.setHasSandboxItem(); } } else { - FilePrinter.printError(FilePrinter.ITEM, "Tried to pickup Equip id " + itemid + " containing more than 1 quantity --> " + quantity); + log.warn("Tried to pickup Equip id {} containing more than 1 quantity --> {}", itemid, quantity); c.sendPacket(PacketCreator.getInventoryFull()); c.sendPacket(PacketCreator.showItemUnavailable()); return false; diff --git a/src/main/java/client/processor/action/MakerProcessor.java b/src/main/java/client/processor/action/MakerProcessor.java index 3f11ed9e6b..e1461536cd 100644 --- a/src/main/java/client/processor/action/MakerProcessor.java +++ b/src/main/java/client/processor/action/MakerProcessor.java @@ -30,10 +30,11 @@ import constants.game.GameConstants; import constants.id.ItemId; import constants.inventory.ItemConstants; import net.packet.InPacket; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import server.ItemInformationProvider; import server.MakerItemFactory; import server.MakerItemFactory.MakerItemCreateEntry; -import tools.FilePrinter; import tools.PacketCreator; import tools.Pair; @@ -46,7 +47,7 @@ import java.util.Map; * @author Ronan */ public class MakerProcessor { - + private static final Logger log = LoggerFactory.getLogger(MakerProcessor.class); private static final ItemInformationProvider ii = ItemInformationProvider.getInstance(); public static void makerAction(InPacket p, Client c) { @@ -150,7 +151,7 @@ public class MakerProcessor { switch (createStatus) { case -1:// non-available for Maker itemid has been tried to forge - FilePrinter.printError(FilePrinter.EXPLOITS, "Player " + c.getPlayer().getName() + " tried to craft itemid " + toCreate + " using the Maker skill."); + log.warn("Chr {} tried to craft itemid {} using the Maker skill.", c.getPlayer().getName(), toCreate); c.sendPacket(PacketCreator.serverNotice(1, "The requested item could not be crafted on this operation.")); c.sendPacket(PacketCreator.makerEnableActions()); break; diff --git a/src/main/java/client/processor/npc/DueyProcessor.java b/src/main/java/client/processor/npc/DueyProcessor.java index 8e70ff2719..8db12fc8cd 100644 --- a/src/main/java/client/processor/npc/DueyProcessor.java +++ b/src/main/java/client/processor/npc/DueyProcessor.java @@ -36,11 +36,12 @@ import config.YamlConfig; import constants.id.ItemId; import constants.inventory.ItemConstants; import net.server.channel.Channel; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import server.DueyPackage; import server.ItemInformationProvider; import server.Trade; import tools.DatabaseConnection; -import tools.FilePrinter; import tools.PacketCreator; import tools.Pair; @@ -54,6 +55,7 @@ import java.util.List; * @author RonanLana - synchronization of Duey modules */ public class DueyProcessor { + private static final Logger log = LoggerFactory.getLogger(DueyProcessor.class); public enum Actions { TOSERVER_RECV_ITEM(0x00), @@ -204,7 +206,7 @@ public class DueyProcessor { int updateRows = ps.executeUpdate(); if (updateRows < 1) { - FilePrinter.printError(FilePrinter.INSERT_CHAR, "Error trying to create package [mesos: " + mesos + ", " + sender + ", quick: " + quick + ", to CharacterId: " + toCid + "]"); + log.error("Error trying to create package [mesos: {}, sender: {}, quick: {}, receiver chrId: {}]", mesos, sender, quick, toCid); return -1; } @@ -213,7 +215,7 @@ public class DueyProcessor { if (rs.next()) { packageId = rs.getInt(1); } else { - FilePrinter.printError(FilePrinter.INSERT_CHAR, "Failed inserting package [mesos: " + mesos + ", " + sender + ", quick: " + quick + ", to CharacterId: " + toCid + "]"); + log.error("Failed inserting package [mesos: {}, sender: {}, quick: {}, receiver chrId: {}]", mesos, sender, quick, toCid); return -1; } } @@ -287,7 +289,7 @@ public class DueyProcessor { fee += 5000; } else if (!c.getPlayer().haveItem(ItemId.QUICK_DELIVERY_TICKET)) { AutobanFactory.PACKET_EDIT.alert(c.getPlayer(), c.getPlayer().getName() + " tried to packet edit with Quick Delivery on duey."); - FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to use duey with Quick Delivery, mesos " + sendMesos + " and amount " + amount); + log.warn("Chr {} tried to use duey with Quick Delivery without a ticket, mesos {} and amount {}", c.getPlayer().getName(), sendMesos, amount); c.disconnect(true, false); return; } @@ -295,7 +297,7 @@ public class DueyProcessor { long finalcost = (long) sendMesos + fee; if (finalcost < 0 || finalcost > Integer.MAX_VALUE || (amount < 1 && sendMesos == 0)) { AutobanFactory.PACKET_EDIT.alert(c.getPlayer(), c.getPlayer().getName() + " tried to packet edit with duey."); - FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to use duey with mesos " + sendMesos + " and amount " + amount); + log.warn("Chr {} tried to use duey with mesos {} and amount {}", c.getPlayer().getName(), sendMesos, amount); c.disconnect(true, false); return; } @@ -394,7 +396,7 @@ public class DueyProcessor { if (dp == null) { c.sendPacket(PacketCreator.sendDueyMSG(Actions.TOCLIENT_RECV_UNKNOWN_ERROR.getCode())); - FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to receive package from duey with id " + packageId); + log.warn("Chr {} tried to receive package from duey with id {}", c.getPlayer().getName(), packageId); return; } diff --git a/src/main/java/client/processor/stat/AssignSPProcessor.java b/src/main/java/client/processor/stat/AssignSPProcessor.java index d961a768ca..e3f648263f 100644 --- a/src/main/java/client/processor/stat/AssignSPProcessor.java +++ b/src/main/java/client/processor/stat/AssignSPProcessor.java @@ -30,13 +30,15 @@ import client.SkillFactory; import client.autoban.AutobanFactory; import constants.game.GameConstants; import constants.skills.Aran; -import tools.FilePrinter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import tools.PacketCreator; /** * @author RonanLana - synchronization of SP transaction modules */ public class AssignSPProcessor { + private static final Logger log = LoggerFactory.getLogger(AssignSPProcessor.class); public static boolean canSPAssign(Client c, int skillid) { if (skillid == Aran.HIDDEN_FULL_DOUBLE || skillid == Aran.HIDDEN_FULL_TRIPLE || skillid == Aran.HIDDEN_OVER_DOUBLE || skillid == Aran.HIDDEN_OVER_TRIPLE) { @@ -47,7 +49,7 @@ public class AssignSPProcessor { Character player = c.getPlayer(); if ((!GameConstants.isPqSkillMap(player.getMapId()) && GameConstants.isPqSkill(skillid)) || (!player.isGM() && GameConstants.isGMSkills(skillid)) || (!GameConstants.isInJobTree(skillid, player.getJob().getId()) && !player.isGM())) { AutobanFactory.PACKET_EDIT.alert(player, "tried to packet edit in distributing sp."); - FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to use skill " + skillid + " without it being in their job."); + log.warn("Chr {} tried to use skill {} without it being in their job.", c.getPlayer().getName(), skillid); c.disconnect(true, false); return false; diff --git a/src/main/java/net/server/audit/ThreadTracker.java b/src/main/java/net/server/audit/ThreadTracker.java index d296428c79..350008727d 100644 --- a/src/main/java/net/server/audit/ThreadTracker.java +++ b/src/main/java/net/server/audit/ThreadTracker.java @@ -23,7 +23,6 @@ import net.server.audit.locks.MonitoredLockType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import server.TimerManager; -import tools.FilePrinter; import java.text.DateFormat; import java.text.SimpleDateFormat; @@ -191,7 +190,7 @@ public class ThreadTracker { DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss"); dateFormat.setTimeZone(TimeZone.getDefault()); - FilePrinter.printError(FilePrinter.DEADLOCK_STATE, printThreadTrackerState(dateFormat.format(new Date()))); + log.error("Deadlock state: {}", printThreadTrackerState(dateFormat.format(new Date()))); //FilePrinter.printError(FilePrinter.DEADLOCK_STATE, "[" + dateFormat.format(new Date()) + "] Presenting current lock path for lockid " + lockId.name() + ".\r\n" + printLockStatus(lockId) + "\r\n-------------------------------"); } } else { diff --git a/src/main/java/net/server/audit/locks/empty/EmptyReadLock.java b/src/main/java/net/server/audit/locks/empty/EmptyReadLock.java index 1e6c5eb1f1..b703a0a87b 100644 --- a/src/main/java/net/server/audit/locks/empty/EmptyReadLock.java +++ b/src/main/java/net/server/audit/locks/empty/EmptyReadLock.java @@ -21,12 +21,14 @@ package net.server.audit.locks.empty; import net.server.audit.locks.MonitoredLockType; import net.server.audit.locks.MonitoredReadLock; -import tools.FilePrinter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * @author RonanLana */ public class EmptyReadLock extends AbstractEmptyLock implements MonitoredReadLock { + private static final Logger log = LoggerFactory.getLogger(EmptyReadLock.class); private final MonitoredLockType id; public EmptyReadLock(MonitoredLockType type) { @@ -35,7 +37,7 @@ public class EmptyReadLock extends AbstractEmptyLock implements MonitoredReadLoc @Override public void lock() { - FilePrinter.printError(FilePrinter.DISPOSED_LOCKS, "Captured locking tentative on disposed lock " + id + ":" + printThreadStack(Thread.currentThread().getStackTrace())); + log.warn("Captured locking tentative on disposed lock {}: {}", id, printThreadStack(Thread.currentThread().getStackTrace())); } @Override @@ -43,7 +45,7 @@ public class EmptyReadLock extends AbstractEmptyLock implements MonitoredReadLoc @Override public boolean tryLock() { - FilePrinter.printError(FilePrinter.DISPOSED_LOCKS, "Captured try-locking tentative on disposed lock " + id + ":" + printThreadStack(Thread.currentThread().getStackTrace())); + log.warn("Captured try-locking tentative on disposed lock {}: {}", id, printThreadStack(Thread.currentThread().getStackTrace())); return false; } diff --git a/src/main/java/net/server/audit/locks/empty/EmptyReentrantLock.java b/src/main/java/net/server/audit/locks/empty/EmptyReentrantLock.java index ebd3578a1f..cd4e699b5b 100644 --- a/src/main/java/net/server/audit/locks/empty/EmptyReentrantLock.java +++ b/src/main/java/net/server/audit/locks/empty/EmptyReentrantLock.java @@ -21,12 +21,14 @@ package net.server.audit.locks.empty; import net.server.audit.locks.MonitoredLockType; import net.server.audit.locks.MonitoredReentrantLock; -import tools.FilePrinter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * @author RonanLana */ public class EmptyReentrantLock extends AbstractEmptyLock implements MonitoredReentrantLock { + private static final Logger log = LoggerFactory.getLogger(EmptyReentrantLock.class); private final MonitoredLockType id; public EmptyReentrantLock(MonitoredLockType type) { @@ -35,7 +37,7 @@ public class EmptyReentrantLock extends AbstractEmptyLock implements MonitoredRe @Override public void lock() { - FilePrinter.printError(FilePrinter.DISPOSED_LOCKS, "Captured locking tentative on disposed lock " + id + ":" + printThreadStack(Thread.currentThread().getStackTrace())); + log.warn("Captured locking tentative on disposed lock {}: {}", id, printThreadStack(Thread.currentThread().getStackTrace())); } @Override @@ -43,7 +45,7 @@ public class EmptyReentrantLock extends AbstractEmptyLock implements MonitoredRe @Override public boolean tryLock() { - FilePrinter.printError(FilePrinter.DISPOSED_LOCKS, "Captured try-locking tentative on disposed lock " + id + ":" + printThreadStack(Thread.currentThread().getStackTrace())); + log.warn("Captured try-locking tentative on disposed lock {}: {}", id, printThreadStack(Thread.currentThread().getStackTrace())); return false; } diff --git a/src/main/java/net/server/audit/locks/empty/EmptyWriteLock.java b/src/main/java/net/server/audit/locks/empty/EmptyWriteLock.java index d4ab75c529..8d3a55e82d 100644 --- a/src/main/java/net/server/audit/locks/empty/EmptyWriteLock.java +++ b/src/main/java/net/server/audit/locks/empty/EmptyWriteLock.java @@ -21,12 +21,14 @@ package net.server.audit.locks.empty; import net.server.audit.locks.MonitoredLockType; import net.server.audit.locks.MonitoredWriteLock; -import tools.FilePrinter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * @author RonanLana */ public class EmptyWriteLock extends AbstractEmptyLock implements MonitoredWriteLock { + private static final Logger log = LoggerFactory.getLogger(EmptyWriteLock.class); private final MonitoredLockType id; public EmptyWriteLock(MonitoredLockType type) { @@ -35,7 +37,7 @@ public class EmptyWriteLock extends AbstractEmptyLock implements MonitoredWriteL @Override public void lock() { - FilePrinter.printError(FilePrinter.DISPOSED_LOCKS, "Captured locking tentative on disposed lock " + id + ":" + printThreadStack(Thread.currentThread().getStackTrace())); + log.warn("Captured locking tentative on disposed lock {}: {}", id, printThreadStack(Thread.currentThread().getStackTrace())); } @Override @@ -43,7 +45,7 @@ public class EmptyWriteLock extends AbstractEmptyLock implements MonitoredWriteL @Override public boolean tryLock() { - FilePrinter.printError(FilePrinter.DISPOSED_LOCKS, "Captured try-locking tentative on disposed lock " + id + ":" + printThreadStack(Thread.currentThread().getStackTrace())); + log.warn("Captured try-locking tentative on dispsoed lock {}: {}", id, printThreadStack(Thread.currentThread().getStackTrace())); return false; } diff --git a/src/main/java/net/server/channel/handlers/ChangeMapHandler.java b/src/main/java/net/server/channel/handlers/ChangeMapHandler.java index 675cf2e199..9d11b65c30 100644 --- a/src/main/java/net/server/channel/handlers/ChangeMapHandler.java +++ b/src/main/java/net/server/channel/handlers/ChangeMapHandler.java @@ -29,26 +29,27 @@ import constants.id.ItemId; import constants.id.MapId; import net.AbstractPacketHandler; import net.packet.InPacket; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import server.Trade; import server.maps.MapleMap; import server.maps.Portal; -import tools.FilePrinter; import tools.PacketCreator; import java.awt.*; import java.net.InetAddress; import java.net.UnknownHostException; -import java.util.Calendar; public final class ChangeMapHandler extends AbstractPacketHandler { + private static final Logger log = LoggerFactory.getLogger(ChangeMapHandler.class); @Override - public final void handlePacket(InPacket p, Client c) { + public void handlePacket(InPacket p, Client c) { Character chr = c.getPlayer(); if (chr.isChangingMaps() || chr.isBanned()) { if (chr.isChangingMaps()) { - FilePrinter.printError(FilePrinter.PORTAL_STUCK + chr.getName() + ".txt", "Player " + chr.getName() + " got stuck when changing maps. Timestamp: " + Calendar.getInstance().getTime() + " Last visited mapids: " + chr.getLastVisitedMapids()); + log.warn("Chr {} got stuck when changing maps. Last visited mapids: {}", chr.getName(), chr.getLastVisitedMapids()); } c.sendPacket(PacketCreator.enableActions()); diff --git a/src/main/java/net/server/channel/handlers/CouponCodeHandler.java b/src/main/java/net/server/channel/handlers/CouponCodeHandler.java index 90475f2028..7f5085990c 100644 --- a/src/main/java/net/server/channel/handlers/CouponCodeHandler.java +++ b/src/main/java/net/server/channel/handlers/CouponCodeHandler.java @@ -30,10 +30,11 @@ import client.inventory.manipulator.InventoryManipulator; import net.AbstractPacketHandler; import net.packet.InPacket; import net.server.Server; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import server.CashShop; import server.ItemInformationProvider; import tools.DatabaseConnection; -import tools.FilePrinter; import tools.PacketCreator; import tools.Pair; @@ -49,6 +50,7 @@ import java.util.Map.Entry; * @author Ronan (HeavenMS) */ public final class CouponCodeHandler extends AbstractPacketHandler { + private static final Logger log = LoggerFactory.getLogger(CouponCodeHandler.class); private static List>> getNXCodeItems(Character chr, Connection con, int codeid) throws SQLException { Map couponItems = new HashMap<>(); @@ -90,7 +92,7 @@ public final class CouponCodeHandler extends AbstractPacketHandler { item = 4000000; qty = 1; - FilePrinter.printError(FilePrinter.UNHANDLED_EVENT, "Error trying to redeem itemid " + item + " from codeid " + codeid + "."); + log.warn("Error trying to redeem itemid {} from coupon codeid {}", item, codeid); } if (!chr.canHold(item, qty)) { diff --git a/src/main/java/net/server/channel/handlers/FieldDamageMobHandler.java b/src/main/java/net/server/channel/handlers/FieldDamageMobHandler.java index ea2b5af4d5..6fdb98b197 100644 --- a/src/main/java/net/server/channel/handlers/FieldDamageMobHandler.java +++ b/src/main/java/net/server/channel/handlers/FieldDamageMobHandler.java @@ -24,13 +24,15 @@ import client.Client; import constants.game.GameConstants; import net.AbstractPacketHandler; import net.packet.InPacket; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import server.life.Monster; import server.life.MonsterInformationProvider; import server.maps.MapleMap; -import tools.FilePrinter; import tools.PacketCreator; public class FieldDamageMobHandler extends AbstractPacketHandler { + private static final Logger log = LoggerFactory.getLogger(FieldDamageMobHandler.class); @Override public final void handlePacket(InPacket p, Client c) { @@ -41,14 +43,15 @@ public class FieldDamageMobHandler extends AbstractPacketHandler { MapleMap map = chr.getMap(); if (map.getEnvironment().isEmpty()) { // no environment objects activated to actually hit the mob - FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to use an obstacle on mapid " + map.getId() + " to attack."); + log.warn("Chr {} tried to use an obstacle on mapid {} to attack", c.getPlayer().getName(), map.getId()); return; } Monster mob = map.getMonsterByOid(mobOid); if (mob != null) { if (dmg < 0 || dmg > GameConstants.MAX_FIELD_MOB_DAMAGE) { - FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to use an obstacle on mapid " + map.getId() + " to attack " + MonsterInformationProvider.getInstance().getMobNameFromId(mob.getId()) + " with damage " + dmg); + log.warn("Chr {} tried to use an obstacle on mapid {} to attack {} with damage {}", c.getPlayer().getName(), + map.getId(), MonsterInformationProvider.getInstance().getMobNameFromId(mob.getId()), dmg); return; } diff --git a/src/main/java/net/server/channel/handlers/GeneralChatHandler.java b/src/main/java/net/server/channel/handlers/GeneralChatHandler.java index f5b57dadd8..1826d86856 100644 --- a/src/main/java/net/server/channel/handlers/GeneralChatHandler.java +++ b/src/main/java/net/server/channel/handlers/GeneralChatHandler.java @@ -27,13 +27,16 @@ import client.autoban.AutobanFactory; import client.command.CommandsExecutor; import net.AbstractPacketHandler; import net.packet.InPacket; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import server.ChatLogger; -import tools.FilePrinter; import tools.PacketCreator; public final class GeneralChatHandler extends AbstractPacketHandler { + private static final Logger log = LoggerFactory.getLogger(GeneralChatHandler.class); + @Override - public final void handlePacket(InPacket p, Client c) { + public void handlePacket(InPacket p, Client c) { String s = p.readString(); Character chr = c.getPlayer(); if (chr.getAutobanManager().getLastSpam(7) + 200 > currentServerTime()) { @@ -42,7 +45,7 @@ public final class GeneralChatHandler extends AbstractPacketHandler { } if (s.length() > Byte.MAX_VALUE && !chr.isGM()) { AutobanFactory.PACKET_EDIT.alert(c.getPlayer(), c.getPlayer().getName() + " tried to packet edit in General Chat."); - FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to send text with length of " + s.length()); + log.warn("Chr {} tried to send text with length of {}", c.getPlayer().getName(), s.length()); c.disconnect(true, false); return; } diff --git a/src/main/java/net/server/channel/handlers/GiveFameHandler.java b/src/main/java/net/server/channel/handlers/GiveFameHandler.java index 2e9bfcee4c..4b1804cc5d 100644 --- a/src/main/java/net/server/channel/handlers/GiveFameHandler.java +++ b/src/main/java/net/server/channel/handlers/GiveFameHandler.java @@ -27,13 +27,15 @@ import client.Client; import client.autoban.AutobanFactory; import net.AbstractPacketHandler; import net.packet.InPacket; -import tools.FilePrinter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import tools.PacketCreator; public final class GiveFameHandler extends AbstractPacketHandler { + private static final Logger log = LoggerFactory.getLogger(GiveFameHandler.class); @Override - public final void handlePacket(InPacket p, Client c) { + public void handlePacket(InPacket p, Client c) { Character target = (Character) c.getPlayer().getMap().getMapObject(p.readInt()); int mode = p.readByte(); int famechange = 2 * mode - 1; @@ -42,7 +44,7 @@ public final class GiveFameHandler extends AbstractPacketHandler { return; } else if (famechange != 1 && famechange != -1) { AutobanFactory.PACKET_EDIT.alert(c.getPlayer(), c.getPlayer().getName() + " tried to packet edit fame."); - FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to fame hack with famechange " + famechange); + log.warn("Chr {} tried to fame hack with famechange {}", c.getPlayer().getName(), famechange); c.disconnect(true, false); return; } diff --git a/src/main/java/net/server/channel/handlers/GrenadeEffectHandler.java b/src/main/java/net/server/channel/handlers/GrenadeEffectHandler.java index 4032f64e76..05bcfe63c1 100644 --- a/src/main/java/net/server/channel/handlers/GrenadeEffectHandler.java +++ b/src/main/java/net/server/channel/handlers/GrenadeEffectHandler.java @@ -25,7 +25,8 @@ import constants.skills.Gunslinger; import constants.skills.NightWalker; import net.AbstractPacketHandler; import net.packet.InPacket; -import tools.FilePrinter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import tools.PacketCreator; import java.awt.*; @@ -34,6 +35,7 @@ import java.awt.*; * @author GabrielSin */ public class GrenadeEffectHandler extends AbstractPacketHandler { + private static final Logger log = LoggerFactory.getLogger(GrenadeEffectHandler.class); @Override public void handlePacket(InPacket p, Client c) { @@ -51,7 +53,7 @@ public class GrenadeEffectHandler extends AbstractPacketHandler { } break; default: - FilePrinter.printError(FilePrinter.UNHANDLED_EVENT, "The skill id: " + skillId + " is not coded in " + this.getClass().getName() + "."); + log.warn("The skill id: {} is not coded in {}", skillId, getClass().getSimpleName()); } } diff --git a/src/main/java/net/server/channel/handlers/ItemPickupHandler.java b/src/main/java/net/server/channel/handlers/ItemPickupHandler.java index c16079f367..fce0589076 100644 --- a/src/main/java/net/server/channel/handlers/ItemPickupHandler.java +++ b/src/main/java/net/server/channel/handlers/ItemPickupHandler.java @@ -25,8 +25,9 @@ import client.Character; import client.Client; import net.AbstractPacketHandler; import net.packet.InPacket; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import server.maps.MapObject; -import tools.FilePrinter; import java.awt.*; @@ -35,9 +36,10 @@ import java.awt.*; * @author Ronan */ public final class ItemPickupHandler extends AbstractPacketHandler { + private static final Logger log = LoggerFactory.getLogger(ItemPickupHandler.class); @Override - public final void handlePacket(final InPacket p, final Client c) { + public void handlePacket(final InPacket p, final Client c) { p.readInt(); //Timestamp p.readByte(); p.readPos(); //cpos @@ -51,7 +53,8 @@ public final class ItemPickupHandler extends AbstractPacketHandler { Point charPos = chr.getPosition(); Point obPos = ob.getPosition(); if (Math.abs(charPos.getX() - obPos.getX()) > 800 || Math.abs(charPos.getY() - obPos.getY()) > 600) { - FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to pick up an item too far away. Mapid: " + chr.getMapId() + " Player pos: " + charPos + " Object pos: " + obPos); + log.warn("Chr {} tried to pick up an item too far away. Mapid: {}, player pos: {}, object pos: {}", + c.getPlayer().getName(), chr.getMapId(), charPos, obPos); return; } diff --git a/src/main/java/net/server/channel/handlers/MobDamageMobHandler.java b/src/main/java/net/server/channel/handlers/MobDamageMobHandler.java index 1bf961c3f2..ad50bd5afb 100644 --- a/src/main/java/net/server/channel/handlers/MobDamageMobHandler.java +++ b/src/main/java/net/server/channel/handlers/MobDamageMobHandler.java @@ -28,10 +28,11 @@ import client.status.MonsterStatus; import client.status.MonsterStatusEffect; import net.AbstractPacketHandler; import net.packet.InPacket; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import server.life.Monster; import server.life.MonsterInformationProvider; import server.maps.MapleMap; -import tools.FilePrinter; import tools.PacketCreator; import java.util.Map; @@ -41,8 +42,10 @@ import java.util.Map; * @author Ronan */ public final class MobDamageMobHandler extends AbstractPacketHandler { + private static final Logger log = LoggerFactory.getLogger(MobDamageMobHandler.class); + @Override - public final void handlePacket(InPacket p, Client c) { + public void handlePacket(InPacket p, Client c) { int from = p.readInt(); p.readInt(); int to = p.readInt(); @@ -59,8 +62,10 @@ public final class MobDamageMobHandler extends AbstractPacketHandler { if (dmg > maxDmg) { AutobanFactory.DAMAGE_HACK.alert(c.getPlayer(), "Possible packet editing hypnotize damage exploit."); // thanks Rien dev team - - FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " had hypnotized " + MonsterInformationProvider.getInstance().getMobNameFromId(attacker.getId()) + " to attack " + MonsterInformationProvider.getInstance().getMobNameFromId(damaged.getId()) + " with damage " + dmg + " (max: " + maxDmg + ")"); + String attackerName = MonsterInformationProvider.getInstance().getMobNameFromId(attacker.getId()); + String damagedName = MonsterInformationProvider.getInstance().getMobNameFromId(damaged.getId()); + log.warn("Chr {} had hypnotized {} to attack {} with damage {} (max: {})", c.getPlayer().getName(), + attackerName, damagedName, dmg, maxDmg); dmg = maxDmg; } diff --git a/src/main/java/net/server/channel/handlers/MultiChatHandler.java b/src/main/java/net/server/channel/handlers/MultiChatHandler.java index 8746b79a54..99564a36ce 100644 --- a/src/main/java/net/server/channel/handlers/MultiChatHandler.java +++ b/src/main/java/net/server/channel/handlers/MultiChatHandler.java @@ -28,13 +28,16 @@ import net.AbstractPacketHandler; import net.packet.InPacket; import net.server.Server; import net.server.world.World; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import server.ChatLogger; -import tools.FilePrinter; import tools.PacketCreator; public final class MultiChatHandler extends AbstractPacketHandler { + private static final Logger log = LoggerFactory.getLogger(MultiChatHandler.class); + @Override - public final void handlePacket(InPacket p, Client c) { + public void handlePacket(InPacket p, Client c) { Character player = c.getPlayer(); if (player.getAutobanManager().getLastSpam(7) + 200 > currentServerTime()) { return; @@ -49,7 +52,7 @@ public final class MultiChatHandler extends AbstractPacketHandler { String chattext = p.readString(); if (chattext.length() > Byte.MAX_VALUE && !player.isGM()) { AutobanFactory.PACKET_EDIT.alert(c.getPlayer(), c.getPlayer().getName() + " tried to packet edit chats."); - FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to send text with length of " + chattext.length()); + log.warn("Chr {} tried to send text with length of {}", c.getPlayer().getName(), chattext.length()); c.disconnect(true, false); return; } diff --git a/src/main/java/net/server/channel/handlers/NPCShopHandler.java b/src/main/java/net/server/channel/handlers/NPCShopHandler.java index 47ccda3b67..1b9ab4f6d1 100644 --- a/src/main/java/net/server/channel/handlers/NPCShopHandler.java +++ b/src/main/java/net/server/channel/handlers/NPCShopHandler.java @@ -26,13 +26,17 @@ import client.autoban.AutobanFactory; import constants.inventory.ItemConstants; import net.AbstractPacketHandler; import net.packet.InPacket; -import tools.FilePrinter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * @author Matze */ public final class NPCShopHandler extends AbstractPacketHandler { - public final void handlePacket(InPacket p, Client c) { + private static final Logger log = LoggerFactory.getLogger(NPCShopHandler.class); + + @Override + public void handlePacket(InPacket p, Client c) { byte bmode = p.readByte(); if (bmode == 0) { // mode 0 = buy :) short slot = p.readShort();// slot @@ -40,7 +44,7 @@ public final class NPCShopHandler extends AbstractPacketHandler { short quantity = p.readShort(); if (quantity < 1) { AutobanFactory.PACKET_EDIT.alert(c.getPlayer(), c.getPlayer().getName() + " tried to packet edit a npc shop."); - FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to buy quantity " + quantity + " of item id " + itemId); + log.warn("Chr {} tried to buy quantity {} of itemid {}", c.getPlayer().getName(), quantity, itemId); c.disconnect(true, false); return; } diff --git a/src/main/java/net/server/channel/handlers/NPCTalkHandler.java b/src/main/java/net/server/channel/handlers/NPCTalkHandler.java index 34def313b2..0815174dbe 100644 --- a/src/main/java/net/server/channel/handlers/NPCTalkHandler.java +++ b/src/main/java/net/server/channel/handlers/NPCTalkHandler.java @@ -27,16 +27,19 @@ import config.YamlConfig; import constants.id.NpcId; import net.AbstractPacketHandler; import net.packet.InPacket; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import scripting.npc.NPCScriptManager; import server.life.NPC; import server.life.PlayerNPC; import server.maps.MapObject; -import tools.FilePrinter; import tools.PacketCreator; public final class NPCTalkHandler extends AbstractPacketHandler { + private static final Logger log = LoggerFactory.getLogger(NPCTalkHandler.class); + @Override - public final void handlePacket(InPacket p, Client c) { + public void handlePacket(InPacket p, Client c) { if (!c.getPlayer().isAlive()) { c.sendPacket(PacketCreator.enableActions()); return; @@ -73,7 +76,7 @@ public final class NPCTalkHandler extends AbstractPacketHandler { boolean hasNpcScript = NPCScriptManager.getInstance().start(c, npc.getId(), oid, null); if (!hasNpcScript) { if (!npc.hasShop()) { - FilePrinter.printError(FilePrinter.NPC_UNCODED, "NPC " + npc.getName() + "(" + npc.getId() + ") is not coded."); + log.warn("NPC {} ({}) is not coded", npc.getName(), npc.getId()); return; } else if (c.getPlayer().getShop() != null) { c.sendPacket(PacketCreator.enableActions()); diff --git a/src/main/java/net/server/channel/handlers/PetChatHandler.java b/src/main/java/net/server/channel/handlers/PetChatHandler.java index 458afdb406..b4863ae962 100644 --- a/src/main/java/net/server/channel/handlers/PetChatHandler.java +++ b/src/main/java/net/server/channel/handlers/PetChatHandler.java @@ -25,14 +25,16 @@ import client.Client; import client.autoban.AutobanFactory; import net.AbstractPacketHandler; import net.packet.InPacket; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import server.ChatLogger; -import tools.FilePrinter; import tools.PacketCreator; public final class PetChatHandler extends AbstractPacketHandler { + private static final Logger log = LoggerFactory.getLogger(PetChatHandler.class); @Override - public final void handlePacket(InPacket p, Client c) { + public void handlePacket(InPacket p, Client c) { int petId = p.readInt(); p.readInt(); p.readByte(); @@ -44,7 +46,7 @@ public final class PetChatHandler extends AbstractPacketHandler { String text = p.readString(); if (text.length() > Byte.MAX_VALUE) { AutobanFactory.PACKET_EDIT.alert(c.getPlayer(), c.getPlayer().getName() + " tried to packet edit with pets."); - FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to send text with length of " + text.length()); + log.warn("Chr {} tried to send text with length of {}", c.getPlayer().getName(), text.length()); c.disconnect(true, false); return; } diff --git a/src/main/java/net/server/channel/handlers/PlayerInteractionHandler.java b/src/main/java/net/server/channel/handlers/PlayerInteractionHandler.java index 9f52f8e476..76e76c4531 100644 --- a/src/main/java/net/server/channel/handlers/PlayerInteractionHandler.java +++ b/src/main/java/net/server/channel/handlers/PlayerInteractionHandler.java @@ -41,7 +41,6 @@ import server.ItemInformationProvider; import server.Trade; import server.maps.*; import server.maps.MiniGame.MiniGameType; -import tools.FilePrinter; import tools.PacketCreator; import java.awt.*; @@ -601,7 +600,8 @@ public final class PlayerInteractionHandler extends AbstractPacketHandler { int price = p.readInt(); if (perBundle <= 0 || perBundle * bundles > 2000 || bundles <= 0 || price <= 0 || price > Integer.MAX_VALUE) { AutobanFactory.PACKET_EDIT.alert(chr, chr.getName() + " tried to packet edit with hired merchants."); - FilePrinter.printError(FilePrinter.EXPLOITS + chr.getName() + ".txt", chr.getName() + " might of possibly packet edited Hired Merchants\nperBundle: " + perBundle + "\nperBundle * bundles (This multiplied cannot be greater than 2000): " + perBundle * bundles + "\nbundles: " + bundles + "\nprice: " + price); + log.warn("Chr {} might possibly have packet edited Hired Merchants. perBundle: {}, perBundle * bundles (This multiplied cannot be greater than 2000): {}, bundles: {}, price: {}", + chr.getName(), perBundle, perBundle * bundles, bundles, price); return; } @@ -672,7 +672,7 @@ public final class PlayerInteractionHandler extends AbstractPacketHandler { int slot = p.readShort(); if (slot >= shop.getItems().size() || slot < 0) { AutobanFactory.PACKET_EDIT.alert(chr, chr.getName() + " tried to packet edit with a player shop."); - FilePrinter.printError(FilePrinter.EXPLOITS + chr.getName() + ".txt", chr.getName() + " tried to remove item at slot " + slot); + log.warn("Chr {} tried to remove item at slot {}", chr.getName(), slot); c.disconnect(true, false); return; } @@ -738,7 +738,7 @@ public final class PlayerInteractionHandler extends AbstractPacketHandler { short quantity = p.readShort(); if (quantity < 1) { AutobanFactory.PACKET_EDIT.alert(chr, chr.getName() + " tried to packet edit with a hired merchant and or player shop."); - FilePrinter.printError(FilePrinter.EXPLOITS + chr.getName() + ".txt", chr.getName() + " tried to buy item " + itemid + " with quantity " + quantity); + log.warn("Chr {} tried to buy item {} with quantity {}", chr.getName(), itemid, quantity); c.disconnect(true, false); return; } @@ -767,7 +767,7 @@ public final class PlayerInteractionHandler extends AbstractPacketHandler { int slot = p.readShort(); if (slot >= merchant.getItems().size() || slot < 0) { AutobanFactory.PACKET_EDIT.alert(chr, chr.getName() + " tried to packet edit with a hired merchant."); - FilePrinter.printError(FilePrinter.EXPLOITS + chr.getName() + ".txt", chr.getName() + " tried to remove item at slot " + slot); + log.warn("Chr {} tried to remove item at slot {}", chr.getName(), slot); c.disconnect(true, false); return; } diff --git a/src/main/java/net/server/channel/handlers/PlayerLoggedinHandler.java b/src/main/java/net/server/channel/handlers/PlayerLoggedinHandler.java index 179ffe3401..4e261c3a1b 100644 --- a/src/main/java/net/server/channel/handlers/PlayerLoggedinHandler.java +++ b/src/main/java/net/server/channel/handlers/PlayerLoggedinHandler.java @@ -42,10 +42,11 @@ import net.server.guild.GuildPackets; import net.server.world.PartyCharacter; import net.server.world.PartyOperation; import net.server.world.World; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import scripting.event.EventInstanceManager; import server.life.MobSkill; import tools.DatabaseConnection; -import tools.FilePrinter; import tools.PacketCreator; import tools.Pair; import tools.packets.WeddingPackets; @@ -59,7 +60,7 @@ import java.util.Map.Entry; import java.util.stream.Collectors; public final class PlayerLoggedinHandler extends AbstractPacketHandler { - + private static final Logger log = LoggerFactory.getLogger(PlayerLoggedinHandler.class); private static final Set attemptingLoginAccounts = new HashSet<>(); private boolean tryAcquireAccount(int accId) { @@ -257,10 +258,10 @@ public final class PlayerLoggedinHandler extends AbstractPacketHandler { c.sendPacket(PacketCreator.getFamilyInfo(familyEntry)); familyEntry.announceToSenior(PacketCreator.sendFamilyLoginNotice(player.getName(), true), true); } else { - FilePrinter.printError(FilePrinter.FAMILY_ERROR, "Player " + player.getName() + "'s family doesn't have an entry for them. (" + f.getID() + ")"); + log.error("Chr {}'s family doesn't have an entry for them. (familyId {})", player.getName(), f.getID()); } } else { - FilePrinter.printError(FilePrinter.FAMILY_ERROR, "Player " + player.getName() + " has an invalid family ID. (" + player.getFamilyId() + ")"); + log.error("Chr {} has an invalid family ID ({})", player.getName(), player.getFamilyId()); c.sendPacket(PacketCreator.getFamilyInfo(null)); } } else { diff --git a/src/main/java/net/server/channel/handlers/SummonDamageHandler.java b/src/main/java/net/server/channel/handlers/SummonDamageHandler.java index caa988fec6..5506818992 100644 --- a/src/main/java/net/server/channel/handlers/SummonDamageHandler.java +++ b/src/main/java/net/server/channel/handlers/SummonDamageHandler.java @@ -32,18 +32,20 @@ import client.inventory.WeaponType; import client.status.MonsterStatusEffect; import constants.skills.Outlaw; import net.packet.InPacket; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import server.ItemInformationProvider; import server.StatEffect; import server.life.Monster; import server.life.MonsterInformationProvider; import server.maps.Summon; -import tools.FilePrinter; import tools.PacketCreator; import java.util.ArrayList; import java.util.List; public final class SummonDamageHandler extends AbstractDealDamageHandler { + private static final Logger log = LoggerFactory.getLogger(SummonDamageHandler.class); public final class SummonAttackEntry { @@ -108,8 +110,9 @@ public final class SummonDamageHandler extends AbstractDealDamageHandler { if (target != null) { if (damage > maxDmg) { AutobanFactory.DAMAGE_HACK.alert(c.getPlayer(), "Possible packet editing summon damage exploit."); - - FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " used a summon of skillid " + summon.getSkill() + " to attack " + MonsterInformationProvider.getInstance().getMobNameFromId(target.getId()) + " with damage " + damage + " (max: " + maxDmg + ")"); + final String mobName = MonsterInformationProvider.getInstance().getMobNameFromId(target.getId()); + log.info("Possible exploit - chr {} used a summon of skillId {} to attack {} with damage {} (max: {})", + c.getPlayer().getName(), summon.getSkill(), mobName, damage, maxDmg); damage = maxDmg; } diff --git a/src/main/java/net/server/channel/handlers/TakeDamageHandler.java b/src/main/java/net/server/channel/handlers/TakeDamageHandler.java index 6edda769c6..28b6373c2a 100644 --- a/src/main/java/net/server/channel/handlers/TakeDamageHandler.java +++ b/src/main/java/net/server/channel/handlers/TakeDamageHandler.java @@ -35,12 +35,13 @@ import constants.inventory.ItemConstants; import constants.skills.Aran; import net.AbstractPacketHandler; import net.packet.InPacket; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import server.StatEffect; import server.life.LifeFactory.loseItem; import server.life.*; import server.maps.MapObject; import server.maps.MapleMap; -import tools.FilePrinter; import tools.PacketCreator; import tools.Randomizer; @@ -50,9 +51,10 @@ import java.util.Collections; import java.util.List; public final class TakeDamageHandler extends AbstractPacketHandler { + private static final Logger log = LoggerFactory.getLogger(TakeDamageHandler.class); @Override - public final void handlePacket(InPacket p, Client c) { + public void handlePacket(InPacket p, Client c) { List banishPlayers = new ArrayList<>(); Character chr = c.getPlayer(); @@ -135,10 +137,7 @@ public final class TakeDamageHandler extends AbstractPacketHandler { } } catch (ClassCastException e) { //this happens due to mob on last map damaging player just before changing maps - - e.printStackTrace(); - FilePrinter.printError(FilePrinter.EXCEPTION_CAUGHT, "Attacker is not a mob-type, rather is a " + map.getMapObject(oid).getClass().getName() + " entity."); - + log.warn("Attack is not a mob-type, rather is a {} entity", map.getMapObject(oid).getClass().getSimpleName(), e); return; } diff --git a/src/main/java/net/server/channel/handlers/WhisperHandler.java b/src/main/java/net/server/channel/handlers/WhisperHandler.java index 4332fd5431..9b0b743e2d 100644 --- a/src/main/java/net/server/channel/handlers/WhisperHandler.java +++ b/src/main/java/net/server/channel/handlers/WhisperHandler.java @@ -26,8 +26,9 @@ import client.Client; import client.autoban.AutobanFactory; import net.AbstractPacketHandler; import net.packet.InPacket; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import server.ChatLogger; -import tools.FilePrinter; import tools.PacketCreator; import tools.PacketCreator.WhisperFlag; @@ -35,6 +36,7 @@ import tools.PacketCreator.WhisperFlag; * @author Chronos */ public final class WhisperHandler extends AbstractPacketHandler { + private static final Logger log = LoggerFactory.getLogger(WhisperHandler.class); // result types, not sure if there are proper names for these public static final byte RT_ITC = 0x00; @@ -65,7 +67,7 @@ public final class WhisperHandler extends AbstractPacketHandler { handleFind(c.getPlayer(), target, WhisperFlag.LOCATION_FRIEND); break; default: - FilePrinter.printError(FilePrinter.PACKET_HANDLER + c.getPlayer().getName() + ".txt", "Unknown request " + request + " triggered by " + c.getPlayer().getName()); + log.warn("Unknown request {} triggered by {}", request, c.getPlayer().getName()); break; } } @@ -93,7 +95,7 @@ public final class WhisperHandler extends AbstractPacketHandler { if (message.length() > Byte.MAX_VALUE) { AutobanFactory.PACKET_EDIT.alert(user, user.getName() + " tried to packet edit with whispers."); - FilePrinter.printError(FilePrinter.EXPLOITS + user.getName() + ".txt", user.getName() + " tried to send text with length of " + message.length()); + log.warn("Chr {} tried to send text with length of {}", user.getName(), message.length()); user.getClient().disconnect(true, false); return; } diff --git a/src/main/java/net/server/handlers/login/CreateCharHandler.java b/src/main/java/net/server/handlers/login/CreateCharHandler.java index 52933041f3..a360d96049 100644 --- a/src/main/java/net/server/handlers/login/CreateCharHandler.java +++ b/src/main/java/net/server/handlers/login/CreateCharHandler.java @@ -28,7 +28,8 @@ import client.creator.novice.NoblesseCreator; import constants.id.ItemId; import net.AbstractPacketHandler; import net.packet.InPacket; -import tools.FilePrinter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import tools.PacketCreator; import java.util.Arrays; @@ -36,6 +37,7 @@ import java.util.HashSet; import java.util.Set; public final class CreateCharHandler extends AbstractPacketHandler { + private static final Logger log = LoggerFactory.getLogger(CreateCharHandler.class); private final static Set IDs = new HashSet<>(Arrays.asList( ItemId.SWORD, ItemId.HAND_AXE, ItemId.WOODEN_CLUB, ItemId.BASIC_POLEARM,// weapons @@ -77,7 +79,7 @@ public final class CreateCharHandler extends AbstractPacketHandler { int[] items = new int[]{weapon, top, bottom, shoes, hair, face}; for (int item : items) { if (!isLegal(item)) { - FilePrinter.printError(FilePrinter.EXPLOITS + name + ".txt", "Owner from account '" + c.getAccountName() + "' tried to packet edit in char creation."); + log.warn("Owner from account {} tried to packet edit in chr creation", c.getAccountName()); c.disconnect(true, false); return; } diff --git a/src/main/java/scripting/npc/NPCConversationManager.java b/src/main/java/scripting/npc/NPCConversationManager.java index 0ad6bc2109..9c7e1f04a7 100644 --- a/src/main/java/scripting/npc/NPCConversationManager.java +++ b/src/main/java/scripting/npc/NPCConversationManager.java @@ -40,6 +40,8 @@ import net.server.guild.Guild; import net.server.guild.GuildPackets; import net.server.world.Party; import net.server.world.PartyCharacter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import provider.Data; import provider.DataProviderFactory; import provider.wz.WZFiles; @@ -61,7 +63,6 @@ import server.partyquest.AriantColiseum; import server.partyquest.MonsterCarnival; import server.partyquest.Pyramid; import server.partyquest.Pyramid.PyramidMode; -import tools.FilePrinter; import tools.PacketCreator; import tools.packets.WeddingPackets; @@ -76,6 +77,7 @@ import static java.util.concurrent.TimeUnit.MINUTES; * @author Matze */ public class NPCConversationManager extends AbstractPlayerInteraction { + private static final Logger log = LoggerFactory.getLogger(NPCConversationManager.class); private final int npc; private int npcOid; @@ -380,7 +382,7 @@ public class NPCConversationManager extends AbstractPlayerInteraction { if (shop != null) { shop.sendShop(c); } else { // check for missing shopids thanks to resinate - FilePrinter.printError(FilePrinter.NPC_UNCODED, "Shop ID: " + id + " is missing from database."); + log.warn("Shop ID: {} is missing from database.", id); ShopFactory.getInstance().getShop(11000).sendShop(c); } } diff --git a/src/main/java/scripting/quest/QuestScriptManager.java b/src/main/java/scripting/quest/QuestScriptManager.java index 652843f1a4..6813525473 100644 --- a/src/main/java/scripting/quest/QuestScriptManager.java +++ b/src/main/java/scripting/quest/QuestScriptManager.java @@ -28,7 +28,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import scripting.AbstractScriptManager; import server.quest.Quest; -import tools.FilePrinter; import javax.script.Invocable; import javax.script.ScriptEngine; @@ -75,7 +74,7 @@ public class QuestScriptManager extends AbstractScriptManager { ScriptEngine engine = getQuestScriptEngine(c, questid); if (engine == null) { - FilePrinter.printError(FilePrinter.QUEST_UNCODED, "START Quest " + questid + " is uncoded."); + log.warn("START Quest {} is uncoded.", questid); qm.dispose(); return; } @@ -127,7 +126,7 @@ public class QuestScriptManager extends AbstractScriptManager { ScriptEngine engine = getQuestScriptEngine(c, questid); if (engine == null) { - FilePrinter.printError(FilePrinter.QUEST_UNCODED, "END Quest " + questid + " is uncoded."); + log.warn("END Quest {} is uncoded.", questid); qm.dispose(); return; } diff --git a/src/main/java/server/ItemInformationProvider.java b/src/main/java/server/ItemInformationProvider.java index 888425ed25..8154543dd8 100644 --- a/src/main/java/server/ItemInformationProvider.java +++ b/src/main/java/server/ItemInformationProvider.java @@ -33,6 +33,8 @@ import constants.skills.Assassin; import constants.skills.Gunslinger; import constants.skills.NightWalker; import net.server.Server; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import provider.*; import provider.wz.WZFiles; import server.MakerItemFactory.MakerItemCreateEntry; @@ -51,6 +53,7 @@ import java.util.Map.Entry; * @author Matze */ public class ItemInformationProvider { + private static final Logger log = LoggerFactory.getLogger(ItemInformationProvider.class); private final static ItemInformationProvider instance = new ItemInformationProvider(); public static ItemInformationProvider getInstance() { @@ -1799,7 +1802,7 @@ public class ItemInformationProvider { String itemName = ItemInformationProvider.getInstance().getName(equip.getItemId()); Server.getInstance().broadcastGMMessage(chr.getWorld(), PacketCreator.sendYellowTip("[Warning]: " + chr.getName() + " tried to equip " + itemName + " into slot " + dst + ".")); AutobanFactory.PACKET_EDIT.alert(chr, chr.getName() + " tried to forcibly equip an item."); - FilePrinter.printError(FilePrinter.EXPLOITS + chr.getName() + ".txt", chr.getName() + " tried to equip " + itemName + " into " + dst + " slot."); + log.warn("Chr {} tried to equip {} into slot {}", chr.getName(), itemName, dst); return false; } diff --git a/src/main/java/server/maps/MapleMap.java b/src/main/java/server/maps/MapleMap.java index 570127dddb..00e28d2afd 100644 --- a/src/main/java/server/maps/MapleMap.java +++ b/src/main/java/server/maps/MapleMap.java @@ -53,6 +53,8 @@ import net.server.services.task.channel.OverallService; import net.server.services.type.ChannelServices; import net.server.world.Party; import net.server.world.World; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import scripting.event.EventInstanceManager; import scripting.map.MapScriptManager; import server.ItemInformationProvider; @@ -64,7 +66,6 @@ import server.life.LifeFactory.selfDestruction; import server.partyquest.CarnivalFactory; import server.partyquest.CarnivalFactory.MCSkill; import server.partyquest.GuardianSpawnPoint; -import tools.FilePrinter; import tools.PacketCreator; import tools.Pair; import tools.Randomizer; @@ -83,7 +84,7 @@ import static java.util.concurrent.TimeUnit.MINUTES; import static java.util.concurrent.TimeUnit.SECONDS; public class MapleMap { - + private static final Logger log = LoggerFactory.getLogger(MapleMap.class); private static final List rangedMapobjectTypes = Arrays.asList(MapObjectType.SHOP, MapObjectType.ITEM, MapObjectType.NPC, MapObjectType.MONSTER, MapObjectType.DOOR, MapObjectType.SUMMON, MapObjectType.REACTOR); private static final Map> dropBoundsCache = new HashMap<>(100); @@ -1985,7 +1986,7 @@ public class MapleMap { } else if (monster.getId() == MobId.GIANT_SNOWMAN_LV5_EASY || monster.getId() == MobId.GIANT_SNOWMAN_LV5_MEDIUM || monster.getId() == MobId.GIANT_SNOWMAN_LV5_HARD) { monsterItemDrop(monster, monster.getDropPeriodTime()); } else { - FilePrinter.printError(FilePrinter.UNHANDLED_EVENT, "UNCODED TIMED MOB DETECTED: " + monster.getId()); + log.error("UNCODED TIMED MOB DETECTED: {}", monster.getId()); } } @@ -2059,7 +2060,7 @@ public class MapleMap { public Portal getDoorPortal(int doorid) { Portal doorPortal = portals.get(0x80 + doorid); if (doorPortal == null) { - FilePrinter.printError(FilePrinter.EXCEPTION, "[Door] " + mapName + "(" + mapid + ") does not contain door portalid " + doorid); + log.warn("[Door] {} ({}) does not contain door portalid {}", mapName, mapid, doorid); return portals.get(0x80); } diff --git a/src/main/java/server/partyquest/PartyQuest.java b/src/main/java/server/partyquest/PartyQuest.java index ad2c00ecbf..221f851011 100644 --- a/src/main/java/server/partyquest/PartyQuest.java +++ b/src/main/java/server/partyquest/PartyQuest.java @@ -26,7 +26,8 @@ import client.Character; import net.server.Server; import net.server.world.Party; import net.server.world.PartyCharacter; -import tools.FilePrinter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.List; @@ -35,6 +36,8 @@ import java.util.List; * @author kevintjuh93 */ public class PartyQuest { + private static final Logger log = LoggerFactory.getLogger(PartyQuest.class); + int channel, world; Party party; List participants = new ArrayList<>(); @@ -108,7 +111,7 @@ public class PartyQuest { } else if (PQ.equals("LudiPQLast")) { return 800 * level / 5; } - FilePrinter.printError(FilePrinter.NPC, "Unhandled PartyQuest: " + PQ); + log.warn("Unhandled PartyQuest: {}", PQ); return 0; } } diff --git a/src/main/java/tools/FilePrinter.java b/src/main/java/tools/FilePrinter.java deleted file mode 100644 index d3404c809a..0000000000 --- a/src/main/java/tools/FilePrinter.java +++ /dev/null @@ -1,103 +0,0 @@ -package tools; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.text.SimpleDateFormat; -import java.util.Calendar; - -public class FilePrinter { - - public static final String - AUTOBAN_WARNING = "game/AutoBanWarning.txt", // log naming version by Vcoc - AUTOBAN_DC = "game/AutoBanDC.txt", - ACCOUNT_STUCK = "players/AccountStuck.txt", - COMMAND_GM = "reports/Gm.txt", - COMMAND_BUG = "reports/Bug.txt", - LOG_TRADE = "interactions/Trades.txt", - LOG_EXPEDITION = "interactions/Expeditions.txt", - LOG_LEAF = "interactions/MapleLeaves.txt", - LOG_GACHAPON = "interactions/Gachapon.txt", - LOG_CHAT = "interactions/ChatLog.txt", - QUEST_RESTORE_ITEM = "game/QuestItemRestore.txt", - EXCEPTION_CAUGHT = "game/ExceptionCaught.txt", - CLIENT_START = "game/ClientStartError.txt", - MAPLE_MAP = "game/MapleMap.txt", - ERROR38 = "game/Error38.txt", - PACKET_LOG = "game/Log.txt", - CASHITEM_BOUGHT = "interactions/CashLog.txt", - EXCEPTION = "game/Exceptions.txt", - LOGIN_EXCEPTION = "game/LoginExceptions.txt", - TRADE_EXCEPTION = "game/TradeExceptions.txt", - SQL_EXCEPTION = "game/SqlExceptions.txt", - PACKET_HANDLER = "game/packethandler/", - PORTAL = "game/portals/", - PORTAL_STUCK = "game/portalblocks/", - NPC = "game/npcs/", - INVOCABLE = "game/invocable/", - REACTOR = "game/reactors/", - QUEST = "game/quests/", - ITEM = "game/items/", - MOB_MOVEMENT = "game/MobMovement.txt", - MAP_SCRIPT = "game/mapscript/", - DIRECTION = "game/directions/", - GUILD_CHAR_ERROR = "guilds/GuildCharError.txt", - SAVE_CHAR = "players/SaveToDB.txt", - INSERT_CHAR = "players/InsertCharacter.txt", - LOAD_CHAR = "players/LoadCharFromDB.txt", - CREATED_CHAR = "players/createdchars/", - DELETED_CHAR = "players/deletedchars/", - UNHANDLED_EVENT = "game/DoesNotExist.txt", - SESSION = "players/Sessions.txt", - DCS = "game/disconnections/", - EXPLOITS = "game/exploits/", - STORAGE = "game/storage/", - PACKET_LOGS = "game/packetlogs/", - PACKET_STREAM = "game/packetstream/", - FREDRICK = "game/npcs/fredrick/", - NPC_UNCODED = "game/npcs/UncodedNPCs.txt", - QUEST_UNCODED = "game/quests/UncodedQuests.txt", - AUTOSAVING_CHARACTER = "players/SaveCharAuto.txt", - SAVING_CHARACTER = "players/SaveChar.txt", - CHANGE_CHARACTER_NAME = "players/NameChange.txt", - WORLD_TRANSFER = "players/WorldTransfer.txt", - FAMILY_ERROR = "players/FamilyErrors.txt", - USED_COMMANDS = "commands/UsedCommands.txt", - DEADLOCK_ERROR = "deadlocks/Deadlocks.txt", - DEADLOCK_STACK = "deadlocks/Path.txt", - DEADLOCK_LOCKS = "deadlocks/Locks.txt", - DEADLOCK_STATE = "deadlocks/State.txt", - DISPOSED_LOCKS = "deadlocks/Disposed.txt"; - - private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); //for file system purposes, it's nice to use yyyy-MM-dd - private static final String FILE_PATH = "logs/" + sdf.format(Calendar.getInstance().getTime()) + "/"; // + sdf.format(Calendar.getInstance().getTime()) + "/" - private static final String ERROR = "error/"; - - public static void printError(final String name, final String s) { - System.out.println("Error thrown: " + name); - System.out.println(s); - System.out.println(); - FileOutputStream out = null; - final String file = FILE_PATH + ERROR + name; - try { - File outputFile = new File(file); - if (outputFile.getParentFile() != null) { - outputFile.getParentFile().mkdirs(); - } - out = new FileOutputStream(file, true); - out.write(s.getBytes()); - //out.write("\r\n---------------------------------\r\n".getBytes()); - out.write("\r\n".getBytes()); - } catch (IOException ess) { - ess.printStackTrace(); - } finally { - try { - if (out != null) { - out.close(); - } - } catch (IOException ignore) { - ignore.printStackTrace(); - } - } - } -} \ No newline at end of file