Route chr creation to dummy CharacterCreator

This commit is contained in:
P0nk
2024-09-25 07:21:27 +02:00
parent a9967d53b1
commit 767c4402e7
5 changed files with 38 additions and 20 deletions

View File

@@ -3,16 +3,16 @@ package client.creator;
import client.inventory.Item;
import constants.id.ItemId;
import constants.id.MapId;
import database.character.CharacterSaver;
import database.character.CharacterRepository;
public class CharacterCreator {
private final CharacterSaver chrSaver;
private final CharacterRepository chrRepository;
public CharacterCreator(CharacterSaver chrSaver) {
this.chrSaver = chrSaver;
public CharacterCreator(CharacterRepository chrRepository) {
this.chrRepository = chrRepository;
}
public boolean createBeginner(NewCharacterSpec spec, int accountId, int worldId) {
public boolean createNew(NewCharacterSpec spec, int accountId, int worldId) {
int mapId = getStartingMap(spec.type());
Item guide = getStarterGuide(spec.type());
// TODO, save:

View File

@@ -1,11 +1,13 @@
package net;
import client.command.CommandsExecutor;
import client.creator.CharacterCreator;
import client.processor.action.MakerProcessor;
import client.processor.npc.FredrickProcessor;
import database.character.CharacterLoader;
import database.character.CharacterSaver;
import database.drop.DropProvider;
import lombok.Builder;
import server.shop.ShopFactory;
import service.BanService;
import service.NoteService;
@@ -16,14 +18,16 @@ import java.util.Objects;
/**
* @author Ponk
*/
@Builder
public record ChannelDependencies(
CharacterLoader characterLoader, CharacterSaver characterSaver, NoteService noteService,
FredrickProcessor fredrickProcessor, MakerProcessor makerProcessor, DropProvider dropProvider,
CommandsExecutor commandsExecutor, ShopFactory shopFactory, TransitionService transitionService,
BanService banService
CharacterCreator characterCreator, CharacterLoader characterLoader, CharacterSaver characterSaver,
NoteService noteService, FredrickProcessor fredrickProcessor, MakerProcessor makerProcessor,
DropProvider dropProvider, CommandsExecutor commandsExecutor, ShopFactory shopFactory,
TransitionService transitionService, BanService banService
) {
public ChannelDependencies {
Objects.requireNonNull(characterCreator);
Objects.requireNonNull(characterLoader);
Objects.requireNonNull(characterSaver);
Objects.requireNonNull(noteService);

View File

@@ -286,7 +286,7 @@ public final class PacketProcessor {
registerHandler(RecvOpcode.SERVERLIST_REQUEST, new ServerlistRequestHandler());
registerHandler(RecvOpcode.SERVERSTATUS_REQUEST, new ServerStatusRequestHandler());
registerHandler(RecvOpcode.CHECK_CHAR_NAME, new CheckCharNameHandler());
registerHandler(RecvOpcode.CREATE_CHAR, new CreateCharHandler());
registerHandler(RecvOpcode.CREATE_CHAR, new CreateCharHandler(channelDeps.characterCreator()));
registerHandler(RecvOpcode.DELETE_CHAR, new DeleteCharHandler());
registerHandler(RecvOpcode.VIEW_ALL_CHAR, new ViewAllCharHandler());
registerHandler(RecvOpcode.PICK_ALL_CHAR, new ViewAllCharSelectedHandler());

View File

@@ -27,6 +27,7 @@ import client.Family;
import client.SkillFactory;
import client.command.CommandContext;
import client.command.CommandsExecutor;
import client.creator.CharacterCreator;
import client.inventory.Item;
import client.inventory.ItemFactory;
import client.inventory.manipulator.CashIdGenerator;
@@ -1004,24 +1005,29 @@ public class Server {
return hikariConfig;
}
// TODO: set up proper dependency injection with a framework such as Dagger or Guice.
private ChannelDependencies registerChannelDependencies(PgDatabaseConnection connection) {
CharacterRepository characterRepository = new CharacterRepository();
MonsterCardRepository monsterCardRepository = new MonsterCardRepository(connection);
CharacterLoader characterLoader = new CharacterLoader(monsterCardRepository);
CharacterSaver characterSaver = new CharacterSaver(connection, characterRepository, monsterCardRepository);
TransitionService transitionService = new TransitionService(characterSaver);
BanService banService = new BanService(transitionService);
NoteService noteService = new NoteService(new NoteDao(connection));
MakerProcessor makerProcessor = new MakerProcessor(new MakerInfoProvider(new MakerRepository(connection)));
FredrickProcessor fredrickProcessor = new FredrickProcessor(noteService);
DropProvider dropProvider = new DropProvider(new DropRepository(connection));
ShopFactory shopFactory = new ShopFactory(new ShopDao(connection));
CommandContext commandContext = new CommandContext(null, dropProvider, shopFactory,
characterSaver, transitionService);
CommandsExecutor commandsExecutor = new CommandsExecutor(commandContext);
ChannelDependencies channelDependencies = new ChannelDependencies(characterLoader, characterSaver, noteService,
fredrickProcessor, makerProcessor, dropProvider, commandsExecutor, shopFactory, transitionService,
banService);
ChannelDependencies channelDependencies = ChannelDependencies.builder()
.characterCreator(new CharacterCreator(characterRepository))
.characterLoader(new CharacterLoader(monsterCardRepository))
.characterSaver(characterSaver)
.noteService(noteService)
.fredrickProcessor(new FredrickProcessor(noteService))
.makerProcessor(new MakerProcessor(new MakerInfoProvider(new MakerRepository(connection))))
.dropProvider(dropProvider)
.commandsExecutor(new CommandsExecutor(new CommandContext(null, dropProvider, shopFactory,
characterSaver, transitionService)))
.shopFactory(shopFactory)
.transitionService(transitionService)
.banService(new BanService(transitionService))
.build();
PacketProcessor.registerGameHandlerDependencies(channelDependencies);

View File

@@ -23,6 +23,7 @@ package net.server.handlers.login;
import client.Client;
import client.SkinColor;
import client.creator.CharacterCreator;
import client.creator.JobType;
import client.creator.NewCharacterSpec;
import client.creator.novice.BeginnerCreator;
@@ -35,6 +36,11 @@ import tools.PacketCreator;
import java.util.Optional;
public final class CreateCharHandler extends AbstractPacketHandler {
private final CharacterCreator characterCreator;
public CreateCharHandler(CharacterCreator characterCreator) {
this.characterCreator = characterCreator;
}
@Override
public void handlePacket(InPacket p, Client c) {
@@ -52,6 +58,8 @@ public final class CreateCharHandler extends AbstractPacketHandler {
.gender(p.readByte())
.build();
characterCreator.createNew(spec, c.getAccID(), c.getWorld());
int status = switch (spec.type()) {
case KNIGHT_OF_CYGNUS -> NoblesseCreator.createCharacter(c, spec.name(), spec.face(), spec.hair() + spec.hairColor(),
spec.skin().getId(), spec.topItemId(), spec.bottomItemId(), spec.shoesItemId(), spec.weaponItemId(),