diff --git a/BLHX.Server.Common/Database/Player.cs b/BLHX.Server.Common/Database/Player.cs
index 0f21c01..70187bc 100644
--- a/BLHX.Server.Common/Database/Player.cs
+++ b/BLHX.Server.Common/Database/Player.cs
@@ -48,6 +48,8 @@ namespace BLHX.Server.Common.Database
{
e.Property(b => b.DisplayInfo)
.HasJsonConversion();
+ e.Property(b => b.Adv)
+ .HasDefaultValue("");
e.HasMany(b => b.Resources)
.WithOne(e => e.Player)
.HasForeignKey(e => e.PlayerUid)
@@ -92,6 +94,8 @@ namespace BLHX.Server.Common.Database
public uint Uid { get; set; }
public string Token { get; set; }
public string Name { get; set; }
+ // Aka. manifesto
+ public string Adv { get; set; } = string.Empty;
public uint Level { get; set; }
// TODO: Exp add setter to recalculate cap and set level
public uint Exp { get; set; }
diff --git a/BLHX.Server.Common/Migrations/Player/20240221064120_AddManifesto.Designer.cs b/BLHX.Server.Common/Migrations/Player/20240221064120_AddManifesto.Designer.cs
new file mode 100644
index 0000000..82ffe46
--- /dev/null
+++ b/BLHX.Server.Common/Migrations/Player/20240221064120_AddManifesto.Designer.cs
@@ -0,0 +1,207 @@
+//
+using System;
+using BLHX.Server.Common.Database;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+
+#nullable disable
+
+namespace BLHX.Server.Common.Migrations.Player
+{
+ [DbContext(typeof(PlayerContext))]
+ [Migration("20240221064120_AddManifesto")]
+ partial class AddManifesto
+ {
+ ///
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "8.0.2")
+ .HasAnnotation("Proxies:ChangeTracking", false)
+ .HasAnnotation("Proxies:CheckEquality", false)
+ .HasAnnotation("Proxies:LazyLoading", true);
+
+ modelBuilder.Entity("BLHX.Server.Common.Database.Player", b =>
+ {
+ b.Property("Uid")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("Adv")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.Property("CreatedAt")
+ .HasColumnType("TEXT");
+
+ b.Property("DisplayInfo")
+ .IsRequired()
+ .HasColumnType("jsonb");
+
+ b.Property("Exp")
+ .HasColumnType("INTEGER");
+
+ b.Property("Level")
+ .HasColumnType("INTEGER");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.Property("Token")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.HasKey("Uid");
+
+ b.HasIndex("Token")
+ .IsUnique();
+
+ b.ToTable("Players");
+ });
+
+ modelBuilder.Entity("BLHX.Server.Common.Database.PlayerResource", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("INTEGER");
+
+ b.Property("PlayerUid")
+ .HasColumnType("INTEGER");
+
+ b.Property("Num")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("Id", "PlayerUid");
+
+ b.HasIndex("PlayerUid");
+
+ b.ToTable("Resources");
+ });
+
+ modelBuilder.Entity("BLHX.Server.Common.Database.PlayerShip", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("ActivityNpc")
+ .HasColumnType("INTEGER");
+
+ b.Property("BluePrintFlag")
+ .HasColumnType("INTEGER");
+
+ b.Property("CommanderId")
+ .HasColumnType("INTEGER");
+
+ b.Property("CommonFlag")
+ .HasColumnType("INTEGER");
+
+ b.Property("CoreLists")
+ .IsRequired()
+ .HasColumnType("jsonb");
+
+ b.Property("CreatedAt")
+ .HasColumnType("TEXT");
+
+ b.Property("Energy")
+ .HasColumnType("INTEGER");
+
+ b.Property("EquipInfoLists")
+ .IsRequired()
+ .HasColumnType("jsonb");
+
+ b.Property("Exp")
+ .HasColumnType("INTEGER");
+
+ b.Property("Intimacy")
+ .HasColumnType("INTEGER");
+
+ b.Property("IsLocked")
+ .HasColumnType("INTEGER");
+
+ b.Property("LastChangeName")
+ .HasColumnType("TEXT");
+
+ b.Property("Level")
+ .HasColumnType("INTEGER");
+
+ b.Property("MetaRepairLists")
+ .IsRequired()
+ .HasColumnType("jsonb");
+
+ b.Property("Name")
+ .HasColumnType("TEXT");
+
+ b.Property("PlayerUid")
+ .HasColumnType("INTEGER");
+
+ b.Property("Proficiency")
+ .HasColumnType("INTEGER");
+
+ b.Property("Propose")
+ .HasColumnType("INTEGER");
+
+ b.Property("SkillIdLists")
+ .IsRequired()
+ .HasColumnType("jsonb");
+
+ b.Property("SkinId")
+ .HasColumnType("INTEGER");
+
+ b.Property("State")
+ .IsRequired()
+ .HasColumnType("jsonb");
+
+ b.Property("StrengthLists")
+ .IsRequired()
+ .HasColumnType("jsonb");
+
+ b.Property("TemplateId")
+ .HasColumnType("INTEGER");
+
+ b.Property("TransformLists")
+ .IsRequired()
+ .HasColumnType("jsonb");
+
+ b.HasKey("Id");
+
+ b.HasIndex("PlayerUid");
+
+ b.ToTable("Ships");
+ });
+
+ modelBuilder.Entity("BLHX.Server.Common.Database.PlayerResource", b =>
+ {
+ b.HasOne("BLHX.Server.Common.Database.Player", "Player")
+ .WithMany("Resources")
+ .HasForeignKey("PlayerUid")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Player");
+ });
+
+ modelBuilder.Entity("BLHX.Server.Common.Database.PlayerShip", b =>
+ {
+ b.HasOne("BLHX.Server.Common.Database.Player", "Player")
+ .WithMany("Ships")
+ .HasForeignKey("PlayerUid")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Player");
+ });
+
+ modelBuilder.Entity("BLHX.Server.Common.Database.Player", b =>
+ {
+ b.Navigation("Resources");
+
+ b.Navigation("Ships");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/BLHX.Server.Common/Migrations/Player/20240221064120_AddManifesto.cs b/BLHX.Server.Common/Migrations/Player/20240221064120_AddManifesto.cs
new file mode 100644
index 0000000..6bc489b
--- /dev/null
+++ b/BLHX.Server.Common/Migrations/Player/20240221064120_AddManifesto.cs
@@ -0,0 +1,29 @@
+using Microsoft.EntityFrameworkCore.Migrations;
+
+#nullable disable
+
+namespace BLHX.Server.Common.Migrations.Player
+{
+ ///
+ public partial class AddManifesto : Migration
+ {
+ ///
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.AddColumn(
+ name: "Adv",
+ table: "Players",
+ type: "TEXT",
+ nullable: false,
+ defaultValue: "");
+ }
+
+ ///
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropColumn(
+ name: "Adv",
+ table: "Players");
+ }
+ }
+}
diff --git a/BLHX.Server.Common/Migrations/Player/PlayerContextModelSnapshot.cs b/BLHX.Server.Common/Migrations/Player/PlayerContextModelSnapshot.cs
index eaf4583..d4869c7 100644
--- a/BLHX.Server.Common/Migrations/Player/PlayerContextModelSnapshot.cs
+++ b/BLHX.Server.Common/Migrations/Player/PlayerContextModelSnapshot.cs
@@ -27,6 +27,10 @@ namespace BLHX.Server.Common.Migrations.Player
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
+ b.Property("Adv")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
b.Property("CreatedAt")
.HasColumnType("TEXT");
diff --git a/BLHX.Server.Game/Commands/Command.cs b/BLHX.Server.Game/Commands/Command.cs
index 9492dc4..366c5d2 100644
--- a/BLHX.Server.Game/Commands/Command.cs
+++ b/BLHX.Server.Game/Commands/Command.cs
@@ -50,14 +50,14 @@ public abstract class Command
}
}
- protected T Parse(string? value, T fallback = default)
+ protected T Parse(string? value, T fallback = default!)
{
var tryParseMethod = typeof(T).GetMethod("TryParse", [typeof(string), typeof(T).MakeByRefType()]);
if (tryParseMethod != null)
{
- var parameters = new object[] { value, null };
- bool success = (bool)tryParseMethod.Invoke(null, parameters);
+ var parameters = new object[] { value!, null! };
+ bool success = (bool)tryParseMethod.Invoke(null, parameters)!;
if (success)
return (T)parameters[1];
@@ -87,10 +87,10 @@ public static class CommandHandler
foreach (var commandType in commandTypes)
{
- var commandAttribute = (commandHandler)Attribute.GetCustomAttribute(commandType, typeof(commandHandler));
+ var commandAttribute = (commandHandler?)Attribute.GetCustomAttribute(commandType, typeof(commandHandler));
if (commandAttribute != null)
{
- var commandInstance = (Command)Activator.CreateInstance(commandType);
+ var commandInstance = (Command)Activator.CreateInstance(commandType)!;
commandFunctions[commandAttribute.Name] = commandInstance.Execute;
Commands.Add(commandInstance);
}
diff --git a/BLHX.Server.Game/Handlers/P11.cs b/BLHX.Server.Game/Handlers/P11.cs
index fe3f702..00363c4 100644
--- a/BLHX.Server.Game/Handlers/P11.cs
+++ b/BLHX.Server.Game/Handlers/P11.cs
@@ -1,4 +1,5 @@
-using BLHX.Server.Common.Proto;
+using BLHX.Server.Common.Database;
+using BLHX.Server.Common.Proto;
using BLHX.Server.Common.Proto.p11;
namespace BLHX.Server.Game.Handlers
@@ -17,6 +18,22 @@ namespace BLHX.Server.Game.Handlers
});
}
+ [PacketHandler(Command.Cs11009)]
+ static void ChangeManifestoHandler(Connection connection, Packet packet)
+ {
+ var req = packet.Decode();
+ connection.player.Adv = req.Adv;
+ DBManager.PlayerContext.SaveChanges();
+
+ connection.Send(new Sc11010());
+ }
+
+ [PacketHandler(Command.Cs11601)]
+ static void GetEmojiInfoHandler(Connection connection, Packet packet)
+ {
+ connection.Send(new Sc11602());
+ }
+
[PacketHandler(Command.Cs11603)]
static void FetchSecondaryPasswordHandler(Connection connection, Packet packet)
{
@@ -54,6 +71,7 @@ namespace BLHX.Server.Game.Handlers
Name = connection.player.Name,
Level = connection.player.Level,
Exp = connection.player.Exp,
+ Adv = connection.player.Adv,
ResourceLists = connection.player.Resources.Select(x => new Resource() { Num = x.Num, Type = x.Id }).ToList(),
Characters = [1],
ShipBagMax = 150,
diff --git a/BLHX.Server.Game/Handlers/P26.cs b/BLHX.Server.Game/Handlers/P26.cs
index de27f89..f1f3f1a 100644
--- a/BLHX.Server.Game/Handlers/P26.cs
+++ b/BLHX.Server.Game/Handlers/P26.cs
@@ -11,6 +11,12 @@ namespace BLHX.Server.Game.Handlers
connection.Send(new Sc26102());
}
+ [PacketHandler(Command.Cs26103)]
+ static void MiniGameOPHandler(Connection connection, Packet packet)
+ {
+ connection.Send(new Sc26104());
+ }
+
[PacketHandler(Command.Cs26150)]
static void GetMinigameShopHandler(Connection connection, Packet packet)
{