Reformat and clean up "net" package

This commit is contained in:
P0nk
2021-09-09 23:26:02 +02:00
parent 69f4580637
commit 6be6ea9927
235 changed files with 3556 additions and 3398 deletions

View File

@@ -46,7 +46,6 @@ import java.sql.SQLException;
import java.util.Arrays;
/**
*
* @author Matze
* @author Ronan - concurrency safety and reviewed minigames
*/
@@ -100,7 +99,7 @@ public final class PlayerInteractionHandler extends AbstractPacketHandler {
SELECT_CARD(0x44);
final byte code;
private Action(int code) {
Action(int code) {
this.code = (byte) code;
}
@@ -118,26 +117,26 @@ public final class PlayerInteractionHandler extends AbstractPacketHandler {
return 13;
}
if(chr.getEventInstance() != null) {
if (chr.getEventInstance() != null) {
return 5;
}
return 0;
}
@Override
public final void handlePacket(InPacket p, Client c) {
if (!c.tryacquireClient()) { // thanks GabrielSin for pointing dupes within player interactions
c.sendPacket(PacketCreator.enableActions());
return;
}
try {
byte mode = p.readByte();
final Character chr = c.getPlayer();
if (mode == Action.CREATE.getCode()) {
if(!chr.isAlive()) { // thanks GabrielSin for pointing this
if (!chr.isAlive()) { // thanks GabrielSin for pointing this
chr.sendPacket(PacketCreator.getMiniRoomError(4));
return;
}
@@ -221,7 +220,7 @@ public final class PlayerInteractionHandler extends AbstractPacketHandler {
chr.getMap().broadcastMessage(PacketCreator.addMatchCardBox(chr, 1, 0));
game.sendMatchCard(c, type);
} else if (createType == 4 || createType == 5) { // shop
if(!GameConstants.isFreeMarketRoom(chr.getMapId())) {
if (!GameConstants.isFreeMarketRoom(chr.getMapId())) {
chr.sendPacket(PacketCreator.getMiniRoomError(15));
return;
}
@@ -231,11 +230,11 @@ public final class PlayerInteractionHandler extends AbstractPacketHandler {
chr.sendPacket(PacketCreator.getMiniRoomError(status));
return;
}
if (!canPlaceStore(chr)) {
return;
}
String desc = p.readString();
p.skip(3);
int itemId = p.readInt();
@@ -265,7 +264,7 @@ public final class PlayerInteractionHandler extends AbstractPacketHandler {
if (other == null || chr.getId() == other.getId()) {
return;
}
Trade.inviteTrade(chr, other);
} else if (mode == Action.DECLINE.getCode()) {
Trade.declineTrade(chr);
@@ -278,7 +277,9 @@ public final class PlayerInteractionHandler extends AbstractPacketHandler {
return;
}
} else {
if (isTradeOpen(chr)) return;
if (isTradeOpen(chr)) {
return;
}
int oid = p.readInt();
MapObject ob = chr.getMap().getMapObject(oid);
@@ -290,7 +291,7 @@ public final class PlayerInteractionHandler extends AbstractPacketHandler {
String pw = p.available() > 1 ? p.readString() : "";
MiniGame game = (MiniGame) ob;
if(game.checkPassword(pw)) {
if (game.checkPassword(pw)) {
if (game.hasFreeSlot() && !game.isVisitor(chr)) {
game.addVisitor(chr);
chr.setMiniGame(game);
@@ -339,8 +340,10 @@ public final class PlayerInteractionHandler extends AbstractPacketHandler {
chr.closeHiredMerchant(true);
}
} else if (mode == Action.OPEN_STORE.getCode() || mode == Action.OPEN_CASH.getCode()) {
if (isTradeOpen(chr)) return;
if (isTradeOpen(chr)) {
return;
}
if (mode == Action.OPEN_STORE.getCode()) {
p.readByte(); //01
} else {
@@ -350,10 +353,10 @@ public final class PlayerInteractionHandler extends AbstractPacketHandler {
c.sendPacket(PacketCreator.serverNotice(1, "Please check again the birthday date."));
return;
}
c.sendPacket(PacketCreator.hiredMerchantOwnerMaintenanceLeave());
}
if (!canPlaceStore(chr)) { // thanks Ari for noticing player shops overlapping on opening time
return;
}
@@ -361,10 +364,11 @@ public final class PlayerInteractionHandler extends AbstractPacketHandler {
PlayerShop shop = chr.getPlayerShop();
HiredMerchant merchant = chr.getHiredMerchant();
if (shop != null && shop.isOwner(chr)) {
if(YamlConfig.config.server.USE_ERASE_PERMIT_ON_OPENSHOP) {
if (YamlConfig.config.server.USE_ERASE_PERMIT_ON_OPENSHOP) {
try {
InventoryManipulator.removeById(c, InventoryType.CASH, shop.getItemId(), 1, true, false);
} catch(RuntimeException re) {} // fella does not have a player shop permit...
} catch (RuntimeException re) {
} // fella does not have a player shop permit...
}
chr.getMap().broadcastMessage(PacketCreator.updatePlayerShopBox(shop));
@@ -483,30 +487,30 @@ public final class PlayerInteractionHandler extends AbstractPacketHandler {
c.sendPacket(PacketCreator.enableActions());
return;
}
if (item == null) {
c.sendPacket(PacketCreator.serverNotice(1, "Invalid item description."));
c.sendPacket(PacketCreator.enableActions());
return;
}
if (ii.isUnmerchable(item.getItemId())) {
if (ItemConstants.isPet(item.getItemId())) {
c.sendPacket(PacketCreator.serverNotice(1, "Pets are not allowed to be traded."));
} else {
c.sendPacket(PacketCreator.serverNotice(1, "Cash items are not allowed to be traded."));
}
c.sendPacket(PacketCreator.enableActions());
return;
}
if (quantity < 1 || quantity > item.getQuantity()) {
c.sendPacket(PacketCreator.serverNotice(1, "You don't have enough quantity of the item."));
c.sendPacket(PacketCreator.enableActions());
return;
}
Trade trade = chr.getTrade();
if (trade != null) {
if ((quantity <= item.getQuantity() && quantity >= 0) || ItemConstants.isRechargeable(item.getItemId())) {
@@ -517,7 +521,7 @@ public final class PlayerInteractionHandler extends AbstractPacketHandler {
return;
}
}
Inventory inv = chr.getInventory(ivType);
inv.lockInventory();
try {
@@ -527,18 +531,18 @@ public final class PlayerInteractionHandler extends AbstractPacketHandler {
c.sendPacket(PacketCreator.enableActions());
return;
}
Item tradeItem = item.copy();
if (ItemConstants.isRechargeable(item.getItemId())) {
quantity = item.getQuantity();
}
tradeItem.setQuantity(quantity);
tradeItem.setPosition(targetSlot);
if (trade.addItem(tradeItem)) {
InventoryManipulator.removeFromSlot(c, ivType, item.getPosition(), quantity, true);
trade.getChr().sendPacket(PacketCreator.getTradeItemAdd((byte) 0, tradeItem));
if (trade.getPartner() != null) {
trade.getPartner().getChr().sendPacket(PacketCreator.getTradeItemAdd((byte) 1, tradeItem));
@@ -554,7 +558,9 @@ public final class PlayerInteractionHandler extends AbstractPacketHandler {
} else if (mode == Action.CONFIRM.getCode()) {
Trade.completeTrade(chr);
} else if (mode == Action.ADD_ITEM.getCode() || mode == Action.PUT_ITEM.getCode()) {
if (isTradeOpen(chr)) return;
if (isTradeOpen(chr)) {
return;
}
InventoryType ivType = InventoryType.getByType(p.readByte());
short slot = p.readShort();
@@ -571,13 +577,13 @@ public final class PlayerInteractionHandler extends AbstractPacketHandler {
} else {
c.sendPacket(PacketCreator.serverNotice(1, "Cash items are not allowed to be sold on the Player Store."));
}
c.sendPacket(PacketCreator.enableActions());
return;
}
short perBundle = p.readShort();
if (ItemConstants.isRechargeable(ivItem.getItemId())) {
perBundle = 1;
bundles = 1;
@@ -593,9 +599,9 @@ public final class PlayerInteractionHandler extends AbstractPacketHandler {
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);
return;
}
Item sellItem = ivItem.copy();
if(!ItemConstants.isRechargeable(ivItem.getItemId())) {
if (!ItemConstants.isRechargeable(ivItem.getItemId())) {
sellItem.setQuantity(perBundle);
}
@@ -607,37 +613,37 @@ public final class PlayerInteractionHandler extends AbstractPacketHandler {
c.sendPacket(PacketCreator.serverNotice(1, "You can't sell it anymore."));
return;
}
if (ItemConstants.isRechargeable(ivItem.getItemId())) {
InventoryManipulator.removeFromSlot(c, ivType, slot, ivItem.getQuantity(), true);
} else {
InventoryManipulator.removeFromSlot(c, ivType, slot, (short) (bundles * perBundle), true);
}
c.sendPacket(PacketCreator.getPlayerShopItemUpdate(shop));
} else if (merchant != null && merchant.isOwner(chr)) {
if (ivType.equals(InventoryType.CASH) && merchant.isPublished()) {
c.sendPacket(PacketCreator.serverNotice(1, "Cash items are only allowed to be sold when first opening the store."));
return;
}
if (merchant.isOpen() || !merchant.addItem(shopItem)) { // thanks Vcoc for pointing an exploit with unlimited shop slots
c.sendPacket(PacketCreator.serverNotice(1, "You can't sell it anymore."));
return;
}
if (ItemConstants.isRechargeable(ivItem.getItemId())) {
InventoryManipulator.removeFromSlot(c, ivType, slot, ivItem.getQuantity(), true);
} else {
InventoryManipulator.removeFromSlot(c, ivType, slot, (short) (bundles * perBundle), true);
}
c.sendPacket(PacketCreator.updateHiredMerchant(merchant, chr));
if (YamlConfig.config.server.USE_ENFORCE_MERCHANT_SAVE) {
chr.saveCharToDB(false);
}
try {
merchant.saveItems(false); // thanks Masterrulax for realizing yet another dupe with merchants/Fredrick
} catch (SQLException ex) {
@@ -647,7 +653,9 @@ public final class PlayerInteractionHandler extends AbstractPacketHandler {
c.sendPacket(PacketCreator.serverNotice(1, "You can't sell without owning a shop."));
}
} else if (mode == Action.REMOVE_ITEM.getCode()) {
if (isTradeOpen(chr)) return;
if (isTradeOpen(chr)) {
return;
}
PlayerShop shop = chr.getPlayerShop();
if (shop != null && shop.isOwner(chr)) {
@@ -668,12 +676,16 @@ public final class PlayerInteractionHandler extends AbstractPacketHandler {
}
} else if (mode == Action.MERCHANT_MESO.getCode()) {
HiredMerchant merchant = chr.getHiredMerchant();
if (merchant == null) return;
if (merchant == null) {
return;
}
merchant.withdrawMesos(chr);
} else if (mode == Action.MERCHANT_ORGANIZE.getCode()) {
HiredMerchant merchant = chr.getHiredMerchant();
if (merchant == null || !merchant.isOwner(chr)) return;
if (merchant == null || !merchant.isOwner(chr)) {
return;
}
merchant.withdrawMesos(chr);
merchant.clearInexistentItems();
@@ -685,7 +697,9 @@ public final class PlayerInteractionHandler extends AbstractPacketHandler {
c.sendPacket(PacketCreator.updateHiredMerchant(merchant, chr));
} else if (mode == Action.BUY.getCode() || mode == Action.MERCHANT_BUY.getCode()) {
if (isTradeOpen(chr)) return;
if (isTradeOpen(chr)) {
return;
}
int itemid = p.readByte();
short quantity = p.readShort();
@@ -706,7 +720,9 @@ public final class PlayerInteractionHandler extends AbstractPacketHandler {
merchant.broadcastToVisitorsThreadsafe(PacketCreator.updateHiredMerchant(merchant, chr));
}
} else if (mode == Action.TAKE_ITEM_BACK.getCode()) {
if (isTradeOpen(chr)) return;
if (isTradeOpen(chr)) {
return;
}
HiredMerchant merchant = chr.getHiredMerchant();
if (merchant != null && merchant.isOwner(chr)) {
@@ -726,17 +742,21 @@ public final class PlayerInteractionHandler extends AbstractPacketHandler {
merchant.takeItemBack(slot, chr);
}
} else if (mode == Action.CLOSE_MERCHANT.getCode()) {
if (isTradeOpen(chr)) return;
if (isTradeOpen(chr)) {
return;
}
HiredMerchant merchant = chr.getHiredMerchant();
if (merchant != null) {
merchant.closeOwnerMerchant(chr);
}
} else if (mode == Action.MAINTENANCE_OFF.getCode()) {
if (isTradeOpen(chr)) return;
if (isTradeOpen(chr)) {
return;
}
HiredMerchant merchant = chr.getHiredMerchant();
if(merchant != null) {
if (merchant != null) {
if (merchant.isOwner(chr)) {
if (merchant.getItems().isEmpty()) {
merchant.closeOwnerMerchant(chr);
@@ -759,22 +779,22 @@ public final class PlayerInteractionHandler extends AbstractPacketHandler {
}
} else if (mode == Action.EXPEL.getCode()) {
MiniGame miniGame = chr.getMiniGame();
if(miniGame != null && miniGame.isOwner(chr)) {
if (miniGame != null && miniGame.isOwner(chr)) {
Character visitor = miniGame.getVisitor();
if(visitor != null) {
if (visitor != null) {
visitor.closeMiniGame(false);
visitor.sendPacket(PacketCreator.getMiniGameClose(true, 5));
}
}
} else if (mode == Action.EXIT_AFTER_GAME.getCode()) {
MiniGame miniGame = chr.getMiniGame();
if(miniGame != null) {
if (miniGame != null) {
miniGame.setQuitAfterGame(chr, true);
}
} else if (mode == Action.CANCEL_EXIT_AFTER_GAME.getCode()) {
MiniGame miniGame = chr.getMiniGame();
if(miniGame != null) {
if (miniGame != null) {
miniGame.setQuitAfterGame(chr, false);
}
}
@@ -782,17 +802,17 @@ public final class PlayerInteractionHandler extends AbstractPacketHandler {
c.releaseClient();
}
}
private static boolean isTradeOpen(Character chr) {
if (chr.getTrade() != null) { // thanks to Rien dev team
//Apparently there is a dupe exploit that causes racing conditions when saving/retrieving from the db with stuff like trade open.
chr.sendPacket(PacketCreator.enableActions());
return true;
}
return false;
}
private static boolean canPlaceStore(Character chr) {
try {
for (MapObject mmo : chr.getMap().getMapObjectsInRange(chr.getPosition(), 23000, Arrays.asList(MapObjectType.HIRED_MERCHANT, MapObjectType.PLAYER))) {
@@ -822,7 +842,7 @@ public final class PlayerInteractionHandler extends AbstractPacketHandler {
} catch (Exception e) {
e.printStackTrace();
}
return true;
}
}