Direct almost all chr saving through CharacterSaver

Client#disconnectInternal remains.
Had to remove some configurable save points to keep it simple.
This commit is contained in:
P0nk
2023-08-04 16:05:10 +02:00
parent e52f646558
commit 4e39142fb3
18 changed files with 122 additions and 152 deletions

View File

@@ -23,6 +23,7 @@ package net.server.channel.handlers;
import client.Character;
import client.Client;
import database.character.CharacterSaver;
import net.AbstractPacketHandler;
import net.packet.InPacket;
import net.server.Server;
@@ -33,6 +34,12 @@ import tools.PacketCreator;
* @author Flav
*/
public class EnterCashShopHandler extends AbstractPacketHandler {
private final CharacterSaver chrSaver;
public EnterCashShopHandler(CharacterSaver chrSaver) {
this.chrSaver = chrSaver;
}
@Override
public void handlePacket(InPacket p, Client c) {
try {
@@ -87,7 +94,7 @@ public class EnterCashShopHandler extends AbstractPacketHandler {
c.getChannelServer().removePlayer(mc);
mc.getMap().removePlayer(mc);
mc.getCashShop().open(true);
mc.saveCharToDB();
chrSaver.save(mc);
} catch (Exception e) {
e.printStackTrace();
}

View File

@@ -27,6 +27,7 @@ import client.inventory.Equip;
import client.inventory.Item;
import client.processor.action.BuybackProcessor;
import config.YamlConfig;
import database.character.CharacterSaver;
import net.AbstractPacketHandler;
import net.packet.InPacket;
import net.server.Server;
@@ -45,6 +46,12 @@ import java.util.List;
public final class EnterMTSHandler extends AbstractPacketHandler {
private final CharacterSaver chrSaver;
public EnterMTSHandler(CharacterSaver chrSaver) {
this.chrSaver = chrSaver;
}
@Override
public final void handlePacket(InPacket p, Client c) {
Character chr = c.getPlayer();
@@ -105,7 +112,7 @@ public final class EnterMTSHandler extends AbstractPacketHandler {
chr.forfeitExpirableQuests();
chr.cancelQuestExpirationTask();
chr.saveCharToDB();
chrSaver.save(chr);
c.getChannelServer().removePlayer(chr);
chr.getMap().removePlayer(c.getPlayer());
@@ -276,4 +283,4 @@ public final class EnterMTSHandler extends AbstractPacketHandler {
}
return items;
}
}
}

View File

@@ -33,6 +33,7 @@ import config.YamlConfig;
import constants.game.GameConstants;
import constants.id.ItemId;
import constants.inventory.ItemConstants;
import database.character.CharacterSaver;
import net.AbstractPacketHandler;
import net.packet.InPacket;
import org.slf4j.Logger;
@@ -53,6 +54,11 @@ import java.util.Arrays;
*/
public final class PlayerInteractionHandler extends AbstractPacketHandler {
private static final Logger log = LoggerFactory.getLogger(PlayerInteractionHandler.class);
private final CharacterSaver chrSaver;
public PlayerInteractionHandler(CharacterSaver chrSaver) {
this.chrSaver = chrSaver;
}
public enum Action {
CREATE(0),
@@ -644,10 +650,6 @@ public final class PlayerInteractionHandler extends AbstractPacketHandler {
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) {
@@ -771,7 +773,7 @@ public final class PlayerInteractionHandler extends AbstractPacketHandler {
return;
}
merchant.takeItemBack(slot, chr);
merchant.takeItemBack(slot, chr, chrSaver);
}
} else if (mode == Action.CLOSE_MERCHANT.getCode()) {
if (isTradeOpen(chr)) {

View File

@@ -27,6 +27,7 @@ import client.inventory.*;
import client.keybind.KeyBinding;
import config.YamlConfig;
import constants.game.GameConstants;
import database.character.CharacterLoader;
import net.AbstractPacketHandler;
import net.packet.InPacket;
import net.server.PlayerBuffValueHolder;
@@ -64,9 +65,11 @@ public final class PlayerLoggedinHandler extends AbstractPacketHandler {
private static final Logger log = LoggerFactory.getLogger(PlayerLoggedinHandler.class);
private static final Set<Integer> attemptingLoginAccounts = new HashSet<>();
private final CharacterLoader chrLoader;
private final NoteService noteService;
public PlayerLoggedinHandler(NoteService noteService) {
public PlayerLoggedinHandler(CharacterLoader chrLoader, NoteService noteService) {
this.chrLoader = chrLoader;
this.noteService = noteService;
}
@@ -94,7 +97,7 @@ public final class PlayerLoggedinHandler extends AbstractPacketHandler {
@Override
public final void handlePacket(InPacket p, Client c) {
final int cid = p.readInt(); // TODO: investigate if this is the "client id" supplied in PacketCreator#getServerIP()
final int chrId = p.readInt();
final Server server = Server.getInstance();
if (!c.tryacquireClient()) {
@@ -120,7 +123,7 @@ public final class PlayerLoggedinHandler extends AbstractPacketHandler {
}
}
Character player = wserv.getPlayerStorage().getCharacterById(cid);
Character player = wserv.getPlayerStorage().getCharacterById(chrId);
final Hwid hwid;
if (player == null) {
@@ -135,21 +138,18 @@ public final class PlayerLoggedinHandler extends AbstractPacketHandler {
c.setHwid(hwid);
if (!server.validateCharacteridInTransition(c, cid)) {
if (!server.validateCharacteridInTransition(c, chrId)) {
c.disconnect(true, false);
return;
}
boolean newcomer = false;
if (player == null) {
try {
player = Character.loadCharFromDB(cid, c, true);
Optional<Character> loadedChr = chrLoader.loadForChannel(chrId, c);
if (loadedChr.isPresent()) {
player = loadedChr.get();
newcomer = true;
} catch (SQLException e) {
e.printStackTrace();
}
if (player == null) { //If you are still getting null here then please just uninstall the game >.>, we dont need you fucking with the logs
} else {
c.disconnect(true, false);
return;
}
@@ -212,13 +212,13 @@ public final class PlayerLoggedinHandler extends AbstractPacketHandler {
wserv.addPlayer(player);
player.setEnteredChannelWorld();
List<PlayerBuffValueHolder> buffs = server.getPlayerBuffStorage().getBuffsFromStorage(cid);
List<PlayerBuffValueHolder> buffs = server.getPlayerBuffStorage().getBuffsFromStorage(chrId);
if (buffs != null) {
List<Pair<Long, PlayerBuffValueHolder>> timedBuffs = getLocalStartTimes(buffs);
player.silentGiveBuffs(timedBuffs);
}
Map<Disease, Pair<Long, MobSkill>> diseases = server.getPlayerBuffStorage().getDiseasesFromStorage(cid);
Map<Disease, Pair<Long, MobSkill>> diseases = server.getPlayerBuffStorage().getDiseasesFromStorage(chrId);
if (diseases != null) {
player.silentApplyDiseases(diseases);
}
@@ -415,7 +415,7 @@ public final class PlayerLoggedinHandler extends AbstractPacketHandler {
}
if (newcomer) {
EventInstanceManager eim = EventRecallCoordinator.getInstance().recallEventInstance(cid);
EventInstanceManager eim = EventRecallCoordinator.getInstance().recallEventInstance(chrId);
if (eim != null) {
eim.registerPlayer(player);
}

View File

@@ -16,6 +16,7 @@ import client.inventory.manipulator.InventoryManipulator;
import client.inventory.manipulator.KarmaManipulator;
import config.YamlConfig;
import constants.inventory.ItemConstants;
import database.character.CharacterSaver;
import net.AbstractPacketHandler;
import net.packet.InPacket;
import org.slf4j.Logger;
@@ -32,6 +33,11 @@ import java.util.List;
*/
public final class WeddingHandler extends AbstractPacketHandler {
private static final Logger log = LoggerFactory.getLogger(WeddingHandler.class);
private final CharacterSaver chrSaver;
public WeddingHandler(CharacterSaver chrSaver) {
this.chrSaver = chrSaver;
}
@Override
public void handlePacket(InPacket p, Client c) {
@@ -87,9 +93,6 @@ public final class WeddingHandler extends AbstractPacketHandler {
}
if (newItem != null) {
if (YamlConfig.config.server.USE_ENFORCE_MERCHANT_SAVE) {
chr.saveCharToDB(false);
}
marriage.saveGiftItemsToDb(c, groomWishlist, cid);
}
} else {