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:
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)) {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user