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) {