Prepare centralized chr creation

This commit is contained in:
P0nk
2024-09-16 20:53:29 +02:00
parent 0c9643fd7e
commit 98d76ad45e
4 changed files with 96 additions and 0 deletions

View File

@@ -0,0 +1,44 @@
package client.creator;
import client.inventory.Item;
import constants.id.ItemId;
import constants.id.MapId;
import database.character.CharacterSaver;
public class CharacterCreator {
private final CharacterSaver chrSaver;
public CharacterCreator(CharacterSaver chrSaver) {
this.chrSaver = chrSaver;
}
public boolean createBeginner(NewCharacterSpec spec, int accountId, int worldId) {
int mapId = getStartingMap(spec.type());
Item guide = getStarterGuide(spec.type());
// TODO, save:
// - character
// - skills
// - equips
// - starter item
// - keymap
// - quickslots
return false;
}
private int getStartingMap(JobType type) {
return switch (type) {
case ADVENTURER -> MapId.MUSHROOM_TOWN;
case KNIGHT_OF_CYGNUS -> MapId.ARAN_TUTORIAL_START;
case ARAN -> MapId.STARTING_MAP_NOBLESSE;
};
}
private Item getStarterGuide(JobType type) {
int itemId = switch (type) {
case ADVENTURER -> ItemId.BEGINNERS_GUIDE;
case KNIGHT_OF_CYGNUS -> ItemId.NOBLESSE_GUIDE;
case ARAN -> ItemId.LEGENDS_GUIDE;
};
return new Item(itemId, (short) 0, (short) 1);
}
}

View File

@@ -0,0 +1,7 @@
package client.creator;
public enum JobType {
ADVENTURER,
KNIGHT_OF_CYGNUS,
ARAN
}

View File

@@ -0,0 +1,20 @@
package client.creator;
import client.SkinColor;
import lombok.Builder;
@Builder
public record NewCharacterSpec(
String name,
JobType type,
int face,
int hair,
int hairColor,
SkinColor skin,
int topItemId,
int bottomItemId,
int shoesItemId,
int weaponItemId,
byte gender
) {
}

View File

@@ -22,6 +22,7 @@
package net.server.handlers.login;
import client.Client;
import client.creator.JobType;
import client.creator.novice.BeginnerCreator;
import client.creator.novice.LegendCreator;
import client.creator.novice.NoblesseCreator;
@@ -47,6 +48,21 @@ public final class CreateCharHandler extends AbstractPacketHandler {
int weapon = p.readInt();
int gender = p.readByte();
/*
NewCharacterSpec spec = NewCharacterSpec.builder()
.type(parseJobType(p.readInt()))
.face(p.readInt())
.hair(p.readInt())
.hairColor(p.readInt())
.skin(p.readInt())
.topItemId(p.readInt())
.bottomItemId(p.readInt())
.shoesItemId(p.readInt())
.weaponItemId(p.readInt())
.gender(p.readByte())
.build();
*/
int status;
switch (job) {
case 0: // Knights of Cygnus
@@ -67,4 +83,13 @@ public final class CreateCharHandler extends AbstractPacketHandler {
c.sendPacket(PacketCreator.deleteCharResponse(0, 9));
}
}
private static JobType parseJobType(int value) {
return switch (value) {
case 0 -> JobType.KNIGHT_OF_CYGNUS;
case 1 -> JobType.ADVENTURER;
case 2 -> JobType.ARAN;
default -> throw new IllegalArgumentException("Invalid job type: " + value);
};
}
}