From c55fbe3311e11b8cddb1f5642f7e9afe506117be Mon Sep 17 00:00:00 2001 From: sven-n Date: Sun, 19 Oct 2025 22:45:53 +0200 Subject: [PATCH 01/32] Added preferred language setting to account --- src/DataModel/Entities/Account.cs | 8 + .../ModelBuilder/AccountExtensions.cs | 3 + ...51019192544_AddAccountLanguage.Designer.cs | 5113 +++++++++++++++++ .../20251019192544_AddAccountLanguage.cs | 32 + .../EntityDataContextModelSnapshot.cs | 7 + 5 files changed, 5163 insertions(+) create mode 100644 src/Persistence/EntityFramework/Migrations/20251019192544_AddAccountLanguage.Designer.cs create mode 100644 src/Persistence/EntityFramework/Migrations/20251019192544_AddAccountLanguage.cs diff --git a/src/DataModel/Entities/Account.cs b/src/DataModel/Entities/Account.cs index 160e4961b..53e7e83bd 100644 --- a/src/DataModel/Entities/Account.cs +++ b/src/DataModel/Entities/Account.cs @@ -2,6 +2,8 @@ // Licensed under the MIT License. See LICENSE file in the project root for full license information. // +using System.ComponentModel; + namespace MUnique.OpenMU.DataModel.Entities; using MUnique.OpenMU.AttributeSystem; @@ -70,6 +72,12 @@ public class Account /// public string EMail { get; set; } = string.Empty; + /// + /// Gets or sets the iso code (ISO 639-2/3) of the preferred language of the player. + /// + [DefaultValue("en")] + public string LanguageIsoCode { get; set; } = "en"; + /// /// Gets or sets the date and time until which the chat ban is in effect. /// diff --git a/src/Persistence/EntityFramework/Extensions/ModelBuilder/AccountExtensions.cs b/src/Persistence/EntityFramework/Extensions/ModelBuilder/AccountExtensions.cs index 0250cfab5..8bb7fb1a3 100644 --- a/src/Persistence/EntityFramework/Extensions/ModelBuilder/AccountExtensions.cs +++ b/src/Persistence/EntityFramework/Extensions/ModelBuilder/AccountExtensions.cs @@ -4,6 +4,7 @@ namespace MUnique.OpenMU.Persistence.EntityFramework.Extensions.ModelBuilder; +using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; using MUnique.OpenMU.Persistence.EntityFramework.Model; @@ -20,5 +21,7 @@ public static void Apply(this EntityTypeBuilder builder) { builder.Property(account => account.LoginName).HasMaxLength(10).IsRequired(); builder.HasIndex(account => account.LoginName).IsUnique(); + + builder.Property(account => account.LanguageIsoCode).HasMaxLength(3).IsRequired().HasDefaultValue("en"); } } \ No newline at end of file diff --git a/src/Persistence/EntityFramework/Migrations/20251019192544_AddAccountLanguage.Designer.cs b/src/Persistence/EntityFramework/Migrations/20251019192544_AddAccountLanguage.Designer.cs new file mode 100644 index 000000000..399878d24 --- /dev/null +++ b/src/Persistence/EntityFramework/Migrations/20251019192544_AddAccountLanguage.Designer.cs @@ -0,0 +1,5113 @@ +// +using System; +using MUnique.OpenMU.Persistence.EntityFramework; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace MUnique.OpenMU.Persistence.EntityFramework.Migrations +{ + [DbContext(typeof(EntityDataContext))] + [Migration("20251019192544_AddAccountLanguage")] + partial class AddAccountLanguage + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "9.0.0") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.Account", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ChatBanUntil") + .HasColumnType("timestamp with time zone"); + + b.Property("EMail") + .IsRequired() + .HasColumnType("text"); + + b.Property("IsTemplate") + .HasColumnType("boolean"); + + b.Property("IsVaultExtended") + .HasColumnType("boolean"); + + b.Property("LanguageIsoCode") + .IsRequired() + .ValueGeneratedOnAdd() + .HasMaxLength(3) + .HasColumnType("character varying(3)") + .HasDefaultValue("en"); + + b.Property("LoginName") + .IsRequired() + .HasMaxLength(10) + .HasColumnType("character varying(10)"); + + b.Property("PasswordHash") + .IsRequired() + .HasColumnType("text"); + + b.Property("RegistrationDate") + .HasColumnType("timestamp with time zone"); + + b.Property("SecurityCode") + .IsRequired() + .HasColumnType("text"); + + b.Property("State") + .HasColumnType("integer"); + + b.Property("TimeZone") + .HasColumnType("smallint"); + + b.Property("VaultId") + .HasColumnType("uuid"); + + b.Property("VaultPassword") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("LoginName") + .IsUnique(); + + b.HasIndex("VaultId") + .IsUnique(); + + b.ToTable("Account", "data"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.AccountCharacterClass", b => + { + b.Property("AccountId") + .HasColumnType("uuid"); + + b.Property("CharacterClassId") + .HasColumnType("uuid"); + + b.HasKey("AccountId", "CharacterClassId"); + + b.HasIndex("CharacterClassId"); + + b.ToTable("AccountCharacterClass", "data"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.AppearanceData", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CharacterClassId") + .HasColumnType("uuid"); + + b.Property("FullAncientSetEquipped") + .HasColumnType("boolean"); + + b.Property("Pose") + .HasColumnType("smallint"); + + b.HasKey("Id"); + + b.HasIndex("CharacterClassId"); + + b.ToTable("AppearanceData", "data"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.AreaSkillSettings", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("DelayBetweenHits") + .HasColumnType("interval"); + + b.Property("DelayPerOneDistance") + .HasColumnType("interval"); + + b.Property("FrustumDistance") + .HasColumnType("real"); + + b.Property("FrustumEndWidth") + .HasColumnType("real"); + + b.Property("FrustumStartWidth") + .HasColumnType("real"); + + b.Property("HitChancePerDistanceMultiplier") + .HasColumnType("real"); + + b.Property("MaximumNumberOfHitsPerAttack") + .HasColumnType("integer"); + + b.Property("MaximumNumberOfHitsPerTarget") + .HasColumnType("integer"); + + b.Property("MinimumNumberOfHitsPerTarget") + .HasColumnType("integer"); + + b.Property("TargetAreaDiameter") + .HasColumnType("real"); + + b.Property("UseDeferredHits") + .HasColumnType("boolean"); + + b.Property("UseFrustumFilter") + .HasColumnType("boolean"); + + b.Property("UseTargetAreaFilter") + .HasColumnType("boolean"); + + b.HasKey("Id"); + + b.ToTable("AreaSkillSettings", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.AttributeDefinition", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Description") + .HasColumnType("text"); + + b.Property("Designation") + .HasColumnType("text"); + + b.Property("GameConfigurationId") + .HasColumnType("uuid"); + + b.Property("MaximumValue") + .HasColumnType("real"); + + b.HasKey("Id"); + + b.HasIndex("GameConfigurationId"); + + b.ToTable("AttributeDefinition", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.AttributeRelationship", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("AggregateType") + .HasColumnType("integer"); + + b.Property("CharacterClassId") + .HasColumnType("uuid"); + + b.Property("InputAttributeId") + .HasColumnType("uuid"); + + b.Property("InputOperand") + .HasColumnType("real"); + + b.Property("InputOperator") + .HasColumnType("integer"); + + b.Property("OperandAttributeId") + .HasColumnType("uuid"); + + b.Property("PowerUpDefinitionValueId") + .HasColumnType("uuid"); + + b.Property("SkillId") + .HasColumnType("uuid"); + + b.Property("TargetAttributeId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("CharacterClassId"); + + b.HasIndex("InputAttributeId"); + + b.HasIndex("OperandAttributeId"); + + b.HasIndex("PowerUpDefinitionValueId"); + + b.HasIndex("SkillId"); + + b.HasIndex("TargetAttributeId"); + + b.ToTable("AttributeRelationship", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.AttributeRequirement", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("AttributeId") + .HasColumnType("uuid"); + + b.Property("GameMapDefinitionId") + .HasColumnType("uuid"); + + b.Property("ItemDefinitionId") + .HasColumnType("uuid"); + + b.Property("MinimumValue") + .HasColumnType("integer"); + + b.Property("SkillId") + .HasColumnType("uuid"); + + b.Property("SkillId1") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("AttributeId"); + + b.HasIndex("GameMapDefinitionId"); + + b.HasIndex("ItemDefinitionId"); + + b.HasIndex("SkillId"); + + b.HasIndex("SkillId1"); + + b.ToTable("AttributeRequirement", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.BattleZoneDefinition", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("GroundId") + .HasColumnType("uuid"); + + b.Property("LeftGoalId") + .HasColumnType("uuid"); + + b.Property("LeftTeamSpawnPointX") + .HasColumnType("smallint"); + + b.Property("LeftTeamSpawnPointY") + .HasColumnType("smallint"); + + b.Property("RightGoalId") + .HasColumnType("uuid"); + + b.Property("RightTeamSpawnPointX") + .HasColumnType("smallint"); + + b.Property("RightTeamSpawnPointY") + .HasColumnType("smallint"); + + b.Property("Type") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("GroundId") + .IsUnique(); + + b.HasIndex("LeftGoalId") + .IsUnique(); + + b.HasIndex("RightGoalId") + .IsUnique(); + + b.ToTable("BattleZoneDefinition", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.Character", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("AccountId") + .HasColumnType("uuid"); + + b.Property("CharacterClassId") + .HasColumnType("uuid"); + + b.Property("CharacterSlot") + .HasColumnType("smallint"); + + b.Property("CharacterStatus") + .HasColumnType("integer"); + + b.Property("CreateDate") + .HasColumnType("timestamp with time zone"); + + b.Property("CurrentMapId") + .HasColumnType("uuid"); + + b.Property("Experience") + .HasColumnType("bigint"); + + b.Property("InventoryExtensions") + .HasColumnType("integer"); + + b.Property("InventoryId") + .HasColumnType("uuid"); + + b.Property("IsStoreOpened") + .HasColumnType("boolean"); + + b.Property("KeyConfiguration") + .HasColumnType("bytea"); + + b.Property("LevelUpPoints") + .HasColumnType("integer"); + + b.Property("MasterExperience") + .HasColumnType("bigint"); + + b.Property("MasterLevelUpPoints") + .HasColumnType("integer"); + + b.Property("MuHelperConfiguration") + .HasColumnType("bytea"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(10) + .HasColumnType("character varying(10)"); + + b.Property("PlayerKillCount") + .HasColumnType("integer"); + + b.Property("Pose") + .HasColumnType("smallint"); + + b.Property("PositionX") + .HasColumnType("smallint"); + + b.Property("PositionY") + .HasColumnType("smallint"); + + b.Property("State") + .HasColumnType("integer"); + + b.Property("StateRemainingSeconds") + .HasColumnType("integer"); + + b.Property("StoreName") + .HasColumnType("text"); + + b.Property("UsedFruitPoints") + .HasColumnType("integer"); + + b.Property("UsedNegFruitPoints") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("AccountId"); + + b.HasIndex("CharacterClassId"); + + b.HasIndex("CurrentMapId"); + + b.HasIndex("InventoryId") + .IsUnique(); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("Character", "data"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.CharacterClass", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CanGetCreated") + .HasColumnType("boolean"); + + b.Property("ComboDefinitionId") + .HasColumnType("uuid"); + + b.Property("CreationAllowedFlag") + .HasColumnType("smallint"); + + b.Property("FruitCalculation") + .HasColumnType("integer"); + + b.Property("GameConfigurationId") + .HasColumnType("uuid"); + + b.Property("HomeMapId") + .HasColumnType("uuid"); + + b.Property("IsMasterClass") + .HasColumnType("boolean"); + + b.Property("LevelRequirementByCreation") + .HasColumnType("smallint"); + + b.Property("LevelWarpRequirementReductionPercent") + .HasColumnType("integer"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("NextGenerationClassId") + .HasColumnType("uuid"); + + b.Property("Number") + .HasColumnType("smallint"); + + b.HasKey("Id"); + + b.HasIndex("ComboDefinitionId") + .IsUnique(); + + b.HasIndex("GameConfigurationId"); + + b.HasIndex("HomeMapId"); + + b.HasIndex("NextGenerationClassId"); + + b.ToTable("CharacterClass", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.CharacterDropItemGroup", b => + { + b.Property("CharacterId") + .HasColumnType("uuid"); + + b.Property("DropItemGroupId") + .HasColumnType("uuid"); + + b.HasKey("CharacterId", "DropItemGroupId"); + + b.HasIndex("DropItemGroupId"); + + b.ToTable("CharacterDropItemGroup", "data"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.CharacterQuestState", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ActiveQuestId") + .HasColumnType("uuid"); + + b.Property("CharacterId") + .HasColumnType("uuid"); + + b.Property("ClientActionPerformed") + .HasColumnType("boolean"); + + b.Property("Group") + .HasColumnType("smallint"); + + b.Property("LastFinishedQuestId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("ActiveQuestId"); + + b.HasIndex("CharacterId"); + + b.HasIndex("LastFinishedQuestId"); + + b.ToTable("CharacterQuestState", "data"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ChatServerDefinition", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ClientCleanUpInterval") + .HasColumnType("interval"); + + b.Property("ClientTimeout") + .HasColumnType("interval"); + + b.Property("Description") + .IsRequired() + .HasColumnType("text"); + + b.Property("MaximumConnections") + .HasColumnType("integer"); + + b.Property("RoomCleanUpInterval") + .HasColumnType("interval"); + + b.Property("ServerId") + .HasColumnType("smallint"); + + b.HasKey("Id"); + + b.ToTable("ChatServerDefinition", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ChatServerEndpoint", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ChatServerDefinitionId") + .HasColumnType("uuid"); + + b.Property("ClientId") + .HasColumnType("uuid"); + + b.Property("NetworkPort") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("ChatServerDefinitionId"); + + b.HasIndex("ClientId"); + + b.ToTable("ChatServerEndpoint", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.CombinationBonusRequirement", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ItemOptionCombinationBonusId") + .HasColumnType("uuid"); + + b.Property("MinimumCount") + .HasColumnType("integer"); + + b.Property("OptionTypeId") + .HasColumnType("uuid"); + + b.Property("SubOptionType") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("ItemOptionCombinationBonusId"); + + b.HasIndex("OptionTypeId"); + + b.ToTable("CombinationBonusRequirement", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ConfigurationUpdate", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Description") + .HasColumnType("text"); + + b.Property("InstalledAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Name") + .HasColumnType("text"); + + b.Property("Version") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.ToTable("ConfigurationUpdate", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ConfigurationUpdateState", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CurrentInstalledVersion") + .HasColumnType("integer"); + + b.Property("InitializationKey") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.ToTable("ConfigurationUpdateState", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ConnectServerDefinition", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CheckMaxConnectionsPerAddress") + .HasColumnType("boolean"); + + b.Property("ClientId") + .HasColumnType("uuid"); + + b.Property("ClientListenerPort") + .HasColumnType("integer"); + + b.Property("CurrentPatchVersion") + .HasColumnType("bytea"); + + b.Property("Description") + .IsRequired() + .HasColumnType("text"); + + b.Property("DisconnectOnUnknownPacket") + .HasColumnType("boolean"); + + b.Property("ListenerBacklog") + .HasColumnType("integer"); + + b.Property("MaxConnections") + .HasColumnType("integer"); + + b.Property("MaxConnectionsPerAddress") + .HasColumnType("integer"); + + b.Property("MaxFtpRequests") + .HasColumnType("integer"); + + b.Property("MaxIpRequests") + .HasColumnType("integer"); + + b.Property("MaxServerListRequests") + .HasColumnType("integer"); + + b.Property("MaximumReceiveSize") + .HasColumnType("smallint"); + + b.Property("PatchAddress") + .IsRequired() + .HasColumnType("text"); + + b.Property("ServerId") + .HasColumnType("smallint"); + + b.Property("Timeout") + .HasColumnType("interval"); + + b.HasKey("Id"); + + b.HasIndex("ClientId"); + + b.ToTable("ConnectServerDefinition", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ConstValueAttribute", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CharacterClassId") + .HasColumnType("uuid"); + + b.Property("DefinitionId") + .HasColumnType("uuid"); + + b.Property("Value") + .HasColumnType("real"); + + b.HasKey("Id"); + + b.HasIndex("CharacterClassId"); + + b.HasIndex("DefinitionId"); + + b.ToTable("ConstValueAttribute", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.DropItemGroup", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Chance") + .HasColumnType("double precision"); + + b.Property("Description") + .IsRequired() + .HasColumnType("text"); + + b.Property("GameConfigurationId") + .HasColumnType("uuid"); + + b.Property("ItemLevel") + .HasColumnType("smallint"); + + b.Property("ItemType") + .HasColumnType("integer"); + + b.Property("MaximumMonsterLevel") + .HasColumnType("smallint"); + + b.Property("MinimumMonsterLevel") + .HasColumnType("smallint"); + + b.Property("MonsterId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("GameConfigurationId"); + + b.HasIndex("MonsterId"); + + b.ToTable("DropItemGroup", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.DropItemGroupItemDefinition", b => + { + b.Property("DropItemGroupId") + .HasColumnType("uuid"); + + b.Property("ItemDefinitionId") + .HasColumnType("uuid"); + + b.HasKey("DropItemGroupId", "ItemDefinitionId"); + + b.HasIndex("ItemDefinitionId"); + + b.ToTable("DropItemGroupItemDefinition", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.DuelArea", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("DuelConfigurationId") + .HasColumnType("uuid"); + + b.Property("FirstPlayerGateId") + .HasColumnType("uuid"); + + b.Property("Index") + .HasColumnType("smallint"); + + b.Property("SecondPlayerGateId") + .HasColumnType("uuid"); + + b.Property("SpectatorsGateId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("DuelConfigurationId"); + + b.HasIndex("FirstPlayerGateId"); + + b.HasIndex("SecondPlayerGateId"); + + b.HasIndex("SpectatorsGateId"); + + b.ToTable("DuelArea", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.DuelConfiguration", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("EntranceFee") + .HasColumnType("integer"); + + b.Property("ExitId") + .HasColumnType("uuid"); + + b.Property("MaximumScore") + .HasColumnType("integer"); + + b.Property("MaximumSpectatorsPerDuelRoom") + .HasColumnType("integer"); + + b.Property("MinimumCharacterLevel") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("ExitId"); + + b.ToTable("DuelConfiguration", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.EnterGate", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("GameMapDefinitionId") + .HasColumnType("uuid"); + + b.Property("LevelRequirement") + .HasColumnType("smallint"); + + b.Property("Number") + .HasColumnType("smallint"); + + b.Property("TargetGateId") + .HasColumnType("uuid"); + + b.Property("X1") + .HasColumnType("smallint"); + + b.Property("X2") + .HasColumnType("smallint"); + + b.Property("Y1") + .HasColumnType("smallint"); + + b.Property("Y2") + .HasColumnType("smallint"); + + b.HasKey("Id"); + + b.HasIndex("GameMapDefinitionId"); + + b.HasIndex("TargetGateId"); + + b.ToTable("EnterGate", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ExitGate", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Direction") + .HasColumnType("integer"); + + b.Property("IsSpawnGate") + .HasColumnType("boolean"); + + b.Property("MapId") + .HasColumnType("uuid"); + + b.Property("X1") + .HasColumnType("smallint"); + + b.Property("X2") + .HasColumnType("smallint"); + + b.Property("Y1") + .HasColumnType("smallint"); + + b.Property("Y2") + .HasColumnType("smallint"); + + b.HasKey("Id"); + + b.HasIndex("MapId"); + + b.ToTable("ExitGate", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.Friend", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Accepted") + .HasColumnType("boolean"); + + b.Property("CharacterId") + .HasColumnType("uuid"); + + b.Property("FriendId") + .HasColumnType("uuid"); + + b.Property("RequestOpen") + .HasColumnType("boolean"); + + b.HasKey("Id"); + + b.HasAlternateKey("CharacterId", "FriendId"); + + b.ToTable("Friend", "friend"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.GameClientDefinition", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Description") + .IsRequired() + .HasColumnType("text"); + + b.Property("Episode") + .HasColumnType("smallint"); + + b.Property("Language") + .HasColumnType("integer"); + + b.Property("Season") + .HasColumnType("smallint"); + + b.Property("Serial") + .HasColumnType("bytea"); + + b.Property("Version") + .HasColumnType("bytea"); + + b.HasKey("Id"); + + b.ToTable("GameClientDefinition", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.GameConfiguration", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("AreaSkillHitsPlayer") + .HasColumnType("boolean"); + + b.Property("CharacterNameRegex") + .HasColumnType("text"); + + b.Property("DamagePerOneItemDurability") + .HasColumnType("double precision"); + + b.Property("DamagePerOnePetDurability") + .HasColumnType("double precision"); + + b.Property("DuelConfigurationId") + .HasColumnType("uuid"); + + b.Property("ExperienceFormula") + .ValueGeneratedOnAdd() + .HasColumnType("text") + .HasDefaultValue("if(level == 0, 0, if(level < 256, 10 * (level + 8) * (level - 1) * (level - 1), (10 * (level + 8) * (level - 1) * (level - 1)) + (1000 * (level - 247) * (level - 256) * (level - 256))))"); + + b.Property("ExperienceRate") + .HasColumnType("real"); + + b.Property("HitsPerOneItemDurability") + .HasColumnType("double precision"); + + b.Property("InfoRange") + .HasColumnType("smallint"); + + b.Property("ItemDropDuration") + .ValueGeneratedOnAdd() + .HasColumnType("interval") + .HasDefaultValue(new TimeSpan(0, 0, 1, 0, 0)); + + b.Property("LetterSendPrice") + .HasColumnType("integer"); + + b.Property("MasterExperienceFormula") + .ValueGeneratedOnAdd() + .HasColumnType("text") + .HasDefaultValue("(505 * level * level * level) + (35278500 * level) + (228045 * level * level)"); + + b.Property("MaximumCharactersPerAccount") + .HasColumnType("smallint"); + + b.Property("MaximumInventoryMoney") + .HasColumnType("integer"); + + b.Property("MaximumItemOptionLevelDrop") + .HasColumnType("smallint"); + + b.Property("MaximumLetters") + .HasColumnType("integer"); + + b.Property("MaximumLevel") + .HasColumnType("smallint"); + + b.Property("MaximumMasterLevel") + .HasColumnType("smallint"); + + b.Property("MaximumPartySize") + .HasColumnType("smallint"); + + b.Property("MaximumPasswordLength") + .HasColumnType("integer"); + + b.Property("MaximumVaultMoney") + .HasColumnType("integer"); + + b.Property("MinimumMonsterLevelForMasterExperience") + .HasColumnType("smallint"); + + b.Property("RecoveryInterval") + .HasColumnType("integer"); + + b.Property("ShouldDropMoney") + .HasColumnType("boolean"); + + b.HasKey("Id"); + + b.HasIndex("DuelConfigurationId") + .IsUnique(); + + b.ToTable("GameConfiguration", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.GameMapDefinition", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("BattleZoneId") + .HasColumnType("uuid"); + + b.Property("Discriminator") + .HasColumnType("integer"); + + b.Property("ExpMultiplier") + .HasColumnType("double precision"); + + b.Property("GameConfigurationId") + .HasColumnType("uuid"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("Number") + .HasColumnType("smallint"); + + b.Property("SafezoneMapId") + .HasColumnType("uuid"); + + b.Property("TerrainData") + .HasColumnType("bytea"); + + b.HasKey("Id"); + + b.HasIndex("BattleZoneId") + .IsUnique(); + + b.HasIndex("GameConfigurationId"); + + b.HasIndex("SafezoneMapId"); + + b.ToTable("GameMapDefinition", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.GameMapDefinitionDropItemGroup", b => + { + b.Property("GameMapDefinitionId") + .HasColumnType("uuid"); + + b.Property("DropItemGroupId") + .HasColumnType("uuid"); + + b.HasKey("GameMapDefinitionId", "DropItemGroupId"); + + b.HasIndex("DropItemGroupId"); + + b.ToTable("GameMapDefinitionDropItemGroup", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.GameServerConfiguration", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("MaximumPlayers") + .HasColumnType("smallint"); + + b.HasKey("Id"); + + b.ToTable("GameServerConfiguration", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.GameServerConfigurationGameMapDefinition", b => + { + b.Property("GameServerConfigurationId") + .HasColumnType("uuid"); + + b.Property("GameMapDefinitionId") + .HasColumnType("uuid"); + + b.HasKey("GameServerConfigurationId", "GameMapDefinitionId"); + + b.HasIndex("GameMapDefinitionId"); + + b.ToTable("GameServerConfigurationGameMapDefinition", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.GameServerDefinition", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Description") + .IsRequired() + .HasColumnType("text"); + + b.Property("ExperienceRate") + .HasColumnType("real"); + + b.Property("GameConfigurationId") + .HasColumnType("uuid"); + + b.Property("PvpEnabled") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true); + + b.Property("ServerConfigurationId") + .HasColumnType("uuid"); + + b.Property("ServerID") + .HasColumnType("smallint"); + + b.HasKey("Id"); + + b.HasIndex("GameConfigurationId"); + + b.HasIndex("ServerConfigurationId"); + + b.ToTable("GameServerDefinition", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.GameServerEndpoint", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("AlternativePublishedPort") + .HasColumnType("integer"); + + b.Property("ClientId") + .HasColumnType("uuid"); + + b.Property("GameServerDefinitionId") + .HasColumnType("uuid"); + + b.Property("NetworkPort") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("ClientId"); + + b.HasIndex("GameServerDefinitionId"); + + b.ToTable("GameServerEndpoint", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.Guild", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("AllianceGuildId") + .HasColumnType("uuid"); + + b.Property("HostilityId") + .HasColumnType("uuid"); + + b.Property("Logo") + .HasColumnType("bytea"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(8) + .HasColumnType("character varying(8)"); + + b.Property("Notice") + .HasColumnType("text"); + + b.Property("Score") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("AllianceGuildId"); + + b.HasIndex("HostilityId"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("Guild", "guild"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.GuildMember", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("GuildId") + .HasColumnType("uuid"); + + b.Property("Status") + .HasColumnType("smallint"); + + b.HasKey("Id"); + + b.HasIndex("GuildId"); + + b.ToTable("GuildMember", "guild"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.IncreasableItemOption", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ItemOptionDefinitionId") + .HasColumnType("uuid"); + + b.Property("LevelType") + .HasColumnType("integer"); + + b.Property("Number") + .HasColumnType("integer"); + + b.Property("OptionTypeId") + .HasColumnType("uuid"); + + b.Property("PowerUpDefinitionId") + .HasColumnType("uuid"); + + b.Property("SubOptionType") + .HasColumnType("integer"); + + b.Property("Weight") + .HasColumnType("smallint"); + + b.HasKey("Id"); + + b.HasIndex("ItemOptionDefinitionId"); + + b.HasIndex("OptionTypeId"); + + b.HasIndex("PowerUpDefinitionId") + .IsUnique(); + + b.ToTable("IncreasableItemOption", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.Item", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("DefinitionId") + .HasColumnType("uuid"); + + b.Property("Durability") + .HasColumnType("double precision"); + + b.Property("HasSkill") + .HasColumnType("boolean"); + + b.Property("ItemSlot") + .HasColumnType("smallint"); + + b.Property("ItemStorageId") + .HasColumnType("uuid"); + + b.Property("Level") + .HasColumnType("smallint"); + + b.Property("PetExperience") + .HasColumnType("integer"); + + b.Property("SocketCount") + .HasColumnType("integer"); + + b.Property("StorePrice") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("DefinitionId"); + + b.HasIndex("ItemStorageId"); + + b.ToTable("Item", "data"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemAppearance", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("AppearanceDataId") + .HasColumnType("uuid"); + + b.Property("DefinitionId") + .HasColumnType("uuid"); + + b.Property("ItemSlot") + .HasColumnType("smallint"); + + b.Property("Level") + .HasColumnType("smallint"); + + b.HasKey("Id"); + + b.HasIndex("AppearanceDataId"); + + b.HasIndex("DefinitionId"); + + b.ToTable("ItemAppearance", "data"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemAppearanceItemOptionType", b => + { + b.Property("ItemAppearanceId") + .HasColumnType("uuid"); + + b.Property("ItemOptionTypeId") + .HasColumnType("uuid"); + + b.HasKey("ItemAppearanceId", "ItemOptionTypeId"); + + b.HasIndex("ItemOptionTypeId"); + + b.ToTable("ItemAppearanceItemOptionType", "data"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemBasePowerUpDefinition", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("AggregateType") + .HasColumnType("integer"); + + b.Property("BaseValue") + .HasColumnType("real"); + + b.Property("BonusPerLevelTableId") + .HasColumnType("uuid"); + + b.Property("ItemDefinitionId") + .HasColumnType("uuid"); + + b.Property("TargetAttributeId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("BonusPerLevelTableId"); + + b.HasIndex("ItemDefinitionId"); + + b.HasIndex("TargetAttributeId"); + + b.ToTable("ItemBasePowerUpDefinition", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemCrafting", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ItemCraftingHandlerClassName") + .IsRequired() + .HasColumnType("text"); + + b.Property("MonsterDefinitionId") + .HasColumnType("uuid"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("Number") + .HasColumnType("smallint"); + + b.Property("SimpleCraftingSettingsId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("MonsterDefinitionId"); + + b.HasIndex("SimpleCraftingSettingsId") + .IsUnique(); + + b.ToTable("ItemCrafting", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemCraftingRequiredItem", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("AddPercentage") + .HasColumnType("smallint"); + + b.Property("FailResult") + .HasColumnType("integer"); + + b.Property("MaximumAmount") + .HasColumnType("smallint"); + + b.Property("MaximumItemLevel") + .HasColumnType("smallint"); + + b.Property("MinimumAmount") + .HasColumnType("smallint"); + + b.Property("MinimumItemLevel") + .HasColumnType("smallint"); + + b.Property("NpcPriceDivisor") + .HasColumnType("integer"); + + b.Property("Reference") + .HasColumnType("smallint"); + + b.Property("SimpleCraftingSettingsId") + .HasColumnType("uuid"); + + b.Property("SuccessResult") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("SimpleCraftingSettingsId"); + + b.ToTable("ItemCraftingRequiredItem", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemCraftingRequiredItemItemDefinition", b => + { + b.Property("ItemCraftingRequiredItemId") + .HasColumnType("uuid"); + + b.Property("ItemDefinitionId") + .HasColumnType("uuid"); + + b.HasKey("ItemCraftingRequiredItemId", "ItemDefinitionId"); + + b.HasIndex("ItemDefinitionId"); + + b.ToTable("ItemCraftingRequiredItemItemDefinition", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemCraftingRequiredItemItemOptionType", b => + { + b.Property("ItemCraftingRequiredItemId") + .HasColumnType("uuid"); + + b.Property("ItemOptionTypeId") + .HasColumnType("uuid"); + + b.HasKey("ItemCraftingRequiredItemId", "ItemOptionTypeId"); + + b.HasIndex("ItemOptionTypeId"); + + b.ToTable("ItemCraftingRequiredItemItemOptionType", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemCraftingResultItem", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("AddLevel") + .HasColumnType("smallint"); + + b.Property("Durability") + .HasColumnType("smallint"); + + b.Property("ItemDefinitionId") + .HasColumnType("uuid"); + + b.Property("RandomMaximumLevel") + .HasColumnType("smallint"); + + b.Property("RandomMinimumLevel") + .HasColumnType("smallint"); + + b.Property("Reference") + .HasColumnType("smallint"); + + b.Property("SimpleCraftingSettingsId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("ItemDefinitionId"); + + b.HasIndex("SimpleCraftingSettingsId"); + + b.ToTable("ItemCraftingResultItem", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemDefinition", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ConsumeEffectId") + .HasColumnType("uuid"); + + b.Property("DropLevel") + .HasColumnType("smallint"); + + b.Property("DropsFromMonsters") + .HasColumnType("boolean"); + + b.Property("Durability") + .HasColumnType("smallint"); + + b.Property("GameConfigurationId") + .HasColumnType("uuid"); + + b.Property("Group") + .HasColumnType("smallint"); + + b.Property("Height") + .HasColumnType("smallint"); + + b.Property("IsAmmunition") + .HasColumnType("boolean"); + + b.Property("IsBoundToCharacter") + .HasColumnType("boolean"); + + b.Property("ItemSlotId") + .HasColumnType("uuid"); + + b.Property("MaximumItemLevel") + .HasColumnType("smallint"); + + b.Property("MaximumSockets") + .HasColumnType("integer"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("Number") + .HasColumnType("smallint"); + + b.Property("PetExperienceFormula") + .HasColumnType("text"); + + b.Property("SkillId") + .HasColumnType("uuid"); + + b.Property("StorageLimitPerCharacter") + .HasColumnType("integer"); + + b.Property("Value") + .HasColumnType("integer"); + + b.Property("Width") + .HasColumnType("smallint"); + + b.HasKey("Id"); + + b.HasIndex("ConsumeEffectId"); + + b.HasIndex("GameConfigurationId"); + + b.HasIndex("ItemSlotId"); + + b.HasIndex("SkillId"); + + b.ToTable("ItemDefinition", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemDefinitionCharacterClass", b => + { + b.Property("ItemDefinitionId") + .HasColumnType("uuid"); + + b.Property("CharacterClassId") + .HasColumnType("uuid"); + + b.HasKey("ItemDefinitionId", "CharacterClassId"); + + b.HasIndex("CharacterClassId"); + + b.ToTable("ItemDefinitionCharacterClass", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemDefinitionItemOptionDefinition", b => + { + b.Property("ItemDefinitionId") + .HasColumnType("uuid"); + + b.Property("ItemOptionDefinitionId") + .HasColumnType("uuid"); + + b.HasKey("ItemDefinitionId", "ItemOptionDefinitionId"); + + b.HasIndex("ItemOptionDefinitionId"); + + b.ToTable("ItemDefinitionItemOptionDefinition", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemDefinitionItemSetGroup", b => + { + b.Property("ItemDefinitionId") + .HasColumnType("uuid"); + + b.Property("ItemSetGroupId") + .HasColumnType("uuid"); + + b.HasKey("ItemDefinitionId", "ItemSetGroupId"); + + b.HasIndex("ItemSetGroupId"); + + b.ToTable("ItemDefinitionItemSetGroup", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemDropItemGroup", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Chance") + .HasColumnType("double precision"); + + b.Property("Description") + .IsRequired() + .HasColumnType("text"); + + b.Property("DropEffect") + .HasColumnType("integer"); + + b.Property("ItemDefinitionId") + .HasColumnType("uuid"); + + b.Property("ItemLevel") + .HasColumnType("smallint"); + + b.Property("ItemType") + .HasColumnType("integer"); + + b.Property("MaximumLevel") + .HasColumnType("smallint"); + + b.Property("MaximumMonsterLevel") + .HasColumnType("smallint"); + + b.Property("MinimumLevel") + .HasColumnType("smallint"); + + b.Property("MinimumMonsterLevel") + .HasColumnType("smallint"); + + b.Property("MoneyAmount") + .HasColumnType("integer"); + + b.Property("MonsterId") + .HasColumnType("uuid"); + + b.Property("RequiredCharacterLevel") + .HasColumnType("smallint"); + + b.Property("SourceItemLevel") + .HasColumnType("smallint"); + + b.HasKey("Id"); + + b.HasIndex("ItemDefinitionId"); + + b.HasIndex("MonsterId"); + + b.ToTable("ItemDropItemGroup", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemDropItemGroupItemDefinition", b => + { + b.Property("ItemDropItemGroupId") + .HasColumnType("uuid"); + + b.Property("ItemDefinitionId") + .HasColumnType("uuid"); + + b.HasKey("ItemDropItemGroupId", "ItemDefinitionId"); + + b.HasIndex("ItemDefinitionId"); + + b.ToTable("ItemDropItemGroupItemDefinition", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemItemOfItemSet", b => + { + b.Property("ItemId") + .HasColumnType("uuid"); + + b.Property("ItemOfItemSetId") + .HasColumnType("uuid"); + + b.HasKey("ItemId", "ItemOfItemSetId"); + + b.HasIndex("ItemOfItemSetId"); + + b.ToTable("ItemItemOfItemSet", "data"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemLevelBonusTable", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Description") + .IsRequired() + .HasColumnType("text"); + + b.Property("GameConfigurationId") + .HasColumnType("uuid"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("GameConfigurationId"); + + b.ToTable("ItemLevelBonusTable", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemOfItemSet", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("AncientSetDiscriminator") + .HasColumnType("integer"); + + b.Property("BonusOptionId") + .HasColumnType("uuid"); + + b.Property("ItemDefinitionId") + .HasColumnType("uuid"); + + b.Property("ItemSetGroupId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("BonusOptionId"); + + b.HasIndex("ItemDefinitionId"); + + b.HasIndex("ItemSetGroupId"); + + b.ToTable("ItemOfItemSet", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemOption", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Number") + .HasColumnType("integer"); + + b.Property("OptionTypeId") + .HasColumnType("uuid"); + + b.Property("PowerUpDefinitionId") + .HasColumnType("uuid"); + + b.Property("SubOptionType") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("OptionTypeId"); + + b.HasIndex("PowerUpDefinitionId") + .IsUnique(); + + b.ToTable("ItemOption", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemOptionCombinationBonus", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("AppliesMultipleTimes") + .HasColumnType("boolean"); + + b.Property("BonusId") + .HasColumnType("uuid"); + + b.Property("Description") + .IsRequired() + .HasColumnType("text"); + + b.Property("GameConfigurationId") + .HasColumnType("uuid"); + + b.Property("Number") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("BonusId") + .IsUnique(); + + b.HasIndex("GameConfigurationId"); + + b.ToTable("ItemOptionCombinationBonus", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemOptionDefinition", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("AddChance") + .HasColumnType("real"); + + b.Property("AddsRandomly") + .HasColumnType("boolean"); + + b.Property("GameConfigurationId") + .HasColumnType("uuid"); + + b.Property("MaximumOptionsPerItem") + .HasColumnType("integer"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("GameConfigurationId"); + + b.ToTable("ItemOptionDefinition", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemOptionLink", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Index") + .HasColumnType("integer"); + + b.Property("ItemId") + .HasColumnType("uuid"); + + b.Property("ItemOptionId") + .HasColumnType("uuid"); + + b.Property("Level") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("ItemId"); + + b.HasIndex("ItemOptionId"); + + b.ToTable("ItemOptionLink", "data"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemOptionOfLevel", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("IncreasableItemOptionId") + .HasColumnType("uuid"); + + b.Property("Level") + .HasColumnType("integer"); + + b.Property("PowerUpDefinitionId") + .HasColumnType("uuid"); + + b.Property("RequiredItemLevel") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("IncreasableItemOptionId"); + + b.HasIndex("PowerUpDefinitionId") + .IsUnique(); + + b.ToTable("ItemOptionOfLevel", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemOptionType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Description") + .IsRequired() + .HasColumnType("text"); + + b.Property("GameConfigurationId") + .HasColumnType("uuid"); + + b.Property("IsVisible") + .HasColumnType("boolean"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("GameConfigurationId"); + + b.ToTable("ItemOptionType", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemSetGroup", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("AlwaysApplies") + .HasColumnType("boolean"); + + b.Property("CountDistinct") + .HasColumnType("boolean"); + + b.Property("GameConfigurationId") + .HasColumnType("uuid"); + + b.Property("MinimumItemCount") + .HasColumnType("integer"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("OptionsId") + .HasColumnType("uuid"); + + b.Property("SetLevel") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("GameConfigurationId"); + + b.HasIndex("OptionsId"); + + b.ToTable("ItemSetGroup", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemSlotType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Description") + .IsRequired() + .HasColumnType("text"); + + b.Property("GameConfigurationId") + .HasColumnType("uuid"); + + b.Property("RawItemSlots") + .HasColumnType("text") + .HasColumnName("ItemSlots") + .HasAnnotation("Relational:JsonPropertyName", "itemSlots"); + + b.HasKey("Id"); + + b.HasIndex("GameConfigurationId"); + + b.ToTable("ItemSlotType", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemStorage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Money") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.ToTable("ItemStorage", "data"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.JewelMix", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("GameConfigurationId") + .HasColumnType("uuid"); + + b.Property("MixedJewelId") + .HasColumnType("uuid"); + + b.Property("Number") + .HasColumnType("smallint"); + + b.Property("SingleJewelId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("GameConfigurationId"); + + b.HasIndex("MixedJewelId"); + + b.HasIndex("SingleJewelId"); + + b.ToTable("JewelMix", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.LetterBody", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Animation") + .HasColumnType("smallint"); + + b.Property("HeaderId") + .HasColumnType("uuid"); + + b.Property("Message") + .IsRequired() + .HasColumnType("text"); + + b.Property("Rotation") + .HasColumnType("smallint"); + + b.Property("SenderAppearanceId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("HeaderId"); + + b.HasIndex("SenderAppearanceId") + .IsUnique(); + + b.ToTable("LetterBody", "data"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.LetterHeader", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("LetterDate") + .HasColumnType("timestamp with time zone"); + + b.Property("ReadFlag") + .HasColumnType("boolean"); + + b.Property("ReceiverId") + .HasColumnType("uuid"); + + b.Property("SenderName") + .HasColumnType("text"); + + b.Property("Subject") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("ReceiverId"); + + b.ToTable("LetterHeader", "data"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.LevelBonus", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("AdditionalValue") + .HasColumnType("real"); + + b.Property("ItemLevelBonusTableId") + .HasColumnType("uuid"); + + b.Property("Level") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("ItemLevelBonusTableId"); + + b.ToTable("LevelBonus", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.MagicEffectDefinition", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("DurationId") + .HasColumnType("uuid"); + + b.Property("GameConfigurationId") + .HasColumnType("uuid"); + + b.Property("InformObservers") + .HasColumnType("boolean"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("Number") + .HasColumnType("smallint"); + + b.Property("SendDuration") + .HasColumnType("boolean"); + + b.Property("StopByDeath") + .HasColumnType("boolean"); + + b.Property("SubType") + .HasColumnType("smallint"); + + b.HasKey("Id"); + + b.HasIndex("DurationId") + .IsUnique(); + + b.HasIndex("GameConfigurationId"); + + b.ToTable("MagicEffectDefinition", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.MasterSkillDefinition", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Aggregation") + .HasColumnType("integer"); + + b.Property("DisplayValueFormula") + .IsRequired() + .HasColumnType("text"); + + b.Property("ExtendsDuration") + .HasColumnType("boolean"); + + b.Property("MaximumLevel") + .HasColumnType("smallint"); + + b.Property("MinimumLevel") + .HasColumnType("smallint"); + + b.Property("Rank") + .HasColumnType("smallint"); + + b.Property("ReplacedSkillId") + .HasColumnType("uuid"); + + b.Property("RootId") + .HasColumnType("uuid"); + + b.Property("TargetAttributeId") + .HasColumnType("uuid"); + + b.Property("ValueFormula") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("ReplacedSkillId"); + + b.HasIndex("RootId"); + + b.HasIndex("TargetAttributeId"); + + b.ToTable("MasterSkillDefinition", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.MasterSkillDefinitionSkill", b => + { + b.Property("MasterSkillDefinitionId") + .HasColumnType("uuid"); + + b.Property("SkillId") + .HasColumnType("uuid"); + + b.HasKey("MasterSkillDefinitionId", "SkillId"); + + b.HasIndex("SkillId"); + + b.ToTable("MasterSkillDefinitionSkill", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.MasterSkillRoot", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("GameConfigurationId") + .HasColumnType("uuid"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("GameConfigurationId"); + + b.ToTable("MasterSkillRoot", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.MiniGameChangeEvent", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Description") + .HasColumnType("text"); + + b.Property("Index") + .HasColumnType("integer"); + + b.Property("Message") + .HasColumnType("text"); + + b.Property("MiniGameDefinitionId") + .HasColumnType("uuid"); + + b.Property("MinimumTargetLevel") + .HasColumnType("smallint"); + + b.Property("MultiplyKillsByPlayers") + .HasColumnType("boolean"); + + b.Property("NumberOfKills") + .HasColumnType("smallint"); + + b.Property("SpawnAreaId") + .HasColumnType("uuid"); + + b.Property("Target") + .HasColumnType("integer"); + + b.Property("TargetDefinitionId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("MiniGameDefinitionId"); + + b.HasIndex("SpawnAreaId") + .IsUnique(); + + b.HasIndex("TargetDefinitionId"); + + b.ToTable("MiniGameChangeEvent", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.MiniGameDefinition", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("AllowParty") + .HasColumnType("boolean"); + + b.Property("ArePlayerKillersAllowedToEnter") + .HasColumnType("boolean"); + + b.Property("Description") + .IsRequired() + .HasColumnType("text"); + + b.Property("EnterDuration") + .HasColumnType("interval"); + + b.Property("EntranceFee") + .HasColumnType("integer"); + + b.Property("EntranceId") + .HasColumnType("uuid"); + + b.Property("ExitDuration") + .HasColumnType("interval"); + + b.Property("GameConfigurationId") + .HasColumnType("uuid"); + + b.Property("GameDuration") + .HasColumnType("interval"); + + b.Property("GameLevel") + .HasColumnType("smallint"); + + b.Property("MapCreationPolicy") + .HasColumnType("integer"); + + b.Property("MaximumCharacterLevel") + .HasColumnType("integer"); + + b.Property("MaximumPlayerCount") + .HasColumnType("integer"); + + b.Property("MaximumSpecialCharacterLevel") + .HasColumnType("integer"); + + b.Property("MinimumCharacterLevel") + .HasColumnType("integer"); + + b.Property("MinimumSpecialCharacterLevel") + .HasColumnType("integer"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("RequiresMasterClass") + .HasColumnType("boolean"); + + b.Property("SaveRankingStatistics") + .HasColumnType("boolean"); + + b.Property("TicketItemId") + .HasColumnType("uuid"); + + b.Property("TicketItemLevel") + .HasColumnType("integer"); + + b.Property("Type") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("EntranceId"); + + b.HasIndex("GameConfigurationId"); + + b.HasIndex("TicketItemId"); + + b.ToTable("MiniGameDefinition", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.MiniGameRankingEntry", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CharacterId") + .HasColumnType("uuid"); + + b.Property("GameInstanceId") + .HasColumnType("uuid"); + + b.Property("MiniGameId") + .HasColumnType("uuid"); + + b.Property("Rank") + .HasColumnType("integer"); + + b.Property("Score") + .HasColumnType("integer"); + + b.Property("Timestamp") + .HasColumnType("timestamp with time zone"); + + b.HasKey("Id"); + + b.HasIndex("CharacterId"); + + b.HasIndex("MiniGameId"); + + b.ToTable("MiniGameRankingEntry", "data"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.MiniGameReward", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ItemRewardId") + .HasColumnType("uuid"); + + b.Property("MiniGameDefinitionId") + .HasColumnType("uuid"); + + b.Property("Rank") + .HasColumnType("integer"); + + b.Property("RequiredKillId") + .HasColumnType("uuid"); + + b.Property("RequiredSuccess") + .HasColumnType("integer"); + + b.Property("RewardAmount") + .HasColumnType("integer"); + + b.Property("RewardType") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("ItemRewardId"); + + b.HasIndex("MiniGameDefinitionId"); + + b.HasIndex("RequiredKillId"); + + b.ToTable("MiniGameReward", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.MiniGameSpawnWave", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Description") + .HasColumnType("text"); + + b.Property("EndTime") + .HasColumnType("interval"); + + b.Property("Message") + .HasColumnType("text"); + + b.Property("MiniGameDefinitionId") + .HasColumnType("uuid"); + + b.Property("StartTime") + .HasColumnType("interval"); + + b.Property("WaveNumber") + .HasColumnType("smallint"); + + b.HasKey("Id"); + + b.HasIndex("MiniGameDefinitionId"); + + b.ToTable("MiniGameSpawnWave", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.MiniGameTerrainChange", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("EndX") + .HasColumnType("smallint"); + + b.Property("EndY") + .HasColumnType("smallint"); + + b.Property("IsClientUpdateRequired") + .HasColumnType("boolean"); + + b.Property("MiniGameChangeEventId") + .HasColumnType("uuid"); + + b.Property("SetTerrainAttribute") + .HasColumnType("boolean"); + + b.Property("StartX") + .HasColumnType("smallint"); + + b.Property("StartY") + .HasColumnType("smallint"); + + b.Property("TerrainAttribute") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("MiniGameChangeEventId"); + + b.ToTable("MiniGameTerrainChange", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.MonsterAttribute", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("AttributeDefinitionId") + .HasColumnType("uuid"); + + b.Property("MonsterDefinitionId") + .HasColumnType("uuid"); + + b.Property("Value") + .HasColumnType("real"); + + b.HasKey("Id"); + + b.HasIndex("AttributeDefinitionId"); + + b.HasIndex("MonsterDefinitionId"); + + b.ToTable("MonsterAttribute", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.MonsterDefinition", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("AttackDelay") + .HasColumnType("interval"); + + b.Property("AttackRange") + .HasColumnType("smallint"); + + b.Property("AttackSkillId") + .HasColumnType("uuid"); + + b.Property("Attribute") + .HasColumnType("smallint"); + + b.Property("Designation") + .IsRequired() + .HasColumnType("text"); + + b.Property("GameConfigurationId") + .HasColumnType("uuid"); + + b.Property("IntelligenceTypeName") + .HasColumnType("text"); + + b.Property("MerchantStoreId") + .HasColumnType("uuid"); + + b.Property("MoveDelay") + .HasColumnType("interval"); + + b.Property("MoveRange") + .HasColumnType("smallint"); + + b.Property("NpcWindow") + .HasColumnType("integer"); + + b.Property("Number") + .HasColumnType("smallint"); + + b.Property("NumberOfMaximumItemDrops") + .HasColumnType("integer"); + + b.Property("ObjectKind") + .HasColumnType("integer"); + + b.Property("RespawnDelay") + .HasColumnType("interval"); + + b.Property("ViewRange") + .HasColumnType("smallint"); + + b.HasKey("Id"); + + b.HasIndex("AttackSkillId"); + + b.HasIndex("GameConfigurationId"); + + b.HasIndex("MerchantStoreId") + .IsUnique(); + + b.ToTable("MonsterDefinition", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.MonsterDefinitionDropItemGroup", b => + { + b.Property("MonsterDefinitionId") + .HasColumnType("uuid"); + + b.Property("DropItemGroupId") + .HasColumnType("uuid"); + + b.HasKey("MonsterDefinitionId", "DropItemGroupId"); + + b.HasIndex("DropItemGroupId"); + + b.ToTable("MonsterDefinitionDropItemGroup", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.MonsterSpawnArea", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Direction") + .HasColumnType("integer"); + + b.Property("GameMapId") + .HasColumnType("uuid"); + + b.Property("MaximumHealthOverride") + .HasColumnType("integer"); + + b.Property("MonsterDefinitionId") + .HasColumnType("uuid"); + + b.Property("Quantity") + .HasColumnType("smallint"); + + b.Property("SpawnTrigger") + .HasColumnType("integer"); + + b.Property("WaveNumber") + .HasColumnType("smallint"); + + b.Property("X1") + .HasColumnType("smallint"); + + b.Property("X2") + .HasColumnType("smallint"); + + b.Property("Y1") + .HasColumnType("smallint"); + + b.Property("Y2") + .HasColumnType("smallint"); + + b.HasKey("Id"); + + b.HasIndex("GameMapId"); + + b.HasIndex("MonsterDefinitionId"); + + b.ToTable("MonsterSpawnArea", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.PlugInConfiguration", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CustomConfiguration") + .HasColumnType("text"); + + b.Property("CustomPlugInSource") + .HasColumnType("text"); + + b.Property("ExternalAssemblyName") + .HasColumnType("text"); + + b.Property("GameConfigurationId") + .HasColumnType("uuid"); + + b.Property("IsActive") + .HasColumnType("boolean"); + + b.Property("TypeId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("GameConfigurationId"); + + b.ToTable("PlugInConfiguration", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.PowerUpDefinition", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("BoostId") + .HasColumnType("uuid"); + + b.Property("GameMapDefinitionId") + .HasColumnType("uuid"); + + b.Property("MagicEffectDefinitionId") + .HasColumnType("uuid"); + + b.Property("TargetAttributeId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("BoostId") + .IsUnique(); + + b.HasIndex("GameMapDefinitionId"); + + b.HasIndex("MagicEffectDefinitionId"); + + b.HasIndex("TargetAttributeId"); + + b.ToTable("PowerUpDefinition", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.PowerUpDefinitionValue", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("AggregateType") + .HasColumnType("integer"); + + b.Property("Value") + .HasColumnType("real"); + + b.HasKey("Id"); + + b.ToTable("PowerUpDefinitionValue", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.QuestDefinition", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Group") + .HasColumnType("smallint"); + + b.Property("MaximumCharacterLevel") + .HasColumnType("integer"); + + b.Property("MinimumCharacterLevel") + .HasColumnType("integer"); + + b.Property("MonsterDefinitionId") + .HasColumnType("uuid"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("Number") + .HasColumnType("smallint"); + + b.Property("QualifiedCharacterId") + .HasColumnType("uuid"); + + b.Property("QuestGiverId") + .HasColumnType("uuid"); + + b.Property("RefuseNumber") + .HasColumnType("smallint"); + + b.Property("Repeatable") + .HasColumnType("boolean"); + + b.Property("RequiredStartMoney") + .HasColumnType("integer"); + + b.Property("RequiresClientAction") + .HasColumnType("boolean"); + + b.Property("StartingNumber") + .HasColumnType("smallint"); + + b.HasKey("Id"); + + b.HasIndex("MonsterDefinitionId"); + + b.HasIndex("QualifiedCharacterId"); + + b.HasIndex("QuestGiverId"); + + b.ToTable("QuestDefinition", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.QuestItemRequirement", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("DropItemGroupId") + .HasColumnType("uuid"); + + b.Property("ItemId") + .HasColumnType("uuid"); + + b.Property("MinimumNumber") + .HasColumnType("integer"); + + b.Property("QuestDefinitionId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("DropItemGroupId"); + + b.HasIndex("ItemId"); + + b.HasIndex("QuestDefinitionId"); + + b.ToTable("QuestItemRequirement", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.QuestMonsterKillRequirement", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("MinimumNumber") + .HasColumnType("integer"); + + b.Property("MonsterId") + .HasColumnType("uuid"); + + b.Property("QuestDefinitionId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("MonsterId"); + + b.HasIndex("QuestDefinitionId"); + + b.ToTable("QuestMonsterKillRequirement", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.QuestMonsterKillRequirementState", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CharacterQuestStateId") + .HasColumnType("uuid"); + + b.Property("KillCount") + .HasColumnType("integer"); + + b.Property("RequirementId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("CharacterQuestStateId"); + + b.HasIndex("RequirementId"); + + b.ToTable("QuestMonsterKillRequirementState", "data"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.QuestReward", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("AttributeRewardId") + .HasColumnType("uuid"); + + b.Property("ItemRewardId") + .HasColumnType("uuid"); + + b.Property("QuestDefinitionId") + .HasColumnType("uuid"); + + b.Property("RewardType") + .HasColumnType("integer"); + + b.Property("SkillRewardId") + .HasColumnType("uuid"); + + b.Property("Value") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("AttributeRewardId"); + + b.HasIndex("ItemRewardId") + .IsUnique(); + + b.HasIndex("QuestDefinitionId"); + + b.HasIndex("SkillRewardId"); + + b.ToTable("QuestReward", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.Rectangle", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("X1") + .HasColumnType("smallint"); + + b.Property("X2") + .HasColumnType("smallint"); + + b.Property("Y1") + .HasColumnType("smallint"); + + b.Property("Y2") + .HasColumnType("smallint"); + + b.HasKey("Id"); + + b.ToTable("Rectangle", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.SimpleCraftingSettings", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("MaximumSuccessPercent") + .HasColumnType("smallint"); + + b.Property("Money") + .HasColumnType("integer"); + + b.Property("MoneyPerFinalSuccessPercentage") + .HasColumnType("integer"); + + b.Property("MultipleAllowed") + .HasColumnType("boolean"); + + b.Property("NpcPriceDivisor") + .HasColumnType("integer"); + + b.Property("ResultItemExcellentOptionChance") + .HasColumnType("smallint"); + + b.Property("ResultItemLuckOptionChance") + .HasColumnType("smallint"); + + b.Property("ResultItemMaxExcOptionCount") + .HasColumnType("smallint"); + + b.Property("ResultItemSelect") + .HasColumnType("integer"); + + b.Property("ResultItemSkillChance") + .HasColumnType("smallint"); + + b.Property("SuccessPercent") + .HasColumnType("smallint"); + + b.Property("SuccessPercentageAdditionForAncientItem") + .HasColumnType("integer"); + + b.Property("SuccessPercentageAdditionForExcellentItem") + .HasColumnType("integer"); + + b.Property("SuccessPercentageAdditionForGuardianItem") + .HasColumnType("integer"); + + b.Property("SuccessPercentageAdditionForLuck") + .HasColumnType("integer"); + + b.Property("SuccessPercentageAdditionForSocketItem") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.ToTable("SimpleCraftingSettings", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.Skill", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("AreaSkillSettingsId") + .HasColumnType("uuid"); + + b.Property("AttackDamage") + .HasColumnType("integer"); + + b.Property("DamageType") + .HasColumnType("integer"); + + b.Property("ElementalModifierTargetId") + .HasColumnType("uuid"); + + b.Property("GameConfigurationId") + .HasColumnType("uuid"); + + b.Property("ImplicitTargetRange") + .HasColumnType("smallint"); + + b.Property("MagicEffectDefId") + .HasColumnType("uuid"); + + b.Property("MasterDefinitionId") + .HasColumnType("uuid"); + + b.Property("MovesTarget") + .HasColumnType("boolean"); + + b.Property("MovesToTarget") + .HasColumnType("boolean"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("Number") + .HasColumnType("smallint"); + + b.Property("Range") + .HasColumnType("smallint"); + + b.Property("SkillType") + .HasColumnType("integer"); + + b.Property("Target") + .HasColumnType("integer"); + + b.Property("TargetRestriction") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("AreaSkillSettingsId") + .IsUnique(); + + b.HasIndex("ElementalModifierTargetId"); + + b.HasIndex("GameConfigurationId"); + + b.HasIndex("MagicEffectDefId"); + + b.HasIndex("MasterDefinitionId") + .IsUnique(); + + b.ToTable("Skill", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.SkillCharacterClass", b => + { + b.Property("SkillId") + .HasColumnType("uuid"); + + b.Property("CharacterClassId") + .HasColumnType("uuid"); + + b.HasKey("SkillId", "CharacterClassId"); + + b.HasIndex("CharacterClassId"); + + b.ToTable("SkillCharacterClass", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.SkillComboDefinition", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("MaximumCompletionTime") + .HasColumnType("interval"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.ToTable("SkillComboDefinition", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.SkillComboStep", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("IsFinalStep") + .HasColumnType("boolean"); + + b.Property("Order") + .HasColumnType("integer"); + + b.Property("SkillComboDefinitionId") + .HasColumnType("uuid"); + + b.Property("SkillId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("SkillComboDefinitionId"); + + b.HasIndex("SkillId"); + + b.ToTable("SkillComboStep", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.SkillEntry", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CharacterId") + .HasColumnType("uuid"); + + b.Property("Level") + .HasColumnType("integer"); + + b.Property("SkillId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("CharacterId"); + + b.HasIndex("SkillId"); + + b.ToTable("SkillEntry", "data"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.StatAttribute", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("AccountId") + .HasColumnType("uuid"); + + b.Property("CharacterId") + .HasColumnType("uuid"); + + b.Property("DefinitionId") + .HasColumnType("uuid"); + + b.Property("Value") + .HasColumnType("real"); + + b.HasKey("Id"); + + b.HasIndex("AccountId"); + + b.HasIndex("CharacterId"); + + b.HasIndex("DefinitionId"); + + b.ToTable("StatAttribute", "data"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.StatAttributeDefinition", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("AttributeId") + .HasColumnType("uuid"); + + b.Property("BaseValue") + .HasColumnType("real"); + + b.Property("CharacterClassId") + .HasColumnType("uuid"); + + b.Property("IncreasableByPlayer") + .HasColumnType("boolean"); + + b.HasKey("Id"); + + b.HasIndex("AttributeId"); + + b.HasIndex("CharacterClassId"); + + b.ToTable("StatAttributeDefinition", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.SystemConfiguration", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("AutoStart") + .HasColumnType("boolean"); + + b.Property("AutoUpdateSchema") + .HasColumnType("boolean"); + + b.Property("IpResolver") + .HasColumnType("integer"); + + b.Property("IpResolverParameter") + .HasColumnType("text"); + + b.Property("ReadConsoleInput") + .HasColumnType("boolean"); + + b.HasKey("Id"); + + b.ToTable("SystemConfiguration", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.WarpInfo", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Costs") + .HasColumnType("integer"); + + b.Property("GameConfigurationId") + .HasColumnType("uuid"); + + b.Property("GateId") + .HasColumnType("uuid"); + + b.Property("Index") + .HasColumnType("integer"); + + b.Property("LevelRequirement") + .HasColumnType("integer"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("GameConfigurationId"); + + b.HasIndex("GateId"); + + b.ToTable("WarpInfo", "config"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.Account", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemStorage", "RawVault") + .WithOne() + .HasForeignKey("MUnique.OpenMU.Persistence.EntityFramework.Model.Account", "VaultId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("RawVault"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.AccountCharacterClass", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.Account", "Account") + .WithMany("JoinedUnlockedCharacterClasses") + .HasForeignKey("AccountId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.CharacterClass", "CharacterClass") + .WithMany() + .HasForeignKey("CharacterClassId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Account"); + + b.Navigation("CharacterClass"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.AppearanceData", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.CharacterClass", "RawCharacterClass") + .WithMany() + .HasForeignKey("CharacterClassId"); + + b.Navigation("RawCharacterClass"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.AttributeDefinition", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.GameConfiguration", null) + .WithMany("RawAttributes") + .HasForeignKey("GameConfigurationId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.AttributeRelationship", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.CharacterClass", null) + .WithMany("RawAttributeCombinations") + .HasForeignKey("CharacterClassId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.AttributeDefinition", "RawInputAttribute") + .WithMany() + .HasForeignKey("InputAttributeId"); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.AttributeDefinition", "RawOperandAttribute") + .WithMany() + .HasForeignKey("OperandAttributeId"); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.PowerUpDefinitionValue", null) + .WithMany("RawRelatedValues") + .HasForeignKey("PowerUpDefinitionValueId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.Skill", null) + .WithMany("RawAttributeRelationships") + .HasForeignKey("SkillId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.AttributeDefinition", "RawTargetAttribute") + .WithMany() + .HasForeignKey("TargetAttributeId"); + + b.Navigation("RawInputAttribute"); + + b.Navigation("RawOperandAttribute"); + + b.Navigation("RawTargetAttribute"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.AttributeRequirement", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.AttributeDefinition", "RawAttribute") + .WithMany() + .HasForeignKey("AttributeId"); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.GameMapDefinition", null) + .WithMany("RawMapRequirements") + .HasForeignKey("GameMapDefinitionId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemDefinition", null) + .WithMany("RawRequirements") + .HasForeignKey("ItemDefinitionId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.Skill", null) + .WithMany("RawConsumeRequirements") + .HasForeignKey("SkillId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.Skill", null) + .WithMany("RawRequirements") + .HasForeignKey("SkillId1") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("RawAttribute"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.BattleZoneDefinition", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.Rectangle", "RawGround") + .WithOne() + .HasForeignKey("MUnique.OpenMU.Persistence.EntityFramework.Model.BattleZoneDefinition", "GroundId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.Rectangle", "RawLeftGoal") + .WithOne() + .HasForeignKey("MUnique.OpenMU.Persistence.EntityFramework.Model.BattleZoneDefinition", "LeftGoalId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.Rectangle", "RawRightGoal") + .WithOne() + .HasForeignKey("MUnique.OpenMU.Persistence.EntityFramework.Model.BattleZoneDefinition", "RightGoalId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("RawGround"); + + b.Navigation("RawLeftGoal"); + + b.Navigation("RawRightGoal"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.Character", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.Account", null) + .WithMany("RawCharacters") + .HasForeignKey("AccountId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.CharacterClass", "RawCharacterClass") + .WithMany() + .HasForeignKey("CharacterClassId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.GameMapDefinition", "RawCurrentMap") + .WithMany() + .HasForeignKey("CurrentMapId"); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemStorage", "RawInventory") + .WithOne() + .HasForeignKey("MUnique.OpenMU.Persistence.EntityFramework.Model.Character", "InventoryId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("RawCharacterClass"); + + b.Navigation("RawCurrentMap"); + + b.Navigation("RawInventory"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.CharacterClass", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.SkillComboDefinition", "RawComboDefinition") + .WithOne() + .HasForeignKey("MUnique.OpenMU.Persistence.EntityFramework.Model.CharacterClass", "ComboDefinitionId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.GameConfiguration", null) + .WithMany("RawCharacterClasses") + .HasForeignKey("GameConfigurationId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.GameMapDefinition", "RawHomeMap") + .WithMany() + .HasForeignKey("HomeMapId"); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.CharacterClass", "RawNextGenerationClass") + .WithMany() + .HasForeignKey("NextGenerationClassId"); + + b.Navigation("RawComboDefinition"); + + b.Navigation("RawHomeMap"); + + b.Navigation("RawNextGenerationClass"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.CharacterDropItemGroup", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.Character", "Character") + .WithMany("JoinedDropItemGroups") + .HasForeignKey("CharacterId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.DropItemGroup", "DropItemGroup") + .WithMany() + .HasForeignKey("DropItemGroupId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Character"); + + b.Navigation("DropItemGroup"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.CharacterQuestState", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.QuestDefinition", "RawActiveQuest") + .WithMany() + .HasForeignKey("ActiveQuestId"); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.Character", null) + .WithMany("RawQuestStates") + .HasForeignKey("CharacterId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.QuestDefinition", "RawLastFinishedQuest") + .WithMany() + .HasForeignKey("LastFinishedQuestId"); + + b.Navigation("RawActiveQuest"); + + b.Navigation("RawLastFinishedQuest"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ChatServerEndpoint", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ChatServerDefinition", null) + .WithMany("RawEndpoints") + .HasForeignKey("ChatServerDefinitionId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.GameClientDefinition", "RawClient") + .WithMany() + .HasForeignKey("ClientId"); + + b.Navigation("RawClient"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.CombinationBonusRequirement", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemOptionCombinationBonus", null) + .WithMany("RawRequirements") + .HasForeignKey("ItemOptionCombinationBonusId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemOptionType", "RawOptionType") + .WithMany() + .HasForeignKey("OptionTypeId"); + + b.Navigation("RawOptionType"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ConnectServerDefinition", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.GameClientDefinition", "RawClient") + .WithMany() + .HasForeignKey("ClientId"); + + b.Navigation("RawClient"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ConstValueAttribute", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.CharacterClass", "CharacterClass") + .WithMany("RawBaseAttributeValues") + .HasForeignKey("CharacterClassId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.AttributeDefinition", "RawDefinition") + .WithMany() + .HasForeignKey("DefinitionId"); + + b.Navigation("CharacterClass"); + + b.Navigation("RawDefinition"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.DropItemGroup", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.GameConfiguration", null) + .WithMany("RawDropItemGroups") + .HasForeignKey("GameConfigurationId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.MonsterDefinition", "RawMonster") + .WithMany() + .HasForeignKey("MonsterId"); + + b.Navigation("RawMonster"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.DropItemGroupItemDefinition", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.DropItemGroup", "DropItemGroup") + .WithMany("JoinedPossibleItems") + .HasForeignKey("DropItemGroupId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemDefinition", "ItemDefinition") + .WithMany() + .HasForeignKey("ItemDefinitionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("DropItemGroup"); + + b.Navigation("ItemDefinition"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.DuelArea", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.DuelConfiguration", null) + .WithMany("RawDuelAreas") + .HasForeignKey("DuelConfigurationId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ExitGate", "RawFirstPlayerGate") + .WithMany() + .HasForeignKey("FirstPlayerGateId"); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ExitGate", "RawSecondPlayerGate") + .WithMany() + .HasForeignKey("SecondPlayerGateId"); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ExitGate", "RawSpectatorsGate") + .WithMany() + .HasForeignKey("SpectatorsGateId"); + + b.Navigation("RawFirstPlayerGate"); + + b.Navigation("RawSecondPlayerGate"); + + b.Navigation("RawSpectatorsGate"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.DuelConfiguration", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ExitGate", "RawExit") + .WithMany() + .HasForeignKey("ExitId"); + + b.Navigation("RawExit"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.EnterGate", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.GameMapDefinition", null) + .WithMany("RawEnterGates") + .HasForeignKey("GameMapDefinitionId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ExitGate", "RawTargetGate") + .WithMany() + .HasForeignKey("TargetGateId"); + + b.Navigation("RawTargetGate"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ExitGate", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.GameMapDefinition", "RawMap") + .WithMany("RawExitGates") + .HasForeignKey("MapId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("RawMap"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.GameConfiguration", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.DuelConfiguration", "RawDuelConfiguration") + .WithOne() + .HasForeignKey("MUnique.OpenMU.Persistence.EntityFramework.Model.GameConfiguration", "DuelConfigurationId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("RawDuelConfiguration"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.GameMapDefinition", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.BattleZoneDefinition", "RawBattleZone") + .WithOne() + .HasForeignKey("MUnique.OpenMU.Persistence.EntityFramework.Model.GameMapDefinition", "BattleZoneId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.GameConfiguration", null) + .WithMany("RawMaps") + .HasForeignKey("GameConfigurationId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.GameMapDefinition", "RawSafezoneMap") + .WithMany() + .HasForeignKey("SafezoneMapId"); + + b.Navigation("RawBattleZone"); + + b.Navigation("RawSafezoneMap"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.GameMapDefinitionDropItemGroup", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.DropItemGroup", "DropItemGroup") + .WithMany() + .HasForeignKey("DropItemGroupId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.GameMapDefinition", "GameMapDefinition") + .WithMany("JoinedDropItemGroups") + .HasForeignKey("GameMapDefinitionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("DropItemGroup"); + + b.Navigation("GameMapDefinition"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.GameServerConfigurationGameMapDefinition", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.GameMapDefinition", "GameMapDefinition") + .WithMany() + .HasForeignKey("GameMapDefinitionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.GameServerConfiguration", "GameServerConfiguration") + .WithMany("JoinedMaps") + .HasForeignKey("GameServerConfigurationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("GameMapDefinition"); + + b.Navigation("GameServerConfiguration"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.GameServerDefinition", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.GameConfiguration", "RawGameConfiguration") + .WithMany() + .HasForeignKey("GameConfigurationId"); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.GameServerConfiguration", "RawServerConfiguration") + .WithMany() + .HasForeignKey("ServerConfigurationId"); + + b.Navigation("RawGameConfiguration"); + + b.Navigation("RawServerConfiguration"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.GameServerEndpoint", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.GameClientDefinition", "RawClient") + .WithMany() + .HasForeignKey("ClientId"); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.GameServerDefinition", null) + .WithMany("RawEndpoints") + .HasForeignKey("GameServerDefinitionId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("RawClient"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.Guild", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.Guild", "RawAllianceGuild") + .WithMany() + .HasForeignKey("AllianceGuildId"); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.Guild", "RawHostility") + .WithMany() + .HasForeignKey("HostilityId"); + + b.Navigation("RawAllianceGuild"); + + b.Navigation("RawHostility"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.GuildMember", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.Guild", null) + .WithMany("RawMembers") + .HasForeignKey("GuildId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.Character", "Character") + .WithMany() + .HasForeignKey("Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Character"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.IncreasableItemOption", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemOptionDefinition", null) + .WithMany("RawPossibleOptions") + .HasForeignKey("ItemOptionDefinitionId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemOptionType", "RawOptionType") + .WithMany() + .HasForeignKey("OptionTypeId"); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.PowerUpDefinition", "RawPowerUpDefinition") + .WithOne() + .HasForeignKey("MUnique.OpenMU.Persistence.EntityFramework.Model.IncreasableItemOption", "PowerUpDefinitionId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("RawOptionType"); + + b.Navigation("RawPowerUpDefinition"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.Item", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemDefinition", "RawDefinition") + .WithMany() + .HasForeignKey("DefinitionId"); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemStorage", "RawItemStorage") + .WithMany("RawItems") + .HasForeignKey("ItemStorageId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("RawDefinition"); + + b.Navigation("RawItemStorage"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemAppearance", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.AppearanceData", null) + .WithMany("RawEquippedItems") + .HasForeignKey("AppearanceDataId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemDefinition", "RawDefinition") + .WithMany() + .HasForeignKey("DefinitionId"); + + b.Navigation("RawDefinition"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemAppearanceItemOptionType", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemAppearance", "ItemAppearance") + .WithMany("JoinedVisibleOptions") + .HasForeignKey("ItemAppearanceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemOptionType", "ItemOptionType") + .WithMany() + .HasForeignKey("ItemOptionTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ItemAppearance"); + + b.Navigation("ItemOptionType"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemBasePowerUpDefinition", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemLevelBonusTable", "RawBonusPerLevelTable") + .WithMany() + .HasForeignKey("BonusPerLevelTableId"); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemDefinition", null) + .WithMany("RawBasePowerUpAttributes") + .HasForeignKey("ItemDefinitionId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.AttributeDefinition", "RawTargetAttribute") + .WithMany() + .HasForeignKey("TargetAttributeId"); + + b.Navigation("RawBonusPerLevelTable"); + + b.Navigation("RawTargetAttribute"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemCrafting", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.MonsterDefinition", null) + .WithMany("RawItemCraftings") + .HasForeignKey("MonsterDefinitionId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.SimpleCraftingSettings", "RawSimpleCraftingSettings") + .WithOne() + .HasForeignKey("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemCrafting", "SimpleCraftingSettingsId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("RawSimpleCraftingSettings"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemCraftingRequiredItem", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.SimpleCraftingSettings", null) + .WithMany("RawRequiredItems") + .HasForeignKey("SimpleCraftingSettingsId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemCraftingRequiredItemItemDefinition", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemCraftingRequiredItem", "ItemCraftingRequiredItem") + .WithMany("JoinedPossibleItems") + .HasForeignKey("ItemCraftingRequiredItemId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemDefinition", "ItemDefinition") + .WithMany() + .HasForeignKey("ItemDefinitionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ItemCraftingRequiredItem"); + + b.Navigation("ItemDefinition"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemCraftingRequiredItemItemOptionType", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemCraftingRequiredItem", "ItemCraftingRequiredItem") + .WithMany("JoinedRequiredItemOptions") + .HasForeignKey("ItemCraftingRequiredItemId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemOptionType", "ItemOptionType") + .WithMany() + .HasForeignKey("ItemOptionTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ItemCraftingRequiredItem"); + + b.Navigation("ItemOptionType"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemCraftingResultItem", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemDefinition", "RawItemDefinition") + .WithMany() + .HasForeignKey("ItemDefinitionId"); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.SimpleCraftingSettings", null) + .WithMany("RawResultItems") + .HasForeignKey("SimpleCraftingSettingsId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("RawItemDefinition"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemDefinition", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.MagicEffectDefinition", "RawConsumeEffect") + .WithMany() + .HasForeignKey("ConsumeEffectId"); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.GameConfiguration", null) + .WithMany("RawItems") + .HasForeignKey("GameConfigurationId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemSlotType", "RawItemSlot") + .WithMany() + .HasForeignKey("ItemSlotId"); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.Skill", "RawSkill") + .WithMany() + .HasForeignKey("SkillId"); + + b.Navigation("RawConsumeEffect"); + + b.Navigation("RawItemSlot"); + + b.Navigation("RawSkill"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemDefinitionCharacterClass", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.CharacterClass", "CharacterClass") + .WithMany() + .HasForeignKey("CharacterClassId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemDefinition", "ItemDefinition") + .WithMany("JoinedQualifiedCharacters") + .HasForeignKey("ItemDefinitionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CharacterClass"); + + b.Navigation("ItemDefinition"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemDefinitionItemOptionDefinition", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemDefinition", "ItemDefinition") + .WithMany("JoinedPossibleItemOptions") + .HasForeignKey("ItemDefinitionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemOptionDefinition", "ItemOptionDefinition") + .WithMany() + .HasForeignKey("ItemOptionDefinitionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ItemDefinition"); + + b.Navigation("ItemOptionDefinition"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemDefinitionItemSetGroup", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemDefinition", "ItemDefinition") + .WithMany("JoinedPossibleItemSetGroups") + .HasForeignKey("ItemDefinitionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemSetGroup", "ItemSetGroup") + .WithMany() + .HasForeignKey("ItemSetGroupId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ItemDefinition"); + + b.Navigation("ItemSetGroup"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemDropItemGroup", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemDefinition", null) + .WithMany("RawDropItems") + .HasForeignKey("ItemDefinitionId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.MonsterDefinition", "RawMonster") + .WithMany() + .HasForeignKey("MonsterId"); + + b.Navigation("RawMonster"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemDropItemGroupItemDefinition", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemDefinition", "ItemDefinition") + .WithMany() + .HasForeignKey("ItemDefinitionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemDropItemGroup", "ItemDropItemGroup") + .WithMany("JoinedPossibleItems") + .HasForeignKey("ItemDropItemGroupId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ItemDefinition"); + + b.Navigation("ItemDropItemGroup"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemItemOfItemSet", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.Item", "Item") + .WithMany("JoinedItemSetGroups") + .HasForeignKey("ItemId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemOfItemSet", "ItemOfItemSet") + .WithMany() + .HasForeignKey("ItemOfItemSetId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Item"); + + b.Navigation("ItemOfItemSet"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemLevelBonusTable", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.GameConfiguration", null) + .WithMany("RawItemLevelBonusTables") + .HasForeignKey("GameConfigurationId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemOfItemSet", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.IncreasableItemOption", "RawBonusOption") + .WithMany() + .HasForeignKey("BonusOptionId"); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemDefinition", "RawItemDefinition") + .WithMany() + .HasForeignKey("ItemDefinitionId"); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemSetGroup", "RawItemSetGroup") + .WithMany("RawItems") + .HasForeignKey("ItemSetGroupId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("RawBonusOption"); + + b.Navigation("RawItemDefinition"); + + b.Navigation("RawItemSetGroup"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemOption", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemOptionType", "RawOptionType") + .WithMany() + .HasForeignKey("OptionTypeId"); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.PowerUpDefinition", "RawPowerUpDefinition") + .WithOne() + .HasForeignKey("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemOption", "PowerUpDefinitionId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("RawOptionType"); + + b.Navigation("RawPowerUpDefinition"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemOptionCombinationBonus", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.PowerUpDefinition", "RawBonus") + .WithOne() + .HasForeignKey("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemOptionCombinationBonus", "BonusId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.GameConfiguration", null) + .WithMany("RawItemOptionCombinationBonuses") + .HasForeignKey("GameConfigurationId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("RawBonus"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemOptionDefinition", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.GameConfiguration", null) + .WithMany("RawItemOptions") + .HasForeignKey("GameConfigurationId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemOptionLink", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.Item", null) + .WithMany("RawItemOptions") + .HasForeignKey("ItemId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.IncreasableItemOption", "RawItemOption") + .WithMany() + .HasForeignKey("ItemOptionId"); + + b.Navigation("RawItemOption"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemOptionOfLevel", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.IncreasableItemOption", null) + .WithMany("RawLevelDependentOptions") + .HasForeignKey("IncreasableItemOptionId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.PowerUpDefinition", "RawPowerUpDefinition") + .WithOne() + .HasForeignKey("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemOptionOfLevel", "PowerUpDefinitionId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("RawPowerUpDefinition"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemOptionType", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.GameConfiguration", null) + .WithMany("RawItemOptionTypes") + .HasForeignKey("GameConfigurationId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemSetGroup", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.GameConfiguration", null) + .WithMany("RawItemSetGroups") + .HasForeignKey("GameConfigurationId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemOptionDefinition", "RawOptions") + .WithMany() + .HasForeignKey("OptionsId"); + + b.Navigation("RawOptions"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemSlotType", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.GameConfiguration", null) + .WithMany("RawItemSlotTypes") + .HasForeignKey("GameConfigurationId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.JewelMix", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.GameConfiguration", null) + .WithMany("RawJewelMixes") + .HasForeignKey("GameConfigurationId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemDefinition", "RawMixedJewel") + .WithMany() + .HasForeignKey("MixedJewelId"); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemDefinition", "RawSingleJewel") + .WithMany() + .HasForeignKey("SingleJewelId"); + + b.Navigation("RawMixedJewel"); + + b.Navigation("RawSingleJewel"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.LetterBody", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.LetterHeader", "RawHeader") + .WithMany() + .HasForeignKey("HeaderId"); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.AppearanceData", "RawSenderAppearance") + .WithOne() + .HasForeignKey("MUnique.OpenMU.Persistence.EntityFramework.Model.LetterBody", "SenderAppearanceId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("RawHeader"); + + b.Navigation("RawSenderAppearance"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.LetterHeader", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.Character", "Receiver") + .WithMany("RawLetters") + .HasForeignKey("ReceiverId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Receiver"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.LevelBonus", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemLevelBonusTable", null) + .WithMany("RawBonusPerLevel") + .HasForeignKey("ItemLevelBonusTableId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.MagicEffectDefinition", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.PowerUpDefinitionValue", "RawDuration") + .WithOne() + .HasForeignKey("MUnique.OpenMU.Persistence.EntityFramework.Model.MagicEffectDefinition", "DurationId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.GameConfiguration", null) + .WithMany("RawMagicEffects") + .HasForeignKey("GameConfigurationId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("RawDuration"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.MasterSkillDefinition", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.Skill", "RawReplacedSkill") + .WithMany() + .HasForeignKey("ReplacedSkillId"); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.MasterSkillRoot", "RawRoot") + .WithMany() + .HasForeignKey("RootId"); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.AttributeDefinition", "RawTargetAttribute") + .WithMany() + .HasForeignKey("TargetAttributeId"); + + b.Navigation("RawReplacedSkill"); + + b.Navigation("RawRoot"); + + b.Navigation("RawTargetAttribute"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.MasterSkillDefinitionSkill", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.MasterSkillDefinition", "MasterSkillDefinition") + .WithMany("JoinedRequiredMasterSkills") + .HasForeignKey("MasterSkillDefinitionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.Skill", "Skill") + .WithMany() + .HasForeignKey("SkillId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("MasterSkillDefinition"); + + b.Navigation("Skill"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.MasterSkillRoot", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.GameConfiguration", null) + .WithMany("RawMasterSkillRoots") + .HasForeignKey("GameConfigurationId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.MiniGameChangeEvent", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.MiniGameDefinition", null) + .WithMany("RawChangeEvents") + .HasForeignKey("MiniGameDefinitionId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.MonsterSpawnArea", "RawSpawnArea") + .WithOne() + .HasForeignKey("MUnique.OpenMU.Persistence.EntityFramework.Model.MiniGameChangeEvent", "SpawnAreaId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.MonsterDefinition", "RawTargetDefinition") + .WithMany() + .HasForeignKey("TargetDefinitionId"); + + b.Navigation("RawSpawnArea"); + + b.Navigation("RawTargetDefinition"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.MiniGameDefinition", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ExitGate", "RawEntrance") + .WithMany() + .HasForeignKey("EntranceId"); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.GameConfiguration", null) + .WithMany("RawMiniGameDefinitions") + .HasForeignKey("GameConfigurationId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemDefinition", "RawTicketItem") + .WithMany() + .HasForeignKey("TicketItemId"); + + b.Navigation("RawEntrance"); + + b.Navigation("RawTicketItem"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.MiniGameRankingEntry", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.Character", "RawCharacter") + .WithMany() + .HasForeignKey("CharacterId"); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.MiniGameDefinition", "RawMiniGame") + .WithMany() + .HasForeignKey("MiniGameId"); + + b.Navigation("RawCharacter"); + + b.Navigation("RawMiniGame"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.MiniGameReward", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.DropItemGroup", "RawItemReward") + .WithMany() + .HasForeignKey("ItemRewardId"); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.MiniGameDefinition", null) + .WithMany("RawRewards") + .HasForeignKey("MiniGameDefinitionId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.MonsterDefinition", "RawRequiredKill") + .WithMany() + .HasForeignKey("RequiredKillId"); + + b.Navigation("RawItemReward"); + + b.Navigation("RawRequiredKill"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.MiniGameSpawnWave", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.MiniGameDefinition", null) + .WithMany("RawSpawnWaves") + .HasForeignKey("MiniGameDefinitionId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.MiniGameTerrainChange", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.MiniGameChangeEvent", null) + .WithMany("RawTerrainChanges") + .HasForeignKey("MiniGameChangeEventId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.MonsterAttribute", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.AttributeDefinition", "RawAttributeDefinition") + .WithMany() + .HasForeignKey("AttributeDefinitionId"); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.MonsterDefinition", null) + .WithMany("RawAttributes") + .HasForeignKey("MonsterDefinitionId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("RawAttributeDefinition"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.MonsterDefinition", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.Skill", "RawAttackSkill") + .WithMany() + .HasForeignKey("AttackSkillId"); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.GameConfiguration", null) + .WithMany("RawMonsters") + .HasForeignKey("GameConfigurationId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemStorage", "RawMerchantStore") + .WithOne() + .HasForeignKey("MUnique.OpenMU.Persistence.EntityFramework.Model.MonsterDefinition", "MerchantStoreId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("RawAttackSkill"); + + b.Navigation("RawMerchantStore"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.MonsterDefinitionDropItemGroup", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.DropItemGroup", "DropItemGroup") + .WithMany() + .HasForeignKey("DropItemGroupId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.MonsterDefinition", "MonsterDefinition") + .WithMany("JoinedDropItemGroups") + .HasForeignKey("MonsterDefinitionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("DropItemGroup"); + + b.Navigation("MonsterDefinition"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.MonsterSpawnArea", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.GameMapDefinition", "RawGameMap") + .WithMany("RawMonsterSpawns") + .HasForeignKey("GameMapId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.MonsterDefinition", "RawMonsterDefinition") + .WithMany() + .HasForeignKey("MonsterDefinitionId"); + + b.Navigation("RawGameMap"); + + b.Navigation("RawMonsterDefinition"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.PlugInConfiguration", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.GameConfiguration", null) + .WithMany("RawPlugInConfigurations") + .HasForeignKey("GameConfigurationId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.PowerUpDefinition", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.PowerUpDefinitionValue", "RawBoost") + .WithOne() + .HasForeignKey("MUnique.OpenMU.Persistence.EntityFramework.Model.PowerUpDefinition", "BoostId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.GameMapDefinition", null) + .WithMany("RawCharacterPowerUpDefinitions") + .HasForeignKey("GameMapDefinitionId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.MagicEffectDefinition", null) + .WithMany("RawPowerUpDefinitions") + .HasForeignKey("MagicEffectDefinitionId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.AttributeDefinition", "RawTargetAttribute") + .WithMany() + .HasForeignKey("TargetAttributeId"); + + b.Navigation("RawBoost"); + + b.Navigation("RawTargetAttribute"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.QuestDefinition", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.MonsterDefinition", null) + .WithMany("RawQuests") + .HasForeignKey("MonsterDefinitionId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.CharacterClass", "RawQualifiedCharacter") + .WithMany() + .HasForeignKey("QualifiedCharacterId"); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.MonsterDefinition", "RawQuestGiver") + .WithMany() + .HasForeignKey("QuestGiverId"); + + b.Navigation("RawQualifiedCharacter"); + + b.Navigation("RawQuestGiver"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.QuestItemRequirement", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.DropItemGroup", "RawDropItemGroup") + .WithMany() + .HasForeignKey("DropItemGroupId"); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemDefinition", "RawItem") + .WithMany() + .HasForeignKey("ItemId"); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.QuestDefinition", null) + .WithMany("RawRequiredItems") + .HasForeignKey("QuestDefinitionId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("RawDropItemGroup"); + + b.Navigation("RawItem"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.QuestMonsterKillRequirement", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.MonsterDefinition", "RawMonster") + .WithMany() + .HasForeignKey("MonsterId"); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.QuestDefinition", null) + .WithMany("RawRequiredMonsterKills") + .HasForeignKey("QuestDefinitionId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("RawMonster"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.QuestMonsterKillRequirementState", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.CharacterQuestState", null) + .WithMany("RawRequirementStates") + .HasForeignKey("CharacterQuestStateId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.QuestMonsterKillRequirement", "RawRequirement") + .WithMany() + .HasForeignKey("RequirementId"); + + b.Navigation("RawRequirement"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.QuestReward", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.AttributeDefinition", "RawAttributeReward") + .WithMany() + .HasForeignKey("AttributeRewardId"); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.Item", "RawItemReward") + .WithOne() + .HasForeignKey("MUnique.OpenMU.Persistence.EntityFramework.Model.QuestReward", "ItemRewardId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.QuestDefinition", null) + .WithMany("RawRewards") + .HasForeignKey("QuestDefinitionId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.Skill", "RawSkillReward") + .WithMany() + .HasForeignKey("SkillRewardId"); + + b.Navigation("RawAttributeReward"); + + b.Navigation("RawItemReward"); + + b.Navigation("RawSkillReward"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.Skill", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.AreaSkillSettings", "RawAreaSkillSettings") + .WithOne() + .HasForeignKey("MUnique.OpenMU.Persistence.EntityFramework.Model.Skill", "AreaSkillSettingsId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.AttributeDefinition", "RawElementalModifierTarget") + .WithMany() + .HasForeignKey("ElementalModifierTargetId"); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.GameConfiguration", null) + .WithMany("RawSkills") + .HasForeignKey("GameConfigurationId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.MagicEffectDefinition", "RawMagicEffectDef") + .WithMany() + .HasForeignKey("MagicEffectDefId"); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.MasterSkillDefinition", "RawMasterDefinition") + .WithOne() + .HasForeignKey("MUnique.OpenMU.Persistence.EntityFramework.Model.Skill", "MasterDefinitionId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("RawAreaSkillSettings"); + + b.Navigation("RawElementalModifierTarget"); + + b.Navigation("RawMagicEffectDef"); + + b.Navigation("RawMasterDefinition"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.SkillCharacterClass", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.CharacterClass", "CharacterClass") + .WithMany() + .HasForeignKey("CharacterClassId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.Skill", "Skill") + .WithMany("JoinedQualifiedCharacters") + .HasForeignKey("SkillId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CharacterClass"); + + b.Navigation("Skill"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.SkillComboStep", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.SkillComboDefinition", null) + .WithMany("RawSteps") + .HasForeignKey("SkillComboDefinitionId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.Skill", "RawSkill") + .WithMany() + .HasForeignKey("SkillId"); + + b.Navigation("RawSkill"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.SkillEntry", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.Character", null) + .WithMany("RawLearnedSkills") + .HasForeignKey("CharacterId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.Skill", "RawSkill") + .WithMany() + .HasForeignKey("SkillId"); + + b.Navigation("RawSkill"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.StatAttribute", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.Account", null) + .WithMany("RawAttributes") + .HasForeignKey("AccountId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.Character", null) + .WithMany("RawAttributes") + .HasForeignKey("CharacterId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.AttributeDefinition", "RawDefinition") + .WithMany() + .HasForeignKey("DefinitionId"); + + b.Navigation("RawDefinition"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.StatAttributeDefinition", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.AttributeDefinition", "RawAttribute") + .WithMany() + .HasForeignKey("AttributeId"); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.CharacterClass", null) + .WithMany("RawStatAttributes") + .HasForeignKey("CharacterClassId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("RawAttribute"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.WarpInfo", b => + { + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.GameConfiguration", null) + .WithMany("RawWarpList") + .HasForeignKey("GameConfigurationId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("MUnique.OpenMU.Persistence.EntityFramework.Model.ExitGate", "RawGate") + .WithMany() + .HasForeignKey("GateId"); + + b.Navigation("RawGate"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.Account", b => + { + b.Navigation("JoinedUnlockedCharacterClasses"); + + b.Navigation("RawAttributes"); + + b.Navigation("RawCharacters"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.AppearanceData", b => + { + b.Navigation("RawEquippedItems"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.Character", b => + { + b.Navigation("JoinedDropItemGroups"); + + b.Navigation("RawAttributes"); + + b.Navigation("RawLearnedSkills"); + + b.Navigation("RawLetters"); + + b.Navigation("RawQuestStates"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.CharacterClass", b => + { + b.Navigation("RawAttributeCombinations"); + + b.Navigation("RawBaseAttributeValues"); + + b.Navigation("RawStatAttributes"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.CharacterQuestState", b => + { + b.Navigation("RawRequirementStates"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ChatServerDefinition", b => + { + b.Navigation("RawEndpoints"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.DropItemGroup", b => + { + b.Navigation("JoinedPossibleItems"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.DuelConfiguration", b => + { + b.Navigation("RawDuelAreas"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.GameConfiguration", b => + { + b.Navigation("RawAttributes"); + + b.Navigation("RawCharacterClasses"); + + b.Navigation("RawDropItemGroups"); + + b.Navigation("RawItemLevelBonusTables"); + + b.Navigation("RawItemOptionCombinationBonuses"); + + b.Navigation("RawItemOptionTypes"); + + b.Navigation("RawItemOptions"); + + b.Navigation("RawItemSetGroups"); + + b.Navigation("RawItemSlotTypes"); + + b.Navigation("RawItems"); + + b.Navigation("RawJewelMixes"); + + b.Navigation("RawMagicEffects"); + + b.Navigation("RawMaps"); + + b.Navigation("RawMasterSkillRoots"); + + b.Navigation("RawMiniGameDefinitions"); + + b.Navigation("RawMonsters"); + + b.Navigation("RawPlugInConfigurations"); + + b.Navigation("RawSkills"); + + b.Navigation("RawWarpList"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.GameMapDefinition", b => + { + b.Navigation("JoinedDropItemGroups"); + + b.Navigation("RawCharacterPowerUpDefinitions"); + + b.Navigation("RawEnterGates"); + + b.Navigation("RawExitGates"); + + b.Navigation("RawMapRequirements"); + + b.Navigation("RawMonsterSpawns"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.GameServerConfiguration", b => + { + b.Navigation("JoinedMaps"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.GameServerDefinition", b => + { + b.Navigation("RawEndpoints"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.Guild", b => + { + b.Navigation("RawMembers"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.IncreasableItemOption", b => + { + b.Navigation("RawLevelDependentOptions"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.Item", b => + { + b.Navigation("JoinedItemSetGroups"); + + b.Navigation("RawItemOptions"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemAppearance", b => + { + b.Navigation("JoinedVisibleOptions"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemCraftingRequiredItem", b => + { + b.Navigation("JoinedPossibleItems"); + + b.Navigation("JoinedRequiredItemOptions"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemDefinition", b => + { + b.Navigation("JoinedPossibleItemOptions"); + + b.Navigation("JoinedPossibleItemSetGroups"); + + b.Navigation("JoinedQualifiedCharacters"); + + b.Navigation("RawBasePowerUpAttributes"); + + b.Navigation("RawDropItems"); + + b.Navigation("RawRequirements"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemDropItemGroup", b => + { + b.Navigation("JoinedPossibleItems"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemLevelBonusTable", b => + { + b.Navigation("RawBonusPerLevel"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemOptionCombinationBonus", b => + { + b.Navigation("RawRequirements"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemOptionDefinition", b => + { + b.Navigation("RawPossibleOptions"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemSetGroup", b => + { + b.Navigation("RawItems"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.ItemStorage", b => + { + b.Navigation("RawItems"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.MagicEffectDefinition", b => + { + b.Navigation("RawPowerUpDefinitions"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.MasterSkillDefinition", b => + { + b.Navigation("JoinedRequiredMasterSkills"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.MiniGameChangeEvent", b => + { + b.Navigation("RawTerrainChanges"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.MiniGameDefinition", b => + { + b.Navigation("RawChangeEvents"); + + b.Navigation("RawRewards"); + + b.Navigation("RawSpawnWaves"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.MonsterDefinition", b => + { + b.Navigation("JoinedDropItemGroups"); + + b.Navigation("RawAttributes"); + + b.Navigation("RawItemCraftings"); + + b.Navigation("RawQuests"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.PowerUpDefinitionValue", b => + { + b.Navigation("RawRelatedValues"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.QuestDefinition", b => + { + b.Navigation("RawRequiredItems"); + + b.Navigation("RawRequiredMonsterKills"); + + b.Navigation("RawRewards"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.SimpleCraftingSettings", b => + { + b.Navigation("RawRequiredItems"); + + b.Navigation("RawResultItems"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.Skill", b => + { + b.Navigation("JoinedQualifiedCharacters"); + + b.Navigation("RawAttributeRelationships"); + + b.Navigation("RawConsumeRequirements"); + + b.Navigation("RawRequirements"); + }); + + modelBuilder.Entity("MUnique.OpenMU.Persistence.EntityFramework.Model.SkillComboDefinition", b => + { + b.Navigation("RawSteps"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/Persistence/EntityFramework/Migrations/20251019192544_AddAccountLanguage.cs b/src/Persistence/EntityFramework/Migrations/20251019192544_AddAccountLanguage.cs new file mode 100644 index 000000000..6148c6b4d --- /dev/null +++ b/src/Persistence/EntityFramework/Migrations/20251019192544_AddAccountLanguage.cs @@ -0,0 +1,32 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace MUnique.OpenMU.Persistence.EntityFramework.Migrations +{ + /// + public partial class AddAccountLanguage : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "LanguageIsoCode", + schema: "data", + table: "Account", + type: "character varying(3)", + maxLength: 3, + nullable: false, + defaultValue: "en"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "LanguageIsoCode", + schema: "data", + table: "Account"); + } + } +} diff --git a/src/Persistence/EntityFramework/Migrations/EntityDataContextModelSnapshot.cs b/src/Persistence/EntityFramework/Migrations/EntityDataContextModelSnapshot.cs index b889fdf54..ead97b236 100644 --- a/src/Persistence/EntityFramework/Migrations/EntityDataContextModelSnapshot.cs +++ b/src/Persistence/EntityFramework/Migrations/EntityDataContextModelSnapshot.cs @@ -41,6 +41,13 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("IsVaultExtended") .HasColumnType("boolean"); + b.Property("LanguageIsoCode") + .IsRequired() + .ValueGeneratedOnAdd() + .HasMaxLength(3) + .HasColumnType("character varying(3)") + .HasDefaultValue("en"); + b.Property("LoginName") .IsRequired() .HasMaxLength(10) From bdaf8a81ea2b93286a3da07117cbffbd92cb6886 Mon Sep 17 00:00:00 2001 From: sven-n Date: Sun, 19 Oct 2025 22:50:40 +0200 Subject: [PATCH 02/32] Added resource file for player messages --- src/GameLogic/MUnique.OpenMU.GameLogic.csproj | 15 ++ .../Properties/PlayerMessage.Designer.cs | 189 ++++++++++++++++++ src/GameLogic/Properties/PlayerMessage.resx | 21 ++ 3 files changed, 225 insertions(+) create mode 100644 src/GameLogic/Properties/PlayerMessage.Designer.cs create mode 100644 src/GameLogic/Properties/PlayerMessage.resx diff --git a/src/GameLogic/MUnique.OpenMU.GameLogic.csproj b/src/GameLogic/MUnique.OpenMU.GameLogic.csproj index e4c1a85bf..9a2ead7c3 100644 --- a/src/GameLogic/MUnique.OpenMU.GameLogic.csproj +++ b/src/GameLogic/MUnique.OpenMU.GameLogic.csproj @@ -41,4 +41,19 @@ + + + + True + True + PlayerMessage.resx + + + + + + ResXFileCodeGenerator + PlayerMessage.Designer.cs + + diff --git a/src/GameLogic/Properties/PlayerMessage.Designer.cs b/src/GameLogic/Properties/PlayerMessage.Designer.cs new file mode 100644 index 000000000..7c307a7e5 --- /dev/null +++ b/src/GameLogic/Properties/PlayerMessage.Designer.cs @@ -0,0 +1,189 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace MUnique.OpenMU.GameLogic.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class PlayerMessage { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal PlayerMessage() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("MUnique.OpenMU.GameLogic.Properties.PlayerMessage", typeof(PlayerMessage).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to Account not found.. + /// + internal static string AccountNotFound { + get { + return ResourceManager.GetString("AccountNotFound", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Account property not found.. + /// + internal static string AccountPropertyNotFound { + get { + return ResourceManager.GetString("AccountPropertyNotFound", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The argument {0} was given an invalid type, it expects the value to be of the type {1}.. + /// + internal static string ArgumentInvalidType { + get { + return ResourceManager.GetString("ArgumentInvalidType", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to A character with the same name already exists.. + /// + internal static string CharacterNameAlreadyExists { + get { + return ResourceManager.GetString("CharacterNameAlreadyExists", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Character name is required.. + /// + internal static string CharacterNameRequired { + get { + return ResourceManager.GetString("CharacterNameRequired", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Character {0} not found.. + /// + internal static string CharacterNotFound { + get { + return ResourceManager.GetString("CharacterNotFound", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The command '{0}' does not exists.. + /// + internal static string CommandDoesNotExist { + get { + return ResourceManager.GetString("CommandDoesNotExist", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The command needs {0} arguments and was given {1}.. + /// + internal static string CommandNeedsArguments { + get { + return ResourceManager.GetString("CommandNeedsArguments", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Guild {0} not found.. + /// + internal static string GuildNotFound { + get { + return ResourceManager.GetString("GuildNotFound", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Login name is required.. + /// + internal static string LoginNameRequired { + get { + return ResourceManager.GetString("LoginNameRequired", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Map {0} not found.. + /// + internal static string MapNotFound { + get { + return ResourceManager.GetString("MapNotFound", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Name is required.. + /// + internal static string NameRequired { + get { + return ResourceManager.GetString("NameRequired", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0} entered the game.. + /// + internal static string PlayerEnteredGameMessage { + get { + return ResourceManager.GetString("PlayerEnteredGameMessage", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The required argument named {0} was not used.. + /// + internal static string RequiredArgumentNotUsed { + get { + return ResourceManager.GetString("RequiredArgumentNotUsed", resourceCulture); + } + } + } +} diff --git a/src/GameLogic/Properties/PlayerMessage.resx b/src/GameLogic/Properties/PlayerMessage.resx new file mode 100644 index 000000000..cd2c62b31 --- /dev/null +++ b/src/GameLogic/Properties/PlayerMessage.resx @@ -0,0 +1,21 @@ + + + text/microsoft-resx + 2.0 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + {0} entered the game. + The command needs {0} arguments and was given {1}. + The required argument named {0} was not used. + The argument {0} was given an invalid type, it expects the value to be of the type {1}. + Character name is required. + Character {0} not found. + Guild {0} not found. + Name is required. + Login name is required. + Account not found. + Account property not found. + The command '{0}' does not exists. + Map {0} not found. + A character with the same name already exists. + \ No newline at end of file From 325dc4159fded5e7970f978e52d52468dfdc53ff Mon Sep 17 00:00:00 2001 From: sven-n Date: Thu, 27 Nov 2025 19:06:21 +0100 Subject: [PATCH 03/32] Localizable player messages and data model --- src/DataModel/ModelResourceProvider.cs | 214 + src/DataModel/Properties/ModelResources.resx | 5629 +++++++++++++++++ src/GameLogic/GameContext.cs | 37 + src/GameLogic/GlobalUsings.cs | 6 +- src/GameLogic/IGameContext.cs | 8 + src/GameLogic/MUnique.OpenMU.GameLogic.csproj | 2 +- src/GameLogic/MiniGames/MiniGameContext.cs | 4 +- src/GameLogic/MuHelper/MuHelper.cs | 8 +- src/GameLogic/Player.cs | 57 +- .../PlayerActions/Duel/DuelActions.cs | 24 +- .../SiegePotionConsumeHandlerPlugIn.cs | 2 +- .../Items/LostMapDroppedPlugIn.cs | 10 +- .../MiniGameOpeningStateRequestAction.cs | 4 +- .../ChatCommands/AddStatChatCommandPlugIn.cs | 41 +- .../ChangeLanguageChatCommandArgs.cs | 17 + .../ChangeLanguageChatCommandPlugIn.cs | 67 + .../ChatCommands/CharInfoChatCommandPlugIn.cs | 14 + .../ChatBanCharChatCommandPlugIn.cs | 4 +- .../ChatCommands/ChatCommandPlugInBase.cs | 17 +- .../ChatUnbanCharChatCommandPlugIn.cs | 4 +- .../ClearInventoryChatCommandPlugIn.cs | 18 +- .../PlugIns/ChatCommands/CommandExtensions.cs | 13 - .../ChatCommands/CreateMonsterChatCommand.cs | 4 +- .../DisconnectChatCommandPlugIn.cs | 2 +- .../ChatCommands/GetLevelChatCommandPlugIn.cs | 9 +- .../GetLevelUpPointsChatCommandPlugIn.cs | 9 +- .../GetMasterLevelChatCommandPlugIn.cs | 6 +- ...GetMasterLevelUpPointsChatCommandPlugIn.cs | 9 +- .../ChatCommands/GetMoneyChatCommandPlugIn.cs | 9 +- .../GetResetsChatCommandPlugIn.cs | 11 +- .../ChatCommands/GetStatChatCommandPlugIn.cs | 42 +- .../GuildDisconnectChatCommandPlugIn.cs | 2 +- .../GuildMoveChatCommandPlugIn.cs | 4 +- .../PlugIns/ChatCommands/HelpCommand.cs | 7 +- .../ChatCommands/ItemChatCommandPlugIn.cs | 14 +- .../PlugIns/ChatCommands/ListCommand.cs | 2 +- .../ChatCommands/MoveChatCommandPlugIn.cs | 4 +- .../ChatCommands/MoveMonsterChatCommand.cs | 2 +- .../ChatCommands/NpcChatCommandPlugIn.cs | 14 +- .../ChatCommands/OnlineChatCommandPlugIn.cs | 2 +- .../OpenWarehouseChatCommandPlugIn.cs | 8 +- .../ChatCommands/PKChatCommandPlugIn.cs | 40 +- .../ChatCommands/PKClearChatCommandPlugIn.cs | 4 +- .../ChatCommands/RemoveNpcChatCommand.cs | 4 +- .../ChatCommands/SetLevelChatCommandPlugIn.cs | 11 +- .../SetLevelUpPointsChatCommandPlugIn.cs | 9 +- .../SetMasterLevelChatCommandPlugIn.cs | 11 +- ...SetMasterLevelUpPointsChatCommandPlugIn.cs | 13 +- .../ChatCommands/SetMoneyChatCommandPlugIn.cs | 12 +- .../SetResetsChatCommandPlugIn.cs | 17 +- .../ChatCommands/SetStatChatCommandPlugIn.cs | 79 +- .../ChatCommands/UnBanAccChatCommandPlugIn.cs | 2 +- .../UnBanCharChatCommandPlugIn.cs | 2 +- .../ChatCommands/WalkMonsterChatCommand.cs | 2 +- .../PlugIns/QuestMonsterKillCountPlugIn.cs | 6 +- ...essageToAllWhenPlayerEnteredWorldPlugIn.cs | 2 +- .../Properties/PlayerMessage.Designer.cs | 776 ++- src/GameLogic/Properties/PlayerMessage.resx | 318 +- src/GameServer/GameServer.cs | 4 +- src/GameServer/GlobalUsings.cs | 7 + src/Interfaces/LocalizableException.cs | 72 + src/Interfaces/LocalizableExceptionBase.cs | 68 + src/Interfaces/LocalizedString.cs | 98 + src/Interfaces/Properties/ModelResources.resx | 451 ++ .../Initialization/GlobalUsings.cs | 14 + src/PlugIns/LocalizableString.cs | 156 + src/SourceGenerators/ResourceGenerator.cs | 217 + src/Web/AdminPanel/CaptionHelper.cs | 74 - .../ModelResourcesTest.cs | 136 + 69 files changed, 8529 insertions(+), 436 deletions(-) create mode 100644 src/DataModel/ModelResourceProvider.cs create mode 100644 src/DataModel/Properties/ModelResources.resx create mode 100644 src/GameLogic/PlugIns/ChatCommands/Arguments/ChangeLanguageChatCommandArgs.cs create mode 100644 src/GameLogic/PlugIns/ChatCommands/ChangeLanguageChatCommandPlugIn.cs create mode 100644 src/GameServer/GlobalUsings.cs create mode 100644 src/Interfaces/LocalizableException.cs create mode 100644 src/Interfaces/LocalizableExceptionBase.cs create mode 100644 src/Interfaces/LocalizedString.cs create mode 100644 src/Interfaces/Properties/ModelResources.resx create mode 100644 src/Persistence/Initialization/GlobalUsings.cs create mode 100644 src/PlugIns/LocalizableString.cs create mode 100644 src/SourceGenerators/ResourceGenerator.cs delete mode 100644 src/Web/AdminPanel/CaptionHelper.cs create mode 100644 tests/MUnique.OpenMU.Tests/ModelResourcesTest.cs diff --git a/src/DataModel/ModelResourceProvider.cs b/src/DataModel/ModelResourceProvider.cs new file mode 100644 index 000000000..f2f6dc58e --- /dev/null +++ b/src/DataModel/ModelResourceProvider.cs @@ -0,0 +1,214 @@ +namespace MUnique.OpenMU.DataModel; + +using System; +using System.Collections.Concurrent; +using System.Globalization; +using System.Reflection; +using System.Resources; +using System.Text.RegularExpressions; + +/// +/// Provides access to the model resources like type and property captions and descriptions. +/// +public static class ModelResourceProvider +{ + + private static readonly Regex WordSeparatorRegex = new("([a-z])([A-Z])", RegexOptions.Compiled); + + private static readonly ConcurrentDictionary ResourceManagersByAssembly = new(); + + public static string GetTypeCaption(CultureInfo? cultureInfo = null) + { + return typeof(TModel).GetTypeCaption(cultureInfo); + } + + /// + /// Gets the localized caption for the specified model . + /// Falls back to a generated spaced caption based on the type name when no resource entry is found. + /// + /// The model type whose caption should be resolved. + /// Optional culture to use. If null, is used. + /// The localized caption or a spaced fallback type name. + public static string GetTypeCaption(this Type modelType, CultureInfo? cultureInfo = null) + { + cultureInfo ??= CultureInfo.CurrentCulture; + var resourceKey = modelType.Name + "_TypeCaption"; + return GetResourceManager(modelType)?.GetString(resourceKey, cultureInfo) ?? SeparateWords(modelType.Name); + } + + /// + /// Gets the localized pluralized caption for the specified model type . + /// Falls back to a generated spaced caption based on the type name when no resource entry is found. + /// + /// The model type for which to get the pluralized caption. + /// Optional culture to use. If null, is used. + /// The localized pluralized caption or a spaced fallback representation of the type name. + public static string GetPluralizedTypeCaption(CultureInfo? cultureInfo = null) + { + return typeof(TModel).GetPluralizedTypeCaption(cultureInfo); + } + + /// + /// Gets the localized pluralized caption for the specified model . + /// Falls back to a generated spaced caption based on the type name when no resource entry is found. + /// + /// The model type whose pluralized caption should be resolved. + /// Optional culture to use. If null, is used. + /// The localized pluralized caption or a spaced fallback type name. + public static string GetPluralizedTypeCaption(this Type modelType, CultureInfo? cultureInfo = null) + { + cultureInfo ??= CultureInfo.CurrentCulture; + var resourceKey = modelType.Name + "_TypeCaptionPlural"; + return GetResourceManager(modelType)?.GetString(resourceKey, cultureInfo) ?? SeparateWords(modelType.Name); + } + + /// + /// Gets the localized description for the specified model type . + /// Returns an empty string when no resource entry is found. + /// + /// The model type for which to get the description. + /// Optional culture to use. If null, is used. + /// The localized description or an empty string. + public static string GetTypeDescription(CultureInfo? cultureInfo = null) + { + return typeof(TModel).GetTypeDescription(cultureInfo); + } + + /// + /// Gets the localized description for the specified model . + /// Returns an empty string when no resource entry is found. + /// + /// The model type whose description should be resolved. + /// Optional culture to use. If null, is used. + /// The localized description or an empty string. + public static string GetTypeDescription(this Type modelType, CultureInfo? cultureInfo = null) + { + cultureInfo ??= CultureInfo.CurrentCulture; + var resourceKey = modelType.Name + "_TypeDescription"; + return GetResourceManager(modelType)?.GetString(resourceKey, cultureInfo) ?? string.Empty; + } + + /// + /// Gets the localized caption for a property of the specified model type . + /// Falls back to a spaced version of the property name when no resource entry is found. + /// + /// The model type containing the property. + /// Name of the property. + /// Optional culture to use. If null, is used. + /// The localized property caption or a spaced fallback property name. + public static string GetPropertyCaption(string propertyName, CultureInfo? cultureInfo = null) + { + return typeof(TModel).GetPropertyCaption(propertyName, cultureInfo); + } + + /// + /// Gets the localized caption for a property of the specified model . + /// Falls back to a spaced version of the property name when no resource entry is found. + /// + /// The model type containing the property. + /// Name of the property. + /// Optional culture to use. If null, is used. + /// The localized property caption or a spaced fallback property name. + public static string GetPropertyCaption(this Type modelType, string propertyName, CultureInfo? cultureInfo = null) + { + cultureInfo ??= CultureInfo.CurrentCulture; + var resourceKey = $"{modelType.Name}_{propertyName}_Caption"; + return GetResourceManager(modelType)?.GetString(resourceKey, cultureInfo) ?? SeparateWords(propertyName); + } + + /// + /// Gets the localized description for a property of the specified model type . + /// Returns an empty string when no resource entry is found. + /// + /// The model type containing the property. + /// Name of the property. + /// Optional culture to use. If null, is used. + /// The localized property description or an empty string. + public static string GetPropertyDescription(string propertyName, CultureInfo? cultureInfo = null) + { + return typeof(TModel).GetPropertyDescription(propertyName, cultureInfo); + } + + /// + /// Gets the localized description for a property of the specified model . + /// Returns an empty string when no resource entry is found. + /// + /// The model type containing the property. + /// Name of the property. + /// Optional culture to use. If null, is used. + /// The localized property description or an empty string. + public static string GetPropertyDescription(this Type modelType, string propertyName, CultureInfo? cultureInfo = null) + { + cultureInfo ??= CultureInfo.CurrentCulture; + var resourceKey = $"{modelType.Name}_{propertyName}_Description"; + return GetResourceManager(modelType)?.GetString(resourceKey, cultureInfo) ?? string.Empty; + } + + /// + /// Gets the localized caption for an enum value of the generic enum type . + /// Falls back to a spaced version of the enum value name when no resource entry is found. + /// + /// The enum type. + /// The enum value instance. + /// Optional culture to use. If null, is used. + /// The localized enum value caption or a spaced fallback value name. + public static string GetEnumCaption(this TEnum enumValue, CultureInfo? cultureInfo = null) + { + cultureInfo ??= CultureInfo.CurrentCulture; + var resourceKey = $"{typeof(TEnum).Name}_{enumValue}_Caption"; + return GetResourceManager(typeof(TEnum))?.GetString(resourceKey, cultureInfo) ?? SeparateWords(enumValue?.ToString() ?? string.Empty); + } + + /// + /// Gets the localized caption for a specific enum value given its and . + /// Falls back to a spaced version of the enum value name when no resource entry is found. + /// + /// The enum type. + /// The enum value. + /// Optional culture to use. If null, is used. + /// The localized enum value caption or a spaced fallback value name. + public static string GetEnumCaption(Type enumType, Enum enumValue, CultureInfo? cultureInfo = null) + { + cultureInfo ??= CultureInfo.CurrentCulture; + var resourceKey = $"{enumType.Name}_{enumValue}_Caption"; + return GetResourceManager(enumType)?.GetString(resourceKey, cultureInfo) ?? SeparateWords(enumValue.ToString()); + } + + /// + /// Gets the associated with the assembly of the specified . + /// The manager is cached per assembly. If no matching resource base name is found, returns null. + /// + /// A type contained in the target assembly. + /// The or null if none exists. + private static ResourceManager? GetResourceManager(Type type) + { + var assembly = type.Assembly; + return ResourceManagersByAssembly.GetOrAdd( + assembly, + a => + { + var baseName = type.Assembly.GetManifestResourceNames().FirstOrDefault(rn => rn.EndsWith("Properties.ModelResources.resources"))?[..^".resources".Length]; + if (baseName is null) + { + return null; + } + + return new(new(baseName), a); + }); + } + + /// + /// Separates the words by a space. Words are detected by transitions from lower-case to upper-case letters. + /// Also performs simple replacements to singularize or adjust certain suffixes: + /// Replaces " Definitions" with "s" and " Definition" with an empty string. + /// Intended as a fallback when no resource text is found. + /// + /// The input identifier to transform. + /// The spaced and adjusted representation. + private static string SeparateWords(string input) + { + return WordSeparatorRegex.Replace(input, "$1 $2") + .Replace(" Definitions", "s", StringComparison.InvariantCulture) + .Replace(" Definition", string.Empty, StringComparison.InvariantCulture); + } +} \ No newline at end of file diff --git a/src/DataModel/Properties/ModelResources.resx b/src/DataModel/Properties/ModelResources.resx new file mode 100644 index 000000000..3f7221252 --- /dev/null +++ b/src/DataModel/Properties/ModelResources.resx @@ -0,0 +1,5629 @@ + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + Fruit Calculation Strategy + + + + + + Default + + + + + + Magic Gladiator + + + + + + Dark Lord + + + + + + Power Ups + + + Power Ups + + + + + + Target Attribute + + + + + + Boost + + + + + + Item Option Types + + + Item Option Types + + + + + + Excellent + + + + + + Wing + + + + + + Luck + + + + + + Option + + + + + + Harmony Option + + + + + + Ancient Option + + + + + + Ancient Bonus + + + + + + Guardian Option + + + + + + Socket Option + + + + + + Socket Bonus Option + + + + + + Blue Fenrir + + + + + + Black Fenrir + + + + + + Gold Fenrir + + + + + + Dark Horse + + + + + + Item Crafting + + + Item Craftings + + + + + + Number + + + + + + Name + + + + + + Item Crafting Handler Class Name + + + + + + Simple Crafting Settings + + + + + + Game Clients + + + Game Clients + + + + + + Season + + + + + + Episode + + + + + + Language + + + + + + Version + + + + + + Serial + + + + + + Description + + + + + + Character Class + + + Character Class + + + + + + Number + + + + + + Name + + + + + + Can Get Created + + + + + + Level Requirement By Creation + + + + + + Creation Allowed Flag + + + + + + Next Generation Class + + + + + + Is Master Class + + + + + + Level Warp Requirement Reduction Percent + + + + + + Fruit Calculation + + + + + + Stat Attributes + + + + + + Attribute Combinations + + + + + + Base Attribute Values + + + + + + Home Map + + + + + + Combos + + + + + + Warp Info + + + Warp Infos + + + + + + Index + + + + + + Name + + + + + + Costs + + + + + + Level Requirement + + + + + + Gate + + + + + + Master Skills + + + Master Skills + + + + + + Root + + + + + + Required Master Skills + + + + + + Rank + + + + + + Maximum Level + + + + + + Minimum Level + + + + + + Value Formula + + + + + + Display Value Formula + + + + + + Target Attribute + + + + + + Aggregation + + + + + + Replaced Skill + + + + + + Extends Duration + + + + + + Terrain Attribute Type + + + + + + Safezone + + + + + + Character + + + + + + Blocked + + + + + + No Ground + + + + + + Water + + + + + + Item Option + + + Item Options + + + + + + Number + + + + + + Sub Option Type + + + + + + Option Type + + + + + + Power Ups + + + + + + Guild + + + Guilds + + + + + + Id + + + + + + Members + + + + + + Result Item Selection + + + + + + Any + + + + + + All + + + + + + Game Server Configuration + + + Game Server Configurations + + + + + + Maximum Players + + + + + + Maps + + + + + + Game Configuration + + + Game Configurations + + + + + + Maximum Level + + + + + + Maximum Master Level + + + + + + Experience Rate + + + + + + Minimum Monster Level For Master Experience + + + + + + Info Range + + + + + + Area Skill Hits Player + + + + + + Maximum Inventory Money + + + + + + Maximum Vault Money + + + + + + Experience Formula + + + + + + Master Experience Formula + + + + + + Recovery Interval + + + + + + Maximum Letters + + + + + + Letter Send Price + + + + + + Maximum Characters Per Account + + + + + + Character Name Regex + + + + + + Maximum Password Length + + + + + + Maximum Party Size + + + + + + Should Drop Money + + + + + + Item Drop Duration + + + + + + Maximum Item Option Level Drop + + + + + + Damage Per One Item Durability + + + + + + Damage Per One Pet Durability + + + + + + Hits Per One Item Durability + + + + + + Duel Configuration + + + + + + Jewel Mixes + + + + + + Warp List + + + + + + Drop Item Groups + + + + + + Skills + + + + + + Character Classes + + + + + + Items + + + + + + Item Level Bonus Tables + + + + + + Item Slot Types + + + + + + Item Options + + + + + + Item Option Types + + + + + + Item Set Groups + + + + + + Item Option Combination Bonuses + + + + + + Maps + + + + + + Monsters + + + + + + Attributes + + + + + + Magic Effects + + + + + + Master Skill Roots + + + + + + Plug In Configurations + + + + + + Mini Games + + + + + + Quest Reward Type + + + + + + Undefined + + + + + + Experience + + + + + + Money + + + + + + Item + + + + + + Gens Attribution + + + + + + Level Up Points + + + + + + Character Evolution First To Second + + + + + + Character Evolution Second To Third + + + + + + Attribute + + + + + + Skill + + + + + + Game Server Endpoint + + + Game Server Endpoints + + + + + + Alternative Published Port + + + + + + Configuration Update State + + + Configuration Update States + + + + + + Initialization Key + + + + + + Current Installed Version + + + + + + Item Level Bonus Table + + + Item Level Bonus Tables + + + + + + Name + + + + + + Description + + + + + + Bonus Per Level + + + + + + Monster Attribute + + + Monster Attributes + + + + + + Attributes + + + + + + Value + + + + + + Member Of Aggregate Attribute + + + Member Of Aggregate Attributes + + + + + + Item Option Link + + + Item Option Links + + + + + + Item Option + + + + + + Level + + + + + + Index + + + + + + Aggregate Root Attribute + + + Aggregate Root Attributes + + + + + + Magic Effects + + + Magic Effects + + + + + + Number + + + + + + Name + + + + + + Sub Type + + + + + + Inform Observers + + + + + + Stop By Death + + + + + + Send Duration + + + + + + Duration + + + + + + Power Ups + + + + + + Transient Attribute + + + Transient Attributes + + + + + + Skill Entry + + + Skill Entrys + + + + + + Skill + + + + + + Level + + + + + + Power Ups + + + + + + Power Up Duration + + + + + + Attributes + + + + + + Item Storage + + + Item Storages + + + + + + Items + + + + + + Money + + + + + + Appearance Data + + + Appearance Datas + + + + + + Character Class + + + + + + Character Status + + + + + + Pose + + + + + + Full Ancient Set Equipped + + + + + + Equipped Items + + + + + + Jewel Mix + + + Jewel Mixs + + + + + + Number + + + + + + Single Jewel + + + + + + Mixed Jewel + + + + + + Items + + + Items + + + + + + Number + + + + + + Item Slot + + + + + + Width + + + + + + Height + + + + + + Drops From Monsters + + + + + + Is Ammunition + + + + + + Is Bound To Character + + + + + + Storage Limit Per Character + + + + + + Name + + + + + + Drop Level + + + + + + Maximum Item Level + + + + + + Durability + + + + + + Group + + + + + + Value + + + + + + Pet Experience Formula + + + + + + Consume Effect + + + + + + Maximum Sockets + + + + + + Skill + + + + + + Qualified Characters + + + + + + Possible Item Set Groups + + + + + + Possible Item Options + + + + + + Requirements + + + + + + Base Power Up Attributes + + + + + + Drop Items + + + + + + Battle Zones + + + Battle Zones + + + + + + Type + + + + + + Left Team Spawn Point X + + + + + + Left Team Spawn Point Y + + + + + + Right Team Spawn Point X + + + + + + Right Team Spawn Point Y + + + + + + Ground + + + + + + Left Goal + + + + + + Right Goal + + + + + + Game Maps + + + Game Maps + + + + + + Number + + + + + + Name + + + + + + Terrain Data + + + + + + Monster Spawns + + + + + + Enter Gates + + + + + + Exp Multiplier + + + + + + Discriminator + + + + + + Safezone Map + + + + + + Battle Zone + + + + + + Exit Gates + + + + + + Drop Item Groups + + + + + + Map Requirements + + + + + + Character Power Ups + + + + + + Hidden At Creation Attribute + + + Hidden At Creation Attributes + + + + + + Simple Crafting Settings + + + Simple Crafting Settings + + + + + + Money + + + + + + Money Per Final Success Percentage + + + + + + Npc Price Divisor + + + + + + Success Percent + + + + + + Maximum Success Percent + + + + + + Multiple Allowed + + + + + + Required Items + + + + + + Result Items + + + + + + Result Item Select + + + + + + Success Percentage Addition For Luck + + + + + + Success Percentage Addition For Excellent Item + + + + + + Success Percentage Addition For Ancient Item + + + + + + Success Percentage Addition For Guardian Item + + + + + + Success Percentage Addition For Socket Item + + + + + + Result Item Luck Option Chance + + + + + + Result Item Skill Chance + + + + + + Result Item Excellent Option Chance + + + + + + Result Item Max Exc Option Count + + + + + + Item Appearance + + + Item Appearances + + + + + + Item Slot + + + + + + Definition + + + + + + Level + + + + + + Visible Options + + + + + + Item Base Power Ups + + + Item Base Power Ups + + + + + + Target Attribute + + + + + + Base Value Element + + + + + + Bonus Per Level Table + + + + + + Base Value + + + + + + Aggregate Type + + + + + + Quests + + + Quests + + + + + + Quest Giver + + + + + + Name + + + + + + Group + + + + + + Number + + + + + + Starting Number + + + + + + Refuse Number + + + + + + Repeatable + + + + + + Requires Client Action + + + + + + Required Start Money + + + + + + Minimum Character Level + + + + + + Maximum Character Level + + + + + + Qualified Character + + + + + + Required Monster Kills + + + + + + Required Items + + + + + + Rewards + + + + + + Level Bonus + + + Level Bonus + + + + + + Level + + + + + + Additional Value + + + + + + Enter Gate + + + Enter Gates + + + + + + Target Gate + + + + + + Level Requirement + + + + + + Number + + + + + + Item Option Of Level + + + Item Option Of Levels + + + + + + Level + + + + + + Required Item Level + + + + + + Power Ups + + + + + + Skill + + + Skills + + + + + + Number + + + + + + Name + + + + + + Attack Damage + + + + + + Requirements + + + + + + Consume Requirements + + + + + + Attribute Relationships + + + + + + Range + + + + + + Damage Type + + + + + + Skill Type + + + + + + Target + + + + + + Implicit Target Range + + + + + + Target Restriction + + + + + + Moves To Target + + + + + + Moves Target + + + + + + Elemental Modifier Target + + + + + + Magic Effect Def + + + + + + Qualified Characters + + + + + + Masters + + + + + + Area Skill Settings + + + + + + Damage Type + + + + + + None + + + + + + Physical + + + + + + Wizardry + + + + + + Curse + + + + + + Summoned Monster + + + + + + Fenrir + + + + + + All + + + + + + Skill Type + + + + + + Direct Hit + + + + + + Castle Siege Special + + + + + + Castle Siege Skill + + + + + + Area Skill Automatic Hits + + + + + + Area Skill Explicit Hits + + + + + + Area Skill Explicit Target + + + + + + Buff + + + + + + Regeneration + + + + + + Passive Boost + + + + + + Summon Monster + + + + + + Other + + + + + + Skill Target + + + + + + Undefined + + + + + + Explicit + + + + + + Implicit Party + + + + + + Implicit Players In Range + + + + + + Implicit Npcs In Range + + + + + + Implicit All In Range + + + + + + Explicit With Implicit In Range + + + + + + Implicit Player + + + + + + Skill Target Restriction + + + + + + Undefined + + + + + + Self + + + + + + Party + + + + + + Player + + + + + + Item Crafting Result Item + + + Item Crafting Result Items + + + + + + Items + + + + + + Random Minimum Level + + + + + + Random Maximum Level + + + + + + Durability + + + + + + Reference + + + + + + Add Level + + + + + + Mix Result + + + + + + Disappear + + + + + + Stays As Is + + + + + + Chaos Weapon And First Wings Downgraded Random + + + + + + Third Wings Downgraded Random + + + + + + Item Set Group + + + Item Set Groups + + + + + + Name + + + + + + Always Applies + + + + + + Count Distinct + + + + + + Minimum Item Count + + + + + + Set Level + + + + + + Options + + + + + + Items + + + + + + Mini Game Terrain Change + + + Mini Game Terrain Changes + + + + + + Terrain Attribute + + + + + + Set Terrain Attribute + + + + + + Is Client Update Required + + + + + + Start X + + + + + + Start Y + + + + + + End X + + + + + + End Y + + + + + + Rectangle + + + Rectangles + + + + + + X1 + + + + + + Y1 + + + + + + X2 + + + + + + Y2 + + + + + + Item Of Item Set + + + Item Of Item Sets + + + + + + Ancient Set Discriminator + + + + + + Item Set Group + + + + + + Items + + + + + + Bonus Option + + + + + + Name + + + + + + Quest Monster Kill Requirement + + + Quest Monster Kill Requirements + + + + + + Monster + + + + + + Minimum Number + + + + + + Assignable Extensions + + + Assignable Extensions + + + + + + Character + + + Characters + + + + + + Id + + + + + + Name + + + + + + Character Class + + + + + + Character Slot + + + + + + Create Date + + + + + + Experience + + + + + + Master Experience + + + + + + Level Up Points + + + + + + Master Level Up Points + + + + + + Current Map + + + + + + Position X + + + + + + Position Y + + + + + + Player Kill Count + + + + + + State Remaining Seconds + + + + + + State + + + + + + Character Status + + + + + + Pose + + + + + + Used Fruit Points + + + + + + Used Neg Fruit Points + + + + + + Inventory Extensions + + + + + + Key Configuration + + + + + + Mu Helper Configuration + + + + + + Store Name + + + + + + Is Store Opened + + + + + + Attributes + + + + + + Letters + + + + + + Learned Skills + + + + + + Inventory + + + + + + Drop Item Groups + + + + + + Quest States + + + + + + Hero State + + + + + + New + + + + + + Hero + + + + + + Light Hero + + + + + + Normal + + + + + + Player Kill Warning + + + + + + Player Killer1st Stage + + + + + + Player Killer2nd Stage + + + + + + Character Status + + + + + + Normal + + + + + + Banned + + + + + + Game Master + + + + + + Character Pose + + + + + + Standing + + + + + + Sitting + + + + + + Leaning + + + + + + Hanging + + + + + + Game Configuration Helper + + + Game Configuration Helpers + + + + + + Duel Configuration + + + Duel Configurations + + + + + + Maximum Score + + + + + + Entrance Fee + + + + + + Minimum Character Level + + + + + + Maximum Spectators Per Duel Room + + + + + + Exit + + + + + + Duel Areas + + + + + + Increasable Item Option + + + Increasable Item Options + + + + + + Level Type + + + + + + Weight + + + + + + Level Dependent Options + + + + + + Level Type + + + + + + Option Level + + + + + + Item Level + + + + + + Item Options + + + Item Options + + + + + + Name + + + + + + Adds Randomly + + + + + + Add Chance + + + + + + Maximum Options Per Item + + + + + + Possible Options + + + + + + Mini Game Type + + + + + + Undefined + + + + + + Devil Square + + + + + + Blood Castle + + + + + + Chaos Castle + + + + + + Illusion Temple + + + + + + Doppelganger + + + + + + Connect Servers + + + Connect Servers + + + + + + Id + + + + + + Configuration Id + + + + + + Server Id + + + + + + Description + + + + + + Client + + + + + + Disconnect On Unknown Packet + + + + + + Maximum Receive Size + + + + + + Client Listener Port + + + + + + Timeout + + + + + + Current Patch Version + + + + + + Patch Address + + + + + + Max Connections Per Address + + + + + + Check Max Connections Per Address + + + + + + Max Connections + + + + + + Listener Backlog + + + + + + Max Ftp Requests + + + + + + Max Ip Requests + + + + + + Max Server List Requests + + + + + + Error + + + Errors + + + + + + Item + + + Items + + + + + + Item Slot + + + + + + Definition + + + + + + Durability + + + + + + Level + + + + + + Has Skill + + + + + + Item Options + + + + + + Item Set Groups + + + + + + Socket Count + + + + + + Store Price + + + + + + Pet Experience + + + + + + Letter Body + + + Letter Bodys + + + + + + Id + + + + + + Header + + + + + + Message + + + + + + Rotation + + + + + + Animation + + + + + + Sender Appearance + + + + + + Mini Game Ranking Entry + + + Mini Game Ranking Entrys + + + + + + Game Instance Id + + + + + + Timestamp + + + + + + Score + + + + + + Rank + + + + + + Character + + + + + + Mini Game + + + + + + Character Quest State + + + Character Quest States + + + + + + Group + + + + + + Client Action Performed + + + + + + Last Finished Quest + + + + + + Active Quest + + + + + + Requirement States + + + + + + Gate + + + Gates + + + + + + X1 + + + + + + Y1 + + + + + + X2 + + + + + + Y2 + + + + + + Item Option Type + + + Item Option Types + + + + + + Id + + + + + + Name + + + + + + Description + + + + + + Is Visible + + + + + + Item Crafting Required Item + + + Item Crafting Required Items + + + + + + Possible Items + + + + + + Minimum Item Level + + + + + + Maximum Item Level + + + + + + Required Item Options + + + + + + Minimum Amount + + + + + + Maximum Amount + + + + + + Success Result + + + + + + Fail Result + + + + + + Npc Price Divisor + + + + + + Add Percentage + + + + + + Reference + + + + + + Mini Game Change Event + + + Mini Game Change Events + + + + + + Index + + + + + + Description + + + + + + Message + + + + + + Target + + + + + + Minimum Target Level + + + + + + Number Of Kills + + + + + + Multiply Kills By Players + + + + + + Targets + + + + + + Spawn Area + + + + + + Terrain Changes + + + + + + Kill Target + + + + + + Any Object + + + + + + Any Monster + + + + + + Specific + + + + + + Account + + + Accounts + + + + + + Login Name + + + + + + Password Hash + + + + + + Security Code + + + + + + EMail + + + + + + Language Iso Code + + + + + + Chat Ban Until + + + + + + Unlocked Character Classes + + + + + + Registration Date + + + + + + State + + + + + + Time Zone + + + + + + Vault Password + + + + + + Vault + + + + + + Is Vault Extended + + + + + + Is Template + + + + + + Characters + + + + + + Attributes + + + + + + Account State + + + + + + Normal + + + + + + Spectator + + + + + + Game Master + + + + + + Game Master Invisible + + + + + + Banned + + + + + + Temporarily Banned + + + + + + Quest Item Requirement + + + Quest Item Requirements + + + + + + Item + + + + + + Drop Item Group + + + + + + Minimum Number + + + + + + Stat Attributes + + + Stat Attributes + + + + + + Attribute + + + + + + Base Value + + + + + + Increasable By Player + + + + + + Direction + + + + + + Undefined + + + + + + West + + + + + + South West + + + + + + South + + + + + + South East + + + + + + East + + + + + + North East + + + + + + North + + + + + + North West + + + + + + Inventory Constants + + + Inventory Constants + + + + + + Level Dependent Damage + + + Level Dependent Damages + + + + + + Level + + + + + + Damage + + + + + + Mini Game Reward + + + Mini Game Rewards + + + + + + Rank + + + + + + Reward Type + + + + + + Reward Amount + + + + + + Required Success + + + + + + Item Reward + + + + + + Required Kill + + + + + + Mini Game Success Flags + + + + + + None + + + + + + Winner + + + + + + Winning Party + + + + + + Winner Or In Winning Party + + + + + + Loser + + + + + + Alive + + + + + + Dead + + + + + + Winner Exists + + + + + + Winner Not Exists + + + + + + Skill Combo Step + + + Skill Combo Steps + + + + + + Order + + + + + + Is Final Step + + + + + + Skill + + + + + + Combination Bonus Requirement + + + Combination Bonus Requirements + + + + + + Option Type + + + + + + Sub Option Type + + + + + + Minimum Count + + + + + + Drop Item Group + + + Drop Item Groups + + + + + + Description + + + + + + Chance + + + + + + Minimum Monster Level + + + + + + Maximum Monster Level + + + + + + Monster + + + + + + Item Level + + + + + + Item Type + + + + + + Possible Items + + + + + + Special Item Type + + + + + + None + + + + + + Ancient + + + + + + Excellent + + + + + + Random Item + + + + + + Socket Item + + + + + + Money + + + + + + Mini Games + + + Mini Games + + + + + + Type + + + + + + Name + + + + + + Description + + + + + + Game Level + + + + + + Map Creation Policy + + + + + + Enter Duration + + + + + + Game Duration + + + + + + Exit Duration + + + + + + Maximum Player Count + + + + + + Save Ranking Statistics + + + + + + Requires Master Class + + + + + + Minimum Character Level + + + + + + Maximum Character Level + + + + + + Minimum Special Character Level + + + + + + Maximum Special Character Level + + + + + + Ticket Item Level + + + + + + Entrance Fee + + + + + + Are Player Killers Allowed To Enter + + + + + + Allow Party + + + + + + Entrance + + + + + + Ticket Item + + + + + + Rewards + + + + + + Spawn Waves + + + + + + Change Events + + + + + + Monsters + + + Monsters + + + + + + Number + + + + + + Designation + + + + + + Move Range + + + + + + Attack Range + + + + + + View Range + + + + + + Move Delay + + + + + + Attack Delay + + + + + + Respawn Delay + + + + + + Attribute + + + + + + Number Of Maximum Item Drops + + + + + + Npc Window + + + + + + Object Kind + + + + + + Intelligence Type Name + + + + + + Attack Skill + + + + + + Merchant Store + + + + + + Item Craftings + + + + + + Drop Item Groups + + + + + + Attributes + + + + + + Quests + + + + + + this[] + + + + + + Npc Window + + + + + + Undefined + + + + + + Merchant + + + + + + Merchant1 + + + + + + Storage + + + + + + Vault Storage + + + + + + Chaos Machine + + + + + + Devil Square + + + + + + Blood Castle + + + + + + Pet Trainer + + + + + + Lahap + + + + + + Castle Senior NPC + + + + + + Elphis Refinery + + + + + + Refine Stone Making + + + + + + Remove Joh Option + + + + + + Illusion Temple + + + + + + Chaos Card Combination + + + + + + Cherry Blossom Branches Assembly + + + + + + Seed Master + + + + + + Seed Researcher + + + + + + Stat Re Initializer + + + + + + Delgado Lucky Coin Registration + + + + + + Doorkeeper Titus Duel Watch + + + + + + Lugard Doppelganger Entry + + + + + + Jerint Gaion Evententry + + + + + + Julia Warp Market Server + + + + + + Guild Master + + + + + + Combine Lucky Item + + + + + + Npc Dialog + + + + + + Legacy Quest + + + + + + Npc Object Kind + + + + + + Monster + + + + + + Passive Npc + + + + + + Guard + + + + + + Trap + + + + + + Gate + + + + + + Statue + + + + + + Soccer Ball + + + + + + Destructible + + + + + + Monster Spawn Area + + + Monster Spawn Areas + + + + + + Monsters + + + + + + Game Map + + + + + + X1 + + + + + + Y1 + + + + + + X2 + + + + + + Y2 + + + + + + Direction + + + + + + Quantity + + + + + + Spawn Trigger + + + + + + Wave Number + + + + + + Maximum Health Override + + + + + + Spawn Trigger + + + + + + Automatic + + + + + + Automatic During Event + + + + + + Once At Event Start + + + + + + Automatic During Wave + + + + + + Once At Wave Start + + + + + + Manually For Event + + + + + + Wandering + + + + + + System Configuration + + + System Configurations + + + + + + Ip Resolver + + + + + + Ip Resolver Parameter + + + + + + Auto Start + + + + + + Auto Update Schema + + + + + + Read Console Input + + + + + + Item Slot Type + + + Item Slot Types + + + + + + Description + + + + + + Item Slots + + + + + + Skill Combos + + + Skill Combos + + + + + + Name + + + + + + Maximum Completion Time + + + + + + Steps + + + + + + Model Resource Provider + + + Model Resource Providers + + + + + + Guild Member + + + Guild Members + + + + + + Id + + + + + + Guild Id + + + + + + Status + + + + + + Item Extensions + + + Item Extensions + + + + + + Power Ups Value + + + Power Ups Values + + + + + + Constant Value + + + + + + Related Values + + + + + + Mini Game Map Creation Policy + + + + + + One Per Party + + + + + + One Per Player + + + + + + Shared + + + + + + Attribute Requirement + + + Attribute Requirements + + + + + + Attribute + + + + + + Minimum Value + + + + + + Chat Server Endpoint + + + Chat Server Endpoints + + + + + + Quest Monster Kill Requirement State + + + Quest Monster Kill Requirement States + + + + + + Requirement + + + + + + Kill Count + + + + + + Server Endpoint + + + Server Endpoints + + + + + + Network Port + + + + + + Client + + + + + + Exit Gate + + + Exit Gates + + + + + + Direction + + + + + + Map + + + + + + Is Spawn Gate + + + + + + Item Option Combination Bonus + + + Item Option Combination Bonus + + + + + + Description + + + + + + Number + + + + + + Applies Multiple Times + + + + + + Requirements + + + + + + Bonus + + + + + + Item Drop Item Group + + + Item Drop Item Groups + + + + + + Source Item Level + + + + + + Money Amount + + + + + + Minimum Level + + + + + + Maximum Level + + + + + + Required Character Level + + + + + + Drop Effect + + + + + + Item Drop Effect + + + + + + Undefined + + + + + + Fireworks + + + + + + Christmas Fireworks + + + + + + Fanfare Sound + + + + + + Swirl + + + + + + Area Skill Settings + + + Area Skill Settings + + + + + + Use Frustum Filter + + + + + + Frustum Start Width + + + + + + Frustum End Width + + + + + + Frustum Distance + + + + + + Use Target Area Filter + + + + + + Target Area Diameter + + + + + + Use Deferred Hits + + + + + + Delay Per One Distance + + + + + + Delay Between Hits + + + + + + Minimum Number Of Hits Per Target + + + + + + Maximum Number Of Hits Per Target + + + + + + Maximum Number Of Hits Per Attack + + + + + + Hit Chance Per Distance Multiplier + + + + + + Chat Servers + + + Chat Servers + + + + + + Server Id + + + + + + Description + + + + + + Maximum Connections + + + + + + Client Timeout + + + + + + Client Clean Up Interval + + + + + + Room Clean Up Interval + + + + + + Endpoints + + + + + + Mini Game Reward Type + + + + + + Undefined + + + + + + Money + + + + + + Experience + + + + + + Experience Per Remaining Seconds + + + + + + Item + + + + + + Item Drop + + + + + + Score + + + + + + Game Servers + + + Game Servers + + + + + + Server ID + + + + + + Description + + + + + + Experience Rate + + + + + + Pvp Enabled + + + + + + Server Configuration + + + + + + Game Configuration + + + + + + Endpoints + + + + + + Master Skill Root + + + Master Skill Roots + + + + + + Id + + + + + + Name + + + + + + Configuration Update + + + Configuration Updates + + + + + + Version + + + + + + Name + + + + + + Description + + + + + + Created At + + + + + + Installed At + + + + + + Battle Type + + + + + + Normal + + + + + + Soccer + + + + + + Mini Game Spawn Wave + + + Mini Game Spawn Waves + + + + + + Wave Number + + + + + + Description + + + + + + Message + + + + + + Start Time + + + + + + End Time + + + + + + Resources + + + Resources + + + + + + Resource Manager + + + + + + Culture + + + + + + System Configuration_Auto Start_Description + + + + + + System Configuration_Auto Start_Name + + + + + + System Configuration_Auto Update Schema_Description + + + + + + System Configuration_Auto Update Schema_Name + + + + + + System Configuration_Description + + + + + + System Configuration_Ip Resolver_Description + + + + + + System Configuration_Ip Resolver_Name + + + + + + System Configuration_Ip Resolver Parameter_Description + + + + + + System Configuration_Ip Resolver Parameter_Name + + + + + + System Configuration_Name + + + + + + System Configuration_Read Console Input_Description + + + + + + System Configuration_Read Console Input_Name + + + + + + Duel Area + + + Duel Areas + + + + + + Index + + + + + + First Player Gate + + + + + + Second Player Gate + + + + + + Spectators Gate + + + + + + Quest Reward + + + Quest Rewards + + + + + + Reward Type + + + + + + Value + + + + + + Item Reward + + + + + + Attribute Reward + + + + + + Skill Reward + + + + + diff --git a/src/GameLogic/GameContext.cs b/src/GameLogic/GameContext.cs index 97a192ae5..96ab17d35 100644 --- a/src/GameLogic/GameContext.cs +++ b/src/GameLogic/GameContext.cs @@ -7,6 +7,7 @@ namespace MUnique.OpenMU.GameLogic; using System.Collections.Concurrent; using System.Diagnostics; using System.Diagnostics.Metrics; +using System.Globalization; using System.Threading; using MUnique.OpenMU.GameLogic.MiniGames; using MUnique.OpenMU.GameLogic.PlugIns; @@ -375,6 +376,42 @@ public async ValueTask ForEachPlayerAsync(Func action) await playerList.Select(action).WhenAll().ConfigureAwait(false); } + /// + public async ValueTask ForEachPlayerGroupedByCultureAsync(Func stateFactory, Func action) + { + if (this._playerList.Count == 0) + { + return; + } + + var playerList = await this.GetPlayersAsync().ConfigureAwait(false); + await playerList + .GroupBy(p => p.Culture) + .SelectMany(g => + { + var state = stateFactory(g.Key); + return g.Select(player => action(player, state)); + }) + .WhenAll().ConfigureAwait(false); + } + + /// + public async ValueTask ShowGlobalLocalizedMessageAsync(MessageType messageType, string messageKey, params object?[] formatArguments) + { + await this.ForEachPlayerGroupedByCultureAsync( + cultureInfo => + { + if (formatArguments.Length > 0) + { + return string.Format(PlayerMessage.ResourceManager.GetString(messageKey, cultureInfo) ?? string.Empty, formatArguments); + } + + return PlayerMessage.ResourceManager.GetString(messageKey, cultureInfo) ?? string.Empty; + }, + (player, message) => player.InvokeViewPlugInAsync(p => p.ShowMessageAsync(message, messageType)).AsTask()) + .ConfigureAwait(false); + } + /// public async ValueTask SendGlobalMessageAsync(string message, MessageType messageType) { diff --git a/src/GameLogic/GlobalUsings.cs b/src/GameLogic/GlobalUsings.cs index 5418d63ee..165a327fe 100644 --- a/src/GameLogic/GlobalUsings.cs +++ b/src/GameLogic/GlobalUsings.cs @@ -3,8 +3,12 @@ // #pragma warning disable SA1200 // Using directives should be placed correctly + +global using System.ComponentModel.DataAnnotations; + global using Microsoft.Extensions.Logging; global using MUnique.OpenMU.DataModel; global using MUnique.OpenMU.DataModel.Configuration; -global using MUnique.OpenMU.DataModel.Entities; \ No newline at end of file +global using MUnique.OpenMU.DataModel.Entities; +global using MUnique.OpenMU.GameLogic.Properties; \ No newline at end of file diff --git a/src/GameLogic/IGameContext.cs b/src/GameLogic/IGameContext.cs index 76a5bf083..a6104002b 100644 --- a/src/GameLogic/IGameContext.cs +++ b/src/GameLogic/IGameContext.cs @@ -163,6 +163,14 @@ public interface IGameContext /// Type of the message. ValueTask SendGlobalMessageAsync(string message, MessageType messageType); + /// + /// Sends a global message to all players of the game with the specified message type. + /// + /// Type of the message. + /// The message resource key. + /// The parameters for the message. + ValueTask ShowGlobalLocalizedMessageAsync(MessageType messageType, string messageKey, params object?[] arguments); + /// /// Sends a global chat message to all players of the game with the specified message type. /// diff --git a/src/GameLogic/MUnique.OpenMU.GameLogic.csproj b/src/GameLogic/MUnique.OpenMU.GameLogic.csproj index 9a2ead7c3..347dc8ec4 100644 --- a/src/GameLogic/MUnique.OpenMU.GameLogic.csproj +++ b/src/GameLogic/MUnique.OpenMU.GameLogic.csproj @@ -52,7 +52,7 @@ - ResXFileCodeGenerator + PublicResXFileCodeGenerator PlayerMessage.Designer.cs diff --git a/src/GameLogic/MiniGames/MiniGameContext.cs b/src/GameLogic/MiniGames/MiniGameContext.cs index 19931c625..cef1142b1 100644 --- a/src/GameLogic/MiniGames/MiniGameContext.cs +++ b/src/GameLogic/MiniGames/MiniGameContext.cs @@ -535,7 +535,7 @@ protected async ValueTask SaveRankingAsync(IEnumerable<(int Rank, Character Char case MiniGameRewardType.Money: if (!player.TryAddMoney(reward.RewardAmount)) { - await player.ShowMessageAsync("Couldn't add reward money, inventory is full.").ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.AwardMoneyFailByFullInventory)).ConfigureAwait(false); } return (0, reward.RewardAmount); @@ -1020,7 +1020,7 @@ private async ValueTask AreEquippedItemsAllowedAsync(Player player) { if (!this.IsItemAllowedToEquip(item)) { - await player.ShowMessageAsync($"Can't enter event with equipped item '{item.Definition?.Name ?? item.ToString()}'.").ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CantEnterEventWithItem), item.Definition?.Name ?? item.ToString()).ConfigureAwait(false); result = false; } } diff --git a/src/GameLogic/MuHelper/MuHelper.cs b/src/GameLogic/MuHelper/MuHelper.cs index 7758943d7..0e1232db8 100644 --- a/src/GameLogic/MuHelper/MuHelper.cs +++ b/src/GameLogic/MuHelper/MuHelper.cs @@ -53,19 +53,19 @@ public async ValueTask TryStartAsync() { if (this._runTask is not null) { - await this._player.ShowMessageAsync("MU Helper is already running.").ConfigureAwait(false); + await this._player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.MuHelperAlreadyRunning)).ConfigureAwait(false); return false; } if (this._player.Level < this._configuration.MinLevel) { - await this._player.ShowMessageAsync($"MU Helper can be used after level {this._configuration.MinLevel}.").ConfigureAwait(false); + await this._player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.MuHelperMinimumLevel), this._configuration.MinLevel).ConfigureAwait(false); return false; } if (this._player.Level > this._configuration.MaxLevel) { - await this._player.ShowMessageAsync($"MU Helper cannot be used after level {this._configuration.MaxLevel}.").ConfigureAwait(false); + await this._player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.MuHelperMaximumLevel), this._configuration.MaxLevel).ConfigureAwait(false); return false; } @@ -74,7 +74,7 @@ public async ValueTask TryStartAsync() if (!this._player.TryRemoveMoney(requiredMoney)) { - await this._player.ShowMessageAsync($"MU Helper requires {this._player.MuHelper.CalculateRequiredMoney()} zen.").ConfigureAwait(false); + await this._player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.MuHelperRequiresMoney), requiredMoney).ConfigureAwait(false); return false; } diff --git a/src/GameLogic/Player.cs b/src/GameLogic/Player.cs index 1a3236451..ba076c16a 100644 --- a/src/GameLogic/Player.cs +++ b/src/GameLogic/Player.cs @@ -5,6 +5,7 @@ namespace MUnique.OpenMU.GameLogic; using System; +using System.Globalization; using System.Threading; using MUnique.OpenMU.AttributeSystem; using MUnique.OpenMU.DataModel.Attributes; @@ -18,6 +19,7 @@ namespace MUnique.OpenMU.GameLogic; using MUnique.OpenMU.GameLogic.PlayerActions.Skills; using MUnique.OpenMU.GameLogic.PlayerActions.Trade; using MUnique.OpenMU.GameLogic.PlugIns; +using MUnique.OpenMU.GameLogic.Properties; using MUnique.OpenMU.GameLogic.Views; using MUnique.OpenMU.GameLogic.Views.Character; using MUnique.OpenMU.GameLogic.Views.Inventory; @@ -84,6 +86,7 @@ public Player(IGameContext gameContext) this.PlayerState.StateChanges += async args => await (this.GameContext.PlugInManager.GetPlugInPoint()?.PlayerStateChangingAsync(this, args) ?? ValueTask.CompletedTask).ConfigureAwait(false); this._observerToWorldViewAdapter = new ObserverToWorldViewAdapter(this, this.InfoRange); this._muHelperLazy = new Lazy(() => new MuHelper.MuHelper(this)); + this.Culture = CultureInfo.CurrentCulture; } /// @@ -147,6 +150,11 @@ public Player(IGameContext gameContext) /// public bool IsTemplatePlayer => this.Account?.IsTemplate is true; + /// + /// Gets the culture setting of the player. + /// + public CultureInfo Culture { get; internal set; } + /// /// Gets the skill hit validator. /// @@ -225,9 +233,16 @@ public Account? Account { this._account = value; this._accountLoggingScope?.Dispose(); - this._accountLoggingScope = this.Logger.BeginScope("Account: {Name}", this._account!.LoginName); - this.IsVaultLocked = !string.IsNullOrWhiteSpace(this._account.VaultPassword); - this.LogInvalidVaultItems(); + if (this._account is { } account) + { + this._accountLoggingScope = this.Logger.BeginScope("Account: {Name}", this._account.LoginName); + this.IsVaultLocked = !string.IsNullOrWhiteSpace(this._account.VaultPassword); + this.Culture = CultureInfo.GetCultures(CultureTypes.AllCultures) + .FirstOrDefault(cu => cu.TwoLetterISOLanguageName == account.LanguageIsoCode + || cu.ThreeLetterISOLanguageName == account.LanguageIsoCode) + ?? CultureInfo.CurrentCulture; + this.LogInvalidVaultItems(); + } } } } @@ -612,6 +627,42 @@ public bool IsAnySelfDefenseActive() && timeout >= DateTime.UtcNow); } + /// + /// Gets the localized message. + /// + /// Name of the resource. + /// The format arguments. + /// The localized message. + public string GetLocalizedMessage(string resourceName, params ReadOnlySpan formatArguments) + { + if (formatArguments.Length > 0) + { + return string.Format(PlayerMessage.ResourceManager.GetString(resourceName, this.Culture) ?? string.Empty, formatArguments); + } + + return PlayerMessage.ResourceManager.GetString(resourceName, this.Culture) ?? string.Empty; + } + + /// + /// Easier way to show a localized blue message to the player. + /// + /// The message resource key. + /// The parameters for the message. + public ValueTask ShowLocalizedBlueMessageAsync(string messageKey, params ReadOnlySpan arguments) + { + var message = this.GetLocalizedMessage(messageKey, arguments); + return this.InvokeViewPlugInAsync(p => p.ShowMessageAsync(message, MessageType.BlueNormal)); + } + + /// + /// Easier way to show a blue message to the player. + /// + /// The message resource key. + public ValueTask ShowBlueMessageAsync(string message) + { + return this.InvokeViewPlugInAsync(p => p.ShowMessageAsync(message, MessageType.BlueNormal)); + } + /// public async ValueTask AttackByAsync(IAttacker attacker, SkillEntry? skill, bool isCombo, double damageFactor = 1.0) { diff --git a/src/GameLogic/PlayerActions/Duel/DuelActions.cs b/src/GameLogic/PlayerActions/Duel/DuelActions.cs index 7c29485a3..8ea1f35e9 100644 --- a/src/GameLogic/PlayerActions/Duel/DuelActions.cs +++ b/src/GameLogic/PlayerActions/Duel/DuelActions.cs @@ -27,13 +27,13 @@ public async ValueTask HandleDuelRequestAsync(Player player, Player target) if (player.DuelRoom is not null) { - await player.ShowMessageAsync("You are already in a duel.").ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.AlreadyInDuel)).ConfigureAwait(false); return; } if (target.DuelRoom is not null) { - await player.ShowMessageAsync("The other player is already in a duel.").ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.OtherPlayerAlreadyInDuel)).ConfigureAwait(false); return; } @@ -168,7 +168,7 @@ public async ValueTask HandleDuelChannelJoinRequestAsync(Player player, byte req if (duelRoom.Spectators.Count >= config.MaximumSpectatorsPerDuelRoom) { player.Logger.LogWarning($"Player {player.Name} tried to join duel channel with index {requestedDuelIndex}, but it is full."); - await player.ShowMessageAsync("The duel channel is full.").ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.DuelChannelIsFull)).ConfigureAwait(false); return; } @@ -182,7 +182,7 @@ public async ValueTask HandleDuelChannelJoinRequestAsync(Player player, byte req if (!await duelRoom.TryAddSpectatorAsync(player).ConfigureAwait(false)) { - await player.ShowMessageAsync("The duel channel is full.").ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.DuelChannelIsFull)).ConfigureAwait(false); } } @@ -255,53 +255,53 @@ private static async ValueTask CheckIfDuelCanBeStartedAsync(Player player, if (player.CurrentMap != target.CurrentMap) { - await player.ShowMessageAsync("You can only duel players which are in the same map.").ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.DuelRequestMustBeOnSameMap)).ConfigureAwait(false); return false; } if (player.CurrentMiniGame is not null) { - await player.ShowMessageAsync("You cannot start a duel during a mini game.").ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.NoDuelDuringMiniGame)).ConfigureAwait(false); return false; } if (selectedCharacter.State >= HeroState.PlayerKiller2ndStage) { - await player.ShowMessageAsync("You cannot start a duel while you are a player killer.").ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.NoDuelWhileBeingPlayerKiller)).ConfigureAwait(false); return false; } if (targetCharacter.State >= HeroState.PlayerKiller2ndStage) { - await player.ShowMessageAsync("You cannot start a duel with a player killer.").ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.NoDuelWithPlayerKiller)).ConfigureAwait(false); return false; } if (player.GuildWarContext?.State is GuildWarState.Requested or GuildWarState.Started || target.GuildWarContext?.State is GuildWarState.Requested or GuildWarState.Started) { - await player.ShowMessageAsync("You cannot start a duel during guild war.").ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.NoDuelDuringGuildWar)).ConfigureAwait(false); return false; } if (player.IsAnySelfDefenseActive() || target.IsAnySelfDefenseActive()) { - await player.ShowMessageAsync("You cannot start a duel with active self-defense.").ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.NoDuelDuringSelfDefense)).ConfigureAwait(false); return false; } if (player.OpenedNpc is not null || target.OpenedNpc is not null) { - await player.ShowMessageAsync("You cannot start a duel when a NPC dialog is opened.").ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.NoDuelWithOpenedNpcDialog)).ConfigureAwait(false); return false; } if (player.PlayerState.CurrentState != PlayerState.EnteredWorld || target.PlayerState.CurrentState != PlayerState.EnteredWorld) { - await player.ShowMessageAsync("You cannot start a duel when one of the players has the wrong state.").ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.NoDuelWithWrongState)).ConfigureAwait(false); return false; } diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/SiegePotionConsumeHandlerPlugIn.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/SiegePotionConsumeHandlerPlugIn.cs index 1200991c7..721f89a11 100644 --- a/src/GameLogic/PlayerActions/ItemConsumeActions/SiegePotionConsumeHandlerPlugIn.cs +++ b/src/GameLogic/PlayerActions/ItemConsumeActions/SiegePotionConsumeHandlerPlugIn.cs @@ -41,7 +41,7 @@ public override async ValueTask ConsumeItemAsync(Player player, Item item, } else { - await player.ShowMessageAsync("Effect for item not found.").ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.ItemEffectNotFound)).ConfigureAwait(false); } return false; diff --git a/src/GameLogic/PlayerActions/Items/LostMapDroppedPlugIn.cs b/src/GameLogic/PlayerActions/Items/LostMapDroppedPlugIn.cs index 1dc6b1ae9..85b484f35 100644 --- a/src/GameLogic/PlayerActions/Items/LostMapDroppedPlugIn.cs +++ b/src/GameLogic/PlayerActions/Items/LostMapDroppedPlugIn.cs @@ -41,20 +41,20 @@ public async ValueTask HandleItemDropAsync(Player player, Item item, Point targe if (item.Level is < 1 or > 7) { - await player.ShowMessageAsync("The lost map is not valid.").ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.InvalidLostMap)).ConfigureAwait(false); return; } if (player.CurrentMiniGame is not null) { - await player.ShowMessageAsync("Cannot create kalima gate on event map.").ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.NoKalimaGateOnEventMap)).ConfigureAwait(false); return; } var gatePosition = target; if (player.IsAtSafezone() || player.CurrentMap?.Terrain.SafezoneMap[gatePosition.X, gatePosition.Y] is true) { - await player.ShowMessageAsync("Cannot create kalima gate in safe zone.").ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.NoKalimaGateInSafezone)).ConfigureAwait(false); return; } @@ -62,7 +62,7 @@ public async ValueTask HandleItemDropAsync(Player player, Item item, Point targe var gateNpcDef = player.GameContext.Configuration.Monsters.FirstOrDefault(def => def.Number == gateNpcNumber); if (gateNpcDef is null) { - await player.ShowMessageAsync("The gate npc is not defined.").ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.UndefinedGateNpc)).ConfigureAwait(false); return; } @@ -81,7 +81,7 @@ public async ValueTask HandleItemDropAsync(Player player, Item item, Point targe var targetGate = player.GameContext.Configuration.Maps.FirstOrDefault(g => g.Number == KalimaMapNumbers[item.Level - 1])?.ExitGates.FirstOrDefault(); if (targetGate is null) { - await player.ShowMessageAsync("The kalima entrance wasn't found.").ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.KalimaEntranceNotFound)).ConfigureAwait(false); return; } diff --git a/src/GameLogic/PlayerActions/MiniGames/MiniGameOpeningStateRequestAction.cs b/src/GameLogic/PlayerActions/MiniGames/MiniGameOpeningStateRequestAction.cs index 58e5bd6a2..5d57072df 100644 --- a/src/GameLogic/PlayerActions/MiniGames/MiniGameOpeningStateRequestAction.cs +++ b/src/GameLogic/PlayerActions/MiniGames/MiniGameOpeningStateRequestAction.cs @@ -40,11 +40,11 @@ public async ValueTask HandleRequestAsync(Player player, MiniGameType miniGameTy { case MiniGameType.BloodCastle: case MiniGameType.DevilSquare: - await player.ShowMessageAsync("Event map is created on entrance. No fixed time table.").ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.EventMapCreatedOnEntranceWithoutTimetable)).ConfigureAwait(false); break; case MiniGameType.Doppelganger: case MiniGameType.IllusionTemple: - await player.ShowMessageAsync("This event is not implemented yet.").ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.EventNotImplementedYet)).ConfigureAwait(false); break; default: throw new ArgumentOutOfRangeException($"Unhandled event type {miniGameType}."); diff --git a/src/GameLogic/PlugIns/ChatCommands/AddStatChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/AddStatChatCommandPlugIn.cs index 6146025c9..6f34cbbf7 100644 --- a/src/GameLogic/PlugIns/ChatCommands/AddStatChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/AddStatChatCommandPlugIn.cs @@ -33,34 +33,27 @@ public class AddStatChatCommandPlugIn : IChatCommandPlugIn /// public virtual async ValueTask HandleCommandAsync(Player player, string command) { - try + if (player.SelectedCharacter is null) { - if (player.SelectedCharacter is null) - { - return; - } - - var arguments = command.ParseArguments(); - var attribute = this.GetAttribute(player, arguments.StatType); - var selectedCharacter = player.SelectedCharacter; - - if (!selectedCharacter.CanIncreaseStats(arguments.Amount)) - { - return; - } - - if (player.CurrentMiniGame is not null) - { - await player.ShowMessageAsync("Adding multiple points is not allowed when playing a mini game.").ConfigureAwait(false); - return; - } - - await this._action.IncreaseStatsAsync(player, attribute, arguments.Amount).ConfigureAwait(false); + return; } - catch (ArgumentException e) + + var arguments = command.ParseArguments(); + var attribute = this.GetAttribute(player, arguments.StatType); + var selectedCharacter = player.SelectedCharacter; + + if (!selectedCharacter.CanIncreaseStats(arguments.Amount)) + { + return; + } + + if (player.CurrentMiniGame is not null) { - await player.ShowMessageAsync(e.Message).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(PlayerMessage.AddingMultiplePointsWhileMiniGameNotAllowed).ConfigureAwait(false); + return; } + + await this._action.IncreaseStatsAsync(player, attribute, arguments.Amount).ConfigureAwait(false); } private AttributeDefinition GetAttribute(Player player, string? statType) diff --git a/src/GameLogic/PlugIns/ChatCommands/Arguments/ChangeLanguageChatCommandArgs.cs b/src/GameLogic/PlugIns/ChatCommands/Arguments/ChangeLanguageChatCommandArgs.cs new file mode 100644 index 000000000..d64ed9164 --- /dev/null +++ b/src/GameLogic/PlugIns/ChatCommands/Arguments/ChangeLanguageChatCommandArgs.cs @@ -0,0 +1,17 @@ +// +// Licensed under the MIT License. See LICENSE file in the project root for full license information. +// + +namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands.Arguments; + +/// +/// Arguments used by >. +/// +public class ChangeLanguageChatCommandArgs : ArgumentsBase +{ + /// + /// Gets or sets the iso 2/3 language code of the requested language. + /// + [Argument("isoCode")] + public string? IsoLanguageCode { get; set; } +} \ No newline at end of file diff --git a/src/GameLogic/PlugIns/ChatCommands/ChangeLanguageChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/ChangeLanguageChatCommandPlugIn.cs new file mode 100644 index 000000000..f85661feb --- /dev/null +++ b/src/GameLogic/PlugIns/ChatCommands/ChangeLanguageChatCommandPlugIn.cs @@ -0,0 +1,67 @@ +// +// Licensed under the MIT License. See LICENSE file in the project root for full license information. +// + +namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; + +using System.Globalization; +using System.Runtime.InteropServices; +using MUnique.OpenMU.GameLogic.PlugIns.ChatCommands.Arguments; +using MUnique.OpenMU.PlugIns; + +/// +/// A chat command plugin which handles the language change command. +/// +[Guid("06870B25-3240-49CF-ADD4-F3060EA1FA7D")] +[PlugIn] +[Display(Name = "Change language command", Description = "Handles the chat command '/language '. Changes the language of the account.")] +[ChatCommandHelp(Command, "Changes the language of the account.", typeof(ChangeLanguageChatCommandArgs), CharacterStatus.Normal)] +public class ChangeLanguageChatCommandPlugIn : ChatCommandPlugInBase +{ + private const string Command = "/language"; + + /// + public override string Key => Command; + + /// + public override CharacterStatus MinCharacterStatusRequirement => CharacterStatus.Normal; + + /// + protected override async ValueTask DoHandleCommandAsync(Player player, ChangeLanguageChatCommandArgs arguments) + { + var languages = CultureInfo + .GetCultures(CultureTypes.AllCultures) + .Where(c => !object.Equals(c, CultureInfo.InvariantCulture)) + .Where(c => c is { IsNeutralCulture: true, TwoLetterISOLanguageName: "en" } + || PlayerMessage.ResourceManager.GetResourceSet(c, true, false) is not null) + .ToList(); + + if (string.IsNullOrWhiteSpace(arguments.IsoLanguageCode)) + { + await ShowAvailableLanguagesAsync(player, languages).ConfigureAwait(false); + return; + } + + var requestedCulture = languages.FirstOrDefault(cu => cu.TwoLetterISOLanguageName == arguments.IsoLanguageCode + || cu.ThreeLetterISOLanguageName == arguments.IsoLanguageCode); + if (requestedCulture is null) + { + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.RequestedLanguageNotFound), arguments.IsoLanguageCode).ConfigureAwait(false); + await ShowAvailableLanguagesAsync(player, languages).ConfigureAwait(false); + } + else + { + player.Culture = requestedCulture; + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.LanguageChanged), requestedCulture.NativeName, requestedCulture.TwoLetterISOLanguageName).ConfigureAwait(false); + } + } + + private static async ValueTask ShowAvailableLanguagesAsync(Player player, List languages) + { + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.AvailableLanguagesCaption)).ConfigureAwait(false); + foreach (var lang in languages.OrderBy(l => l.TwoLetterISOLanguageName)) + { + await player.ShowBlueMessageAsync($" {lang.TwoLetterISOLanguageName} - {lang.NativeName} / {lang.EnglishName}").ConfigureAwait(false); + } + } +} \ No newline at end of file diff --git a/src/GameLogic/PlugIns/ChatCommands/CharInfoChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/CharInfoChatCommandPlugIn.cs index 5a01f4a73..30fcf65d4 100644 --- a/src/GameLogic/PlugIns/ChatCommands/CharInfoChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/CharInfoChatCommandPlugIn.cs @@ -8,6 +8,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; using System.Runtime.InteropServices; using MUnique.OpenMU.DataModel.Entities; using MUnique.OpenMU.GameLogic.PlugIns.ChatCommands.Arguments; +using MUnique.OpenMU.GameLogic.Views; +using MUnique.OpenMU.Interfaces; using MUnique.OpenMU.PlugIns; /// @@ -88,4 +90,16 @@ private async ValueTask ShowAllLinesMessageToAsync(Player gameMaster, string? me await this.ShowMessageToAsync(gameMaster, line).ConfigureAwait(false); } } + + /// + /// Shows a message to a player. + /// + /// The player. + /// The message. + /// The message type. + [Obsolete("Use localized messages")] + private ValueTask ShowMessageToAsync(Player player, string message, MessageType messageType = MessageType.BlueNormal) + { + return player.InvokeViewPlugInAsync(p => p.ShowMessageAsync(message, messageType)); + } } \ No newline at end of file diff --git a/src/GameLogic/PlugIns/ChatCommands/ChatBanCharChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/ChatBanCharChatCommandPlugIn.cs index 4de531de1..812c4dda2 100644 --- a/src/GameLogic/PlugIns/ChatCommands/ChatBanCharChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/ChatBanCharChatCommandPlugIn.cs @@ -46,9 +46,9 @@ protected override async ValueTask DoHandleCommandAsync(Player gameMaster, ChatB await this.ChangeAccountChatBanUntilAsync(player, DateTime.UtcNow.AddMinutes(arguments.DurationMinutes)).ConfigureAwait(false); // Send ban notice to Game Master - await this.ShowMessageToAsync(gameMaster, $"[{this.Key}] Account from {arguments.CharacterName} chat banned for {arguments.DurationMinutes} minutes").ConfigureAwait(false); + await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.AccountChatBannedResult), this.Key, arguments.CharacterName, arguments.DurationMinutes).ConfigureAwait(false); // Send ban notice to character - await this.ShowMessageToAsync(player, $"You are chat banned for {arguments.DurationMinutes} minutes").ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.YouAreChatBanned), arguments.DurationMinutes).ConfigureAwait(false); } } \ No newline at end of file diff --git a/src/GameLogic/PlugIns/ChatCommands/ChatCommandPlugInBase.cs b/src/GameLogic/PlugIns/ChatCommands/ChatCommandPlugInBase.cs index 2dc63c522..ae40e5aca 100644 --- a/src/GameLogic/PlugIns/ChatCommands/ChatCommandPlugInBase.cs +++ b/src/GameLogic/PlugIns/ChatCommands/ChatCommandPlugInBase.cs @@ -29,9 +29,13 @@ public virtual async ValueTask HandleCommandAsync(Player player, string command) var arguments = command.ParseArguments(); await this.DoHandleCommandAsync(player, arguments).ConfigureAwait(false); } + catch (LocalizableExceptionBase ex) + { + await player.ShowLocalizedBlueMessageAsync(ex.ResourceKey, ex.FormatArguments).ConfigureAwait(false); + } catch (ArgumentException argEx) { - await this.ShowMessageToAsync(player, $"[{this.Key}] {argEx.Message}").ConfigureAwait(false); + await player.ShowBlueMessageAsync($"[{this.Key}] {argEx.Message}").ConfigureAwait(false); } catch (Exception ex) { @@ -46,17 +50,6 @@ public virtual async ValueTask HandleCommandAsync(Player player, string command) /// The arguments. protected abstract ValueTask DoHandleCommandAsync(Player player, T arguments); - /// - /// Shows a message to a player. - /// - /// The player. - /// The message. - /// The message type. - protected ValueTask ShowMessageToAsync(Player player, string message, MessageType messageType = MessageType.BlueNormal) - { - return player.InvokeViewPlugInAsync(p => p.ShowMessageAsync(message, messageType)); - } - /// /// Gets a player by his character name. /// diff --git a/src/GameLogic/PlugIns/ChatCommands/ChatUnbanCharChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/ChatUnbanCharChatCommandPlugIn.cs index eb9b3f7c9..d29df478a 100644 --- a/src/GameLogic/PlugIns/ChatCommands/ChatUnbanCharChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/ChatUnbanCharChatCommandPlugIn.cs @@ -41,9 +41,9 @@ protected override async ValueTask DoHandleCommandAsync(Player gameMaster, ChatU await this.ChangeAccountChatBanUntilAsync(player, null).ConfigureAwait(false); // Send unban notice to Game Master - await this.ShowMessageToAsync(gameMaster, $"[{this.Key}] The chat ban for the account from {arguments.CharacterName} has been removed.").ConfigureAwait(false); + await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.ChatBanRemoved), this.Key, arguments.CharacterName).ConfigureAwait(false); // Send unban notice to character - await this.ShowMessageToAsync(player, $"Your chat ban has been removed by a gamemaster.").ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.YourChatBanRemovedByGameMaster)).ConfigureAwait(false); } } \ No newline at end of file diff --git a/src/GameLogic/PlugIns/ChatCommands/ClearInventoryChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/ClearInventoryChatCommandPlugIn.cs index 07ba25ca1..320c4dbee 100644 --- a/src/GameLogic/PlugIns/ChatCommands/ClearInventoryChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/ClearInventoryChatCommandPlugIn.cs @@ -5,15 +5,7 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; using System.ComponentModel.DataAnnotations; -using System.Globalization; using System.Runtime.InteropServices; -using MUnique.OpenMU.DataModel.Configuration; -using MUnique.OpenMU.GameLogic.Attributes; -using MUnique.OpenMU.GameLogic.NPC; -using MUnique.OpenMU.GameLogic.PlayerActions; -using MUnique.OpenMU.GameLogic.Views; -using MUnique.OpenMU.GameLogic.Views.Inventory; -using MUnique.OpenMU.Interfaces; using MUnique.OpenMU.PlugIns; /// @@ -26,7 +18,6 @@ public class ClearInventoryChatCommandPlugIn : ChatCommandPlugInBase pendingConfirmations = new(); @@ -65,7 +56,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments if (targetPlayer?.SelectedCharacter is null || !targetPlayer.SelectedCharacter.Name.Equals(characterName, StringComparison.OrdinalIgnoreCase)) { - await this.ShowMessageToAsync(player, string.Format(CultureInfo.InvariantCulture, CharacterNotFoundMessage, characterName)).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), characterName).ConfigureAwait(false); return; } } @@ -82,7 +73,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments if (!this.pendingConfirmations.TryGetValue(playerId, out var confirmationTime) || (DateTime.UtcNow - confirmationTime).TotalSeconds > ConfirmationTimeoutSeconds) { this.pendingConfirmations[playerId] = DateTime.UtcNow; - await this.ShowMessageToAsync(player, configuration.ConfirmationMessage).ConfigureAwait(false); + await player.ShowBlueMessageAsync(configuration.ConfirmationMessage).ConfigureAwait(false); return; } @@ -101,7 +92,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments if (removeMoney && !player.TryRemoveMoney(configuration.MoneyCost)) { - await this.ShowMessageToAsync(player, configuration.NotEnoughMoneyMessage).ConfigureAwait(false); + await player.ShowBlueMessageAsync(configuration.NotEnoughMoneyMessage).ConfigureAwait(false); return; } @@ -110,7 +101,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments await targetPlayer.DestroyInventoryItemAsync(item).ConfigureAwait(false); } - await this.ShowMessageToAsync(player, configuration.InventoryClearedMessage).ConfigureAwait(false); + await player.ShowBlueMessageAsync(configuration.InventoryClearedMessage).ConfigureAwait(false); } /// @@ -126,6 +117,7 @@ public class Arguments : ArgumentsBase /// /// The configuration of a . + /// TODO: Make localizable. /// public class ClearInventoryConfiguration { diff --git a/src/GameLogic/PlugIns/ChatCommands/CommandExtensions.cs b/src/GameLogic/PlugIns/ChatCommands/CommandExtensions.cs index 5b883276c..3e4282352 100644 --- a/src/GameLogic/PlugIns/ChatCommands/CommandExtensions.cs +++ b/src/GameLogic/PlugIns/ChatCommands/CommandExtensions.cs @@ -6,9 +6,6 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; using System.Globalization; using System.Reflection; -using MUnique.OpenMU.GameLogic.Views; -using MUnique.OpenMU.Interfaces; -using MUnique.OpenMU.Persistence; /// /// Extensions to make the process of creating more commands easier. @@ -129,16 +126,6 @@ public static string CreateUsage(Type argumentsType, string commandName) } } - /// - /// Easier way to show a message to a player. - /// - /// The player. - /// The message. - public static ValueTask ShowMessageAsync(this Player player, string message) - { - return player.InvokeViewPlugInAsync(p => p.ShowMessageAsync(message, MessageType.BlueNormal)); - } - private static void ReadNamedArguments(object instance, IList properties, IList arguments) { var argumentProperties = properties.Where(property => property.GetCustomAttribute() is { }).ToList(); diff --git a/src/GameLogic/PlugIns/ChatCommands/CreateMonsterChatCommand.cs b/src/GameLogic/PlugIns/ChatCommands/CreateMonsterChatCommand.cs index 334bc3866..aa6a30958 100644 --- a/src/GameLogic/PlugIns/ChatCommands/CreateMonsterChatCommand.cs +++ b/src/GameLogic/PlugIns/ChatCommands/CreateMonsterChatCommand.cs @@ -31,7 +31,7 @@ protected override async ValueTask DoHandleCommandAsync(Player gameMaster, Creat var monsterDef = gameMaster.GameContext.Configuration.Monsters.FirstOrDefault(m => m.Number == arguments.MonsterNumber); if (monsterDef is null) { - await this.ShowMessageToAsync(gameMaster, $"Monster with number {arguments.MonsterNumber} not found.").ConfigureAwait(false); + await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.MonsterNotFoundByNumber), arguments.MonsterNumber).ConfigureAwait(false); return; } @@ -56,6 +56,6 @@ protected override async ValueTask DoHandleCommandAsync(Player gameMaster, Creat await gameMap.AddAsync(monster).ConfigureAwait(false); monster.OnSpawn(); - await this.ShowMessageToAsync(gameMaster, $"Monster with number {arguments.MonsterNumber} created, id: {monster.Id}.").ConfigureAwait(false); + await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.MonsterCreatedByGameMaster), arguments.MonsterNumber, monster.Id).ConfigureAwait(false); } } \ No newline at end of file diff --git a/src/GameLogic/PlugIns/ChatCommands/DisconnectChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/DisconnectChatCommandPlugIn.cs index 15639fb01..a5c750e3a 100644 --- a/src/GameLogic/PlugIns/ChatCommands/DisconnectChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/DisconnectChatCommandPlugIn.cs @@ -32,7 +32,7 @@ protected override async ValueTask DoHandleCommandAsync(Player gameMaster, Disco if (!player.Name.Equals(gameMaster.Name)) { - await this.ShowMessageToAsync(gameMaster, $"[{this.Key}] {player.Name} has been disconnected.").ConfigureAwait(false); + await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CommandResultPlayerDisconnected), this.Key, player.Name).ConfigureAwait(false); } } } \ No newline at end of file diff --git a/src/GameLogic/PlugIns/ChatCommands/GetLevelChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/GetLevelChatCommandPlugIn.cs index 73679950c..bb62062af 100644 --- a/src/GameLogic/PlugIns/ChatCommands/GetLevelChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/GetLevelChatCommandPlugIn.cs @@ -4,11 +4,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; -using System.Globalization; using System.Runtime.InteropServices; using MUnique.OpenMU.GameLogic.Attributes; -using MUnique.OpenMU.GameLogic.Views.Character; -using MUnique.OpenMU.Interfaces; using MUnique.OpenMU.PlugIns; /// @@ -21,8 +18,6 @@ public class GetLevelChatCommandPlugIn : ChatCommandPlugInBase public override string Key => Command; @@ -40,7 +35,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments if (targetPlayer?.SelectedCharacter is null || !targetPlayer.SelectedCharacter.Name.Equals(characterName, StringComparison.OrdinalIgnoreCase)) { - await this.ShowMessageToAsync(player, string.Format(CultureInfo.InvariantCulture, CharacterNotFoundMessage, characterName)).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), characterName).ConfigureAwait(false); return; } } @@ -50,7 +45,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments return; } - await this.ShowMessageToAsync(player, string.Format(CultureInfo.InvariantCulture, LevelGetMessage, targetPlayer.SelectedCharacter.Name, targetPlayer.Attributes![Stats.Level])).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.LevelInformation), targetPlayer.SelectedCharacter.Name, targetPlayer.Attributes![Stats.Level]).ConfigureAwait(false); } /// diff --git a/src/GameLogic/PlugIns/ChatCommands/GetLevelUpPointsChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/GetLevelUpPointsChatCommandPlugIn.cs index 28d553515..c57341198 100644 --- a/src/GameLogic/PlugIns/ChatCommands/GetLevelUpPointsChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/GetLevelUpPointsChatCommandPlugIn.cs @@ -4,10 +4,7 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; -using System.Globalization; using System.Runtime.InteropServices; -using MUnique.OpenMU.GameLogic.Views.Character; -using MUnique.OpenMU.Interfaces; using MUnique.OpenMU.PlugIns; /// @@ -20,8 +17,6 @@ public class GetLevelUpPointsChatCommandPlugIn : ChatCommandPlugInBase public override string Key => Command; @@ -39,7 +34,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments if (targetPlayer?.SelectedCharacter is null || !targetPlayer.SelectedCharacter.Name.Equals(characterName, StringComparison.OrdinalIgnoreCase)) { - await this.ShowMessageToAsync(player, string.Format(CultureInfo.InvariantCulture, CharacterNotFoundMessage, characterName)).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), characterName).ConfigureAwait(false); return; } } @@ -49,7 +44,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments return; } - await this.ShowMessageToAsync(player, string.Format(LevelUpPointsGetMessage, targetPlayer.SelectedCharacter.Name, targetPlayer.SelectedCharacter.LevelUpPoints)).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.LevelUpPointsInfo), targetPlayer.SelectedCharacter.Name, targetPlayer.SelectedCharacter.LevelUpPoints).ConfigureAwait(false); } /// diff --git a/src/GameLogic/PlugIns/ChatCommands/GetMasterLevelChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/GetMasterLevelChatCommandPlugIn.cs index c8d39e4d6..81aed931c 100644 --- a/src/GameLogic/PlugIns/ChatCommands/GetMasterLevelChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/GetMasterLevelChatCommandPlugIn.cs @@ -21,8 +21,6 @@ public class GetMasterLevelChatCommandPlugIn : ChatCommandPlugInBase public override string Key => Command; @@ -40,7 +38,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments if (targetPlayer?.SelectedCharacter is null || !targetPlayer.SelectedCharacter.Name.Equals(characterName, StringComparison.OrdinalIgnoreCase)) { - await this.ShowMessageToAsync(player, string.Format(CultureInfo.InvariantCulture, CharacterNotFoundMessage, characterName)).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), characterName).ConfigureAwait(false); return; } } @@ -50,7 +48,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments return; } - await this.ShowMessageToAsync(player, string.Format(CultureInfo.InvariantCulture, MasterLevelGetMessage, targetPlayer.SelectedCharacter.Name, targetPlayer.Attributes![Stats.MasterLevel])).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.MasterLevelInfo), targetPlayer.SelectedCharacter.Name, targetPlayer.Attributes![Stats.MasterLevel]).ConfigureAwait(false); } /// diff --git a/src/GameLogic/PlugIns/ChatCommands/GetMasterLevelUpPointsChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/GetMasterLevelUpPointsChatCommandPlugIn.cs index c5bcb433d..ba93e11b8 100644 --- a/src/GameLogic/PlugIns/ChatCommands/GetMasterLevelUpPointsChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/GetMasterLevelUpPointsChatCommandPlugIn.cs @@ -4,10 +4,7 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; -using System.Globalization; using System.Runtime.InteropServices; -using MUnique.OpenMU.GameLogic.Views.Character; -using MUnique.OpenMU.Interfaces; using MUnique.OpenMU.PlugIns; /// @@ -20,8 +17,6 @@ public class GetMasterLevelUpPointsChatCommandPlugIn : ChatCommandPlugInBase public override string Key => Command; @@ -39,7 +34,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments if (targetPlayer?.SelectedCharacter is null || !targetPlayer.SelectedCharacter.Name.Equals(characterName, StringComparison.OrdinalIgnoreCase)) { - await this.ShowMessageToAsync(player, string.Format(CultureInfo.InvariantCulture, CharacterNotFoundMessage, characterName)).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), characterName).ConfigureAwait(false); return; } } @@ -49,7 +44,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments return; } - await this.ShowMessageToAsync(player, string.Format(CultureInfo.InvariantCulture, MasterLevelUpPointsGetMessage, targetPlayer.SelectedCharacter.Name, targetPlayer.SelectedCharacter.MasterLevelUpPoints)).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.MasterLevelUpPointsInfo), targetPlayer.SelectedCharacter.Name, targetPlayer.SelectedCharacter.MasterLevelUpPoints).ConfigureAwait(false); } /// diff --git a/src/GameLogic/PlugIns/ChatCommands/GetMoneyChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/GetMoneyChatCommandPlugIn.cs index b0bd8b811..4ac15eb70 100644 --- a/src/GameLogic/PlugIns/ChatCommands/GetMoneyChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/GetMoneyChatCommandPlugIn.cs @@ -4,10 +4,7 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; -using System.Globalization; using System.Runtime.InteropServices; -using MUnique.OpenMU.GameLogic.Views.Character; -using MUnique.OpenMU.Interfaces; using MUnique.OpenMU.PlugIns; /// @@ -20,8 +17,6 @@ public class GetMoneyChatCommandPlugIn : ChatCommandPlugInBase public override string Key => Command; @@ -39,7 +34,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments if (targetPlayer?.SelectedCharacter is null || !targetPlayer.SelectedCharacter.Name.Equals(characterName, StringComparison.OrdinalIgnoreCase)) { - await this.ShowMessageToAsync(player, string.Format(CultureInfo.InvariantCulture, CharacterNotFoundMessage, characterName)).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), characterName).ConfigureAwait(false); return; } } @@ -49,7 +44,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments return; } - await this.ShowMessageToAsync(player, string.Format(CultureInfo.InvariantCulture, MoneyGetMessage, targetPlayer.SelectedCharacter.Name, targetPlayer.Money)).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.MoneyInfo), targetPlayer.SelectedCharacter.Name, targetPlayer.Money).ConfigureAwait(false); } /// diff --git a/src/GameLogic/PlugIns/ChatCommands/GetResetsChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/GetResetsChatCommandPlugIn.cs index 8b30198cb..c20924c04 100644 --- a/src/GameLogic/PlugIns/ChatCommands/GetResetsChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/GetResetsChatCommandPlugIn.cs @@ -4,11 +4,9 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; -using System.Globalization; using System.Runtime.InteropServices; using MUnique.OpenMU.GameLogic.Attributes; using MUnique.OpenMU.GameLogic.Resets; -using MUnique.OpenMU.Interfaces; using MUnique.OpenMU.PlugIns; /// @@ -21,9 +19,6 @@ public class GetResetsChatCommandPlugIn : ChatCommandPlugInBase public override string Key => Command; @@ -37,7 +32,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments var configuration = player.GameContext.FeaturePlugIns.GetPlugIn()?.Configuration; if (configuration is null) { - await this.ShowMessageToAsync(player, ResetPluginDisabledMessage).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.ResetSystemInactive)).ConfigureAwait(false); return; } @@ -48,7 +43,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments if (targetPlayer?.SelectedCharacter is null || !targetPlayer.SelectedCharacter.Name.Equals(characterName, StringComparison.OrdinalIgnoreCase)) { - await this.ShowMessageToAsync(player, string.Format(CultureInfo.InvariantCulture, CharacterNotFoundMessage, characterName)).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), characterName).ConfigureAwait(false); return; } } @@ -58,7 +53,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments return; } - await this.ShowMessageToAsync(player, string.Format(CultureInfo.InvariantCulture, ResetsGetMessage, targetPlayer.SelectedCharacter.Name, targetPlayer.Attributes![Stats.Resets])).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.ResetsInfo), targetPlayer.SelectedCharacter.Name, targetPlayer.Attributes![Stats.Resets]).ConfigureAwait(false); } /// diff --git a/src/GameLogic/PlugIns/ChatCommands/GetStatChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/GetStatChatCommandPlugIn.cs index cc281427d..a998cf91b 100644 --- a/src/GameLogic/PlugIns/ChatCommands/GetStatChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/GetStatChatCommandPlugIn.cs @@ -4,7 +4,6 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; -using System.Globalization; using System.Runtime.InteropServices; using MUnique.OpenMU.AttributeSystem; using MUnique.OpenMU.GameLogic.Attributes; @@ -20,8 +19,6 @@ public class GetStatChatCommandPlugIn : ChatCommandPlugInBase public override string Key => Command; @@ -32,37 +29,30 @@ public class GetStatChatCommandPlugIn : ChatCommandPlugInBase protected override async ValueTask DoHandleCommandAsync(Player player, Arguments arguments) { - try + if (arguments is null) { - if (arguments is null) - { - return; - } + return; + } - var targetPlayer = player; - if (arguments.CharacterName is { } characterName) - { - targetPlayer = player.GameContext.GetPlayerByCharacterName(characterName); - if (targetPlayer?.SelectedCharacter is null || - !targetPlayer.SelectedCharacter.Name.Equals(characterName, StringComparison.OrdinalIgnoreCase)) - { - await this.ShowMessageToAsync(player, string.Format(CultureInfo.InvariantCulture, CharacterNotFoundMessage, characterName)).ConfigureAwait(false); - return; - } - } - - if (targetPlayer.SelectedCharacter is not { } selectedCharacter) + var targetPlayer = player; + if (arguments.CharacterName is { } characterName) + { + targetPlayer = player.GameContext.GetPlayerByCharacterName(characterName); + if (targetPlayer?.SelectedCharacter is null || + !targetPlayer.SelectedCharacter.Name.Equals(characterName, StringComparison.OrdinalIgnoreCase)) { + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), characterName).ConfigureAwait(false); return; } - - var attribute = this.GetAttribute(selectedCharacter, arguments.StatType); - await this.ShowMessageToAsync(player, string.Format(CultureInfo.InvariantCulture, StatGetMessage, selectedCharacter.Name, targetPlayer.Attributes![attribute])).ConfigureAwait(false); } - catch (ArgumentException e) + + if (targetPlayer.SelectedCharacter is not { } selectedCharacter) { - await player.ShowMessageAsync(e.Message).ConfigureAwait(false); + return; } + + var attribute = this.GetAttribute(selectedCharacter, arguments.StatType); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.StatPointInfo), selectedCharacter.Name, targetPlayer.Attributes![attribute]).ConfigureAwait(false); } private AttributeDefinition GetAttribute(Character selectedCharacter, string? statType) diff --git a/src/GameLogic/PlugIns/ChatCommands/GuildDisconnectChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/GuildDisconnectChatCommandPlugIn.cs index 5871f9073..4db4f6656 100644 --- a/src/GameLogic/PlugIns/ChatCommands/GuildDisconnectChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/GuildDisconnectChatCommandPlugIn.cs @@ -39,7 +39,7 @@ await gameServerContext.ForEachGuildPlayerAsync(guildId, async guildPlayer => if (!guildPlayer.Name.Equals(gameMaster.Name)) { - await this.ShowMessageToAsync(gameMaster, $"[{this.Key}] {guildPlayer.Name} has been disconnected.").ConfigureAwait(false); + await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.GuildDisconnectResult), this.Key, guildPlayer.Name).ConfigureAwait(false); } }).ConfigureAwait(false); } diff --git a/src/GameLogic/PlugIns/ChatCommands/GuildMoveChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/GuildMoveChatCommandPlugIn.cs index 60e44e005..4d82e4698 100644 --- a/src/GameLogic/PlugIns/ChatCommands/GuildMoveChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/GuildMoveChatCommandPlugIn.cs @@ -41,8 +41,8 @@ await gameServerContext.ForEachGuildPlayerAsync(guildId, async guildPlayer => if (!guildPlayer.Name.Equals(gameMaster.Name)) { - await this.ShowMessageToAsync(guildPlayer, "You have been moved by the game master.").ConfigureAwait(false); - await this.ShowMessageToAsync(gameMaster, $"[{this.Key}] {guildPlayer.Name} has been moved to {exitGate!.Map!.Name} at {guildPlayer.Position.X}, {guildPlayer.Position.Y}").ConfigureAwait(false); + await guildPlayer.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.MovedByGameMaster)).ConfigureAwait(false); + await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.MovedPlayerResult), this.Key, guildPlayer.Name, exitGate!.Map!.Name, guildPlayer.Position.X, guildPlayer.Position.Y).ConfigureAwait(false); } }).ConfigureAwait(false); } diff --git a/src/GameLogic/PlugIns/ChatCommands/HelpCommand.cs b/src/GameLogic/PlugIns/ChatCommands/HelpCommand.cs index faabe65d8..a552cd2cd 100644 --- a/src/GameLogic/PlugIns/ChatCommands/HelpCommand.cs +++ b/src/GameLogic/PlugIns/ChatCommands/HelpCommand.cs @@ -34,15 +34,16 @@ public async ValueTask HandleCommandAsync(Player player, string command) .FirstOrDefault(x => x.Command.Equals("/" + commandName, StringComparison.InvariantCultureIgnoreCase)); if (commandPluginAttribute is null) { - await player.ShowMessageAsync($"The command '{commandName}' does not exists.").ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CommandDoesNotExist), commandName ?? string.Empty).ConfigureAwait(false); return; } - await player.ShowMessageAsync(commandPluginAttribute.Usage).ConfigureAwait(false); + // TODO: Localize + await player.ShowBlueMessageAsync(commandPluginAttribute.Usage).ConfigureAwait(false); } catch (ArgumentException e) { - await player.ShowMessageAsync(e.Message).ConfigureAwait(false); + await player.ShowBlueMessageAsync(e.Message).ConfigureAwait(false); } } diff --git a/src/GameLogic/PlugIns/ChatCommands/ItemChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/ItemChatCommandPlugIn.cs index 9914aacec..c74d8ec94 100644 --- a/src/GameLogic/PlugIns/ChatCommands/ItemChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/ItemChatCommandPlugIn.cs @@ -8,6 +8,7 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; using MUnique.OpenMU.DataModel.Configuration.Items; using MUnique.OpenMU.GameLogic.Attributes; using MUnique.OpenMU.GameLogic.PlugIns.ChatCommands.Arguments; +using MUnique.OpenMU.Interfaces; using MUnique.OpenMU.PlugIns; /// @@ -36,7 +37,7 @@ protected override async ValueTask DoHandleCommandAsync(Player gameMaster, ItemC var dropCoordinates = gameMaster.CurrentMap.Terrain.GetRandomCoordinate(gameMaster.Position, 1); var droppedItem = new DroppedItem(item, dropCoordinates, gameMaster.CurrentMap, gameMaster); await gameMaster.CurrentMap.AddAsync(droppedItem).ConfigureAwait(false); - await this.ShowMessageToAsync(gameMaster, $"[{this.Key}] {item} created").ConfigureAwait(false); + await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.ItemCreatedResult), this.Key, item).ConfigureAwait(false); } } @@ -61,14 +62,21 @@ private static ItemDefinition GetItemDefinition(Player gameMaster, ItemChatComma { return gameMaster.GameContext.Configuration.Items .FirstOrDefault(def => def.Group == arguments.Group && def.Number == arguments.Number) - ?? throw new ArgumentException($"{arguments.Group} {arguments.Number} does not exist."); + ?? throw new LocalizableException( + new(string.Format(PlayerMessage.ItemGroupNumberNotExists, arguments.Group, arguments.Number)), + nameof(PlayerMessage.ItemGroupNumberNotExists), + arguments.Group, + arguments.Number); } private static byte GetItemLevel(ItemDefinition itemDefinition, ItemChatCommandArgs arguments) { if (arguments.Level > itemDefinition.MaximumItemLevel) { - throw new ArgumentException($"Level cannot be greater than {itemDefinition.MaximumItemLevel}."); + throw new LocalizableException( + new(string.Format(PlayerMessage.ItemLevelExceeded, itemDefinition.MaximumItemLevel)), + nameof(PlayerMessage.ItemLevelExceeded), + itemDefinition.MaximumItemLevel); } return arguments.Level; diff --git a/src/GameLogic/PlugIns/ChatCommands/ListCommand.cs b/src/GameLogic/PlugIns/ChatCommands/ListCommand.cs index 9de7b24c7..026ad30cd 100644 --- a/src/GameLogic/PlugIns/ChatCommands/ListCommand.cs +++ b/src/GameLogic/PlugIns/ChatCommands/ListCommand.cs @@ -30,7 +30,7 @@ public async ValueTask HandleCommandAsync(Player player, string command) foreach (var commandUsage in commands.Select(x => x.Usage)) { - await player.ShowMessageAsync(commandUsage).ConfigureAwait(false); + await player.ShowBlueMessageAsync(commandUsage).ConfigureAwait(false); } } } \ No newline at end of file diff --git a/src/GameLogic/PlugIns/ChatCommands/MoveChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/MoveChatCommandPlugIn.cs index 25543a530..16c2c0042 100644 --- a/src/GameLogic/PlugIns/ChatCommands/MoveChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/MoveChatCommandPlugIn.cs @@ -39,8 +39,8 @@ protected override async ValueTask DoHandleCommandAsync(Player sender, MoveChatC if (!targetPlayer.Name.Equals(sender.Name)) { - await this.ShowMessageToAsync(targetPlayer, "You have been moved by the game master.").ConfigureAwait(false); - await this.ShowMessageToAsync(sender, $"[{this.Key}] {targetPlayer.Name} has been moved to {exitGate!.Map!.Name} at {targetPlayer.Position.X}, {targetPlayer.Position.Y}").ConfigureAwait(false); + await targetPlayer.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.MovedByGameMaster)).ConfigureAwait(false); + await sender.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.MovedPlayerResult), this.Key, targetPlayer.Name, exitGate!.Map!.Name, targetPlayer.Position.X, targetPlayer.Position.Y).ConfigureAwait(false); } } else diff --git a/src/GameLogic/PlugIns/ChatCommands/MoveMonsterChatCommand.cs b/src/GameLogic/PlugIns/ChatCommands/MoveMonsterChatCommand.cs index 789842ebf..1e52aea96 100644 --- a/src/GameLogic/PlugIns/ChatCommands/MoveMonsterChatCommand.cs +++ b/src/GameLogic/PlugIns/ChatCommands/MoveMonsterChatCommand.cs @@ -31,7 +31,7 @@ protected override async ValueTask DoHandleCommandAsync(Player gameMaster, MoveM var monster = gameMaster.ObservingBuckets.SelectMany(b => b).OfType().FirstOrDefault(m => m.Id == arguments.Id); if (monster is null) { - await this.ShowMessageToAsync(gameMaster, $"Monster with id {arguments.Id} not found.").ConfigureAwait(false); + await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.MonsterNotFoundById), arguments.Id).ConfigureAwait(false); return; } diff --git a/src/GameLogic/PlugIns/ChatCommands/NpcChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/NpcChatCommandPlugIn.cs index 8c3f11d47..58abcad11 100644 --- a/src/GameLogic/PlugIns/ChatCommands/NpcChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/NpcChatCommandPlugIn.cs @@ -5,15 +5,11 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; using System.ComponentModel.DataAnnotations; -using System.Globalization; using System.Runtime.InteropServices; -using MUnique.OpenMU.AttributeSystem; using MUnique.OpenMU.DataModel.Configuration; using MUnique.OpenMU.GameLogic.Attributes; using MUnique.OpenMU.GameLogic.NPC; using MUnique.OpenMU.GameLogic.PlayerActions; -using MUnique.OpenMU.GameLogic.Views; -using MUnique.OpenMU.Interfaces; using MUnique.OpenMU.PlugIns; /// @@ -26,8 +22,6 @@ public class NpcChatCommandPlugIn : ChatCommandPlugInBase= CharacterStatus.GameMaster) { - await this.ShowMessageToAsync(player, InvalidMerchantMessage).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.NpcIsNotMerchant)).ConfigureAwait(false); } return; @@ -86,7 +80,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments if (configuration.MinimumVipLevel > 0 && (player.Attributes?[Stats.IsVip] ?? 0) < configuration.MinimumVipLevel) { - await this.ShowMessageToAsync(player, configuration.InsufficientVipLevelMessage).ConfigureAwait(false); + await player.ShowBlueMessageAsync(configuration.InsufficientVipLevelMessage).ConfigureAwait(false); return; } diff --git a/src/GameLogic/PlugIns/ChatCommands/OnlineChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/OnlineChatCommandPlugIn.cs index 39c6772d9..bbe8a7350 100644 --- a/src/GameLogic/PlugIns/ChatCommands/OnlineChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/OnlineChatCommandPlugIn.cs @@ -45,6 +45,6 @@ await gameMasterPlayer.GameContext.ForEachPlayerAsync(player => return Task.CompletedTask; }).ConfigureAwait(false); - await this.ShowMessageToAsync(gameMasterPlayer, $"[{this.Key}] {totalGameMastersCount} GM(s) and {totalCharactersCount} player(s) online").ConfigureAwait(false); + await gameMasterPlayer.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.OnlineCountInfo), this.Key, totalGameMastersCount, totalCharactersCount).ConfigureAwait(false); } } \ No newline at end of file diff --git a/src/GameLogic/PlugIns/ChatCommands/OpenWarehouseChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/OpenWarehouseChatCommandPlugIn.cs index 312f410e4..94c0d97ea 100644 --- a/src/GameLogic/PlugIns/ChatCommands/OpenWarehouseChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/OpenWarehouseChatCommandPlugIn.cs @@ -6,13 +6,10 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; using System.ComponentModel.DataAnnotations; using System.Runtime.InteropServices; -using MUnique.OpenMU.AttributeSystem; using MUnique.OpenMU.DataModel.Configuration; using MUnique.OpenMU.GameLogic.Attributes; using MUnique.OpenMU.GameLogic.NPC; using MUnique.OpenMU.GameLogic.PlayerActions; -using MUnique.OpenMU.GameLogic.Views; -using MUnique.OpenMU.Interfaces; using MUnique.OpenMU.PlugIns; /// @@ -25,7 +22,6 @@ public class OpenWarehouseChatCommandPlugIn : ChatCommandPlugInBase 0 && (player.Attributes?[Stats.IsVip] ?? 0) < configuration.MinimumVipLevel) { - await this.ShowMessageToAsync(player, configuration.InsufficientVipLevelMessage).ConfigureAwait(false); + await player.ShowBlueMessageAsync(configuration.InsufficientVipLevelMessage).ConfigureAwait(false); return; } @@ -63,7 +59,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments { if (player.SelectedCharacter?.CharacterStatus >= CharacterStatus.GameMaster) { - await this.ShowMessageToAsync(player, NoWarehouseNpcMessage).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.NoWarehouseNpcFound)).ConfigureAwait(false); } return; diff --git a/src/GameLogic/PlugIns/ChatCommands/PKChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/PKChatCommandPlugIn.cs index 6e9aa3126..44511bdc0 100644 --- a/src/GameLogic/PlugIns/ChatCommands/PKChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/PKChatCommandPlugIn.cs @@ -32,27 +32,35 @@ protected override async ValueTask DoHandleCommandAsync(Player gameMaster, PkCha { if (arguments.Level < MinPkLevel || arguments.Level > MaxPkLevel) { - throw new ArgumentException($"PK level must be between {MinPkLevel} and {MaxPkLevel}."); + await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.PlayerKillLevelRangeError), MinPkLevel, MaxPkLevel).ConfigureAwait(false); + return; } - if (arguments.Count <= default(int)) + if (arguments.Count <= 0) { - throw new ArgumentException($"PK count must be greater than zero."); + await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.PlayerKillCountMustBePositive)).ConfigureAwait(false); + return; } var targetPlayer = this.GetPlayerByCharacterName(gameMaster, arguments.CharacterName ?? string.Empty); - targetPlayer.SelectedCharacter!.State = HeroState.Normal + arguments.Level; - targetPlayer.SelectedCharacter!.StateRemainingSeconds = (int)TimeSpan.FromHours(arguments.Count).TotalSeconds; - targetPlayer.SelectedCharacter!.PlayerKillCount = arguments.Count; - await targetPlayer.ForEachWorldObserverAsync(p => p.UpdateCharacterHeroStateAsync(targetPlayer), true).ConfigureAwait(false); - - var message = string.Format( - "The state of {0} has been changed to {1} with {2} murders for {3} minutes", - targetPlayer.Name, - targetPlayer.SelectedCharacter!.State, - targetPlayer.SelectedCharacter!.PlayerKillCount, - Math.Round(TimeSpan.FromSeconds(targetPlayer.SelectedCharacter!.StateRemainingSeconds).TotalMinutes)); - - await this.ShowMessageToAsync(gameMaster, $"[{this.Key}] {message}").ConfigureAwait(false); + var character = targetPlayer?.SelectedCharacter; + if (character is null) + { + // logged out in the mean time ... + return; + } + + character.State = HeroState.Normal + arguments.Level; + character.StateRemainingSeconds = (int)TimeSpan.FromHours(arguments.Count).TotalSeconds; + character.PlayerKillCount = arguments.Count; + await targetPlayer!.ForEachWorldObserverAsync(p => p.UpdateCharacterHeroStateAsync(targetPlayer!), true).ConfigureAwait(false); + + await gameMaster.ShowLocalizedBlueMessageAsync( + nameof(PlayerMessage.PlayerKillStateChangeResult), + this.Key, + character.Name, + character.State, + character.PlayerKillCount, + Math.Round(TimeSpan.FromSeconds(character!.StateRemainingSeconds).TotalMinutes)).ConfigureAwait(false); } } \ No newline at end of file diff --git a/src/GameLogic/PlugIns/ChatCommands/PKClearChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/PKClearChatCommandPlugIn.cs index d442c470f..7942a2e18 100644 --- a/src/GameLogic/PlugIns/ChatCommands/PKClearChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/PKClearChatCommandPlugIn.cs @@ -37,9 +37,9 @@ protected override async ValueTask DoHandleCommandAsync(Player gameMaster, PkCle if (!targetPlayer.Name.Equals(gameMaster.Name)) { - await this.ShowMessageToAsync(targetPlayer, $"Your player kills have been cleaned by the game master.").ConfigureAwait(false); + await targetPlayer.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.PkStatusClearedByGameMaster)).ConfigureAwait(false); } - await this.ShowMessageToAsync(gameMaster, $"[{this.Key}] {targetPlayer.Name} kills have been cleaned.").ConfigureAwait(false); + await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.PkClearedResult), this.Key, targetPlayer.Name).ConfigureAwait(false); } } \ No newline at end of file diff --git a/src/GameLogic/PlugIns/ChatCommands/RemoveNpcChatCommand.cs b/src/GameLogic/PlugIns/ChatCommands/RemoveNpcChatCommand.cs index fa60cd79e..c121e2cd4 100644 --- a/src/GameLogic/PlugIns/ChatCommands/RemoveNpcChatCommand.cs +++ b/src/GameLogic/PlugIns/ChatCommands/RemoveNpcChatCommand.cs @@ -31,11 +31,11 @@ protected override async ValueTask DoHandleCommandAsync(Player gameMaster, IdCom var monster = gameMaster.ObservingBuckets.SelectMany(b => b).OfType().FirstOrDefault(m => m.Id == arguments.Id); if (monster is null) { - await this.ShowMessageToAsync(gameMaster, $"NPC with id {arguments.Id} not found.").ConfigureAwait(false); + await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.NpcNotFoundById), arguments.Id).ConfigureAwait(false); return; } monster.Dispose(); - await this.ShowMessageToAsync(gameMaster, $"NPC with id {arguments.Id} removed.").ConfigureAwait(false); + await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.NpcRemovedById), arguments.Id).ConfigureAwait(false); } } \ No newline at end of file diff --git a/src/GameLogic/PlugIns/ChatCommands/SetLevelChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/SetLevelChatCommandPlugIn.cs index ccfb75fd4..c0159c8a8 100644 --- a/src/GameLogic/PlugIns/ChatCommands/SetLevelChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/SetLevelChatCommandPlugIn.cs @@ -4,11 +4,9 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; -using System.Globalization; using System.Runtime.InteropServices; using MUnique.OpenMU.GameLogic.Attributes; using MUnique.OpenMU.GameLogic.Views.Character; -using MUnique.OpenMU.Interfaces; using MUnique.OpenMU.PlugIns; /// @@ -21,9 +19,6 @@ public class SetLevelChatCommandPlugIn : ChatCommandPlugInBase public override string Key => Command; @@ -41,7 +36,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments if (targetPlayer?.SelectedCharacter is null || !targetPlayer.SelectedCharacter.Name.Equals(characterName, StringComparison.OrdinalIgnoreCase)) { - await this.ShowMessageToAsync(player, string.Format(CultureInfo.InvariantCulture, CharacterNotFoundMessage, characterName)).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), characterName).ConfigureAwait(false); return; } } @@ -53,14 +48,14 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments if (arguments is null || arguments.Level < 1 || arguments.Level > targetPlayer.GameContext.Configuration.MaximumLevel) { - await this.ShowMessageToAsync(player, string.Format(CultureInfo.InvariantCulture, InvalidLevelMessage, targetPlayer.GameContext.Configuration.MaximumLevel)).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.InvalidCharacterLevel), targetPlayer.GameContext.Configuration.MaximumLevel).ConfigureAwait(false); return; } targetPlayer.Attributes![Stats.Level] = checked(arguments.Level); await targetPlayer.InvokeViewPlugInAsync(p => p.UpdateLevelAsync()).ConfigureAwait(false); await targetPlayer.ForEachWorldObserverAsync(p => p.ShowEffectAsync(targetPlayer, IShowEffectPlugIn.EffectType.LevelUp), true).ConfigureAwait(false); - await this.ShowMessageToAsync(player, string.Format(CultureInfo.InvariantCulture, LevelSetMessage, arguments.Level)).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.SetLevelResult), arguments.Level).ConfigureAwait(false); } /// diff --git a/src/GameLogic/PlugIns/ChatCommands/SetLevelUpPointsChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/SetLevelUpPointsChatCommandPlugIn.cs index 2777c52e3..c079c24a9 100644 --- a/src/GameLogic/PlugIns/ChatCommands/SetLevelUpPointsChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/SetLevelUpPointsChatCommandPlugIn.cs @@ -20,9 +20,6 @@ public class SetLevelUpPointsChatCommandPlugIn : ChatCommandPlugInBase public override string Key => Command; @@ -40,7 +37,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments if (targetPlayer?.SelectedCharacter is null || !targetPlayer.SelectedCharacter.Name.Equals(characterName, StringComparison.OrdinalIgnoreCase)) { - await this.ShowMessageToAsync(player, string.Format(CultureInfo.InvariantCulture, CharacterNotFoundMessage, characterName)).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), characterName).ConfigureAwait(false); return; } } @@ -52,13 +49,13 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments if (arguments is null || arguments.LevelUpPoints < 0) { - await this.ShowMessageToAsync(player, InvalidLevelUpPointsMessage).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.InvalidLevelUpPoints)).ConfigureAwait(false); return; } targetPlayer.SelectedCharacter.LevelUpPoints = checked(arguments.LevelUpPoints); await targetPlayer.InvokeViewPlugInAsync(p => p.UpdateLevelAsync()).ConfigureAwait(false); - await this.ShowMessageToAsync(player, string.Format(CultureInfo.InvariantCulture, LevelUpPointsSetMessage, arguments.LevelUpPoints)).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.SetLevelUpPointsResult), arguments.LevelUpPoints).ConfigureAwait(false); } /// diff --git a/src/GameLogic/PlugIns/ChatCommands/SetMasterLevelChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/SetMasterLevelChatCommandPlugIn.cs index b02036e91..d72f0a88e 100644 --- a/src/GameLogic/PlugIns/ChatCommands/SetMasterLevelChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/SetMasterLevelChatCommandPlugIn.cs @@ -4,11 +4,9 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; -using System.Globalization; using System.Runtime.InteropServices; using MUnique.OpenMU.GameLogic.Attributes; using MUnique.OpenMU.GameLogic.Views.Character; -using MUnique.OpenMU.Interfaces; using MUnique.OpenMU.PlugIns; /// @@ -21,9 +19,6 @@ public class SetMasterLevelChatCommandPlugIn : ChatCommandPlugInBase public override string Key => Command; @@ -41,7 +36,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments if (targetPlayer?.SelectedCharacter is null || !targetPlayer.SelectedCharacter.Name.Equals(characterName, StringComparison.OrdinalIgnoreCase)) { - await this.ShowMessageToAsync(player, string.Format(CultureInfo.InvariantCulture, CharacterNotFoundMessage, characterName)).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), characterName).ConfigureAwait(false); return; } } @@ -53,14 +48,14 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments if (arguments is null || arguments.MasterLevel < 1 || arguments.MasterLevel > targetPlayer.GameContext.Configuration.MaximumMasterLevel) { - await this.ShowMessageToAsync(player, string.Format(CultureInfo.InvariantCulture, InvalidLevelMessage, targetPlayer.GameContext.Configuration.MaximumMasterLevel)).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.InvalidCharacterLevel), targetPlayer.GameContext.Configuration.MaximumMasterLevel).ConfigureAwait(false); return; } targetPlayer.Attributes![Stats.MasterLevel] = checked(arguments.MasterLevel); await targetPlayer.InvokeViewPlugInAsync(p => p.UpdateMasterLevelAsync()).ConfigureAwait(false); await targetPlayer.ForEachWorldObserverAsync(p => p.ShowEffectAsync(targetPlayer, IShowEffectPlugIn.EffectType.LevelUp), true).ConfigureAwait(false); - await this.ShowMessageToAsync(player, string.Format(CultureInfo.InvariantCulture, MasterLevelSetMessage, arguments.MasterLevel)).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.SetMasterLevelResult), arguments.MasterLevel).ConfigureAwait(false); } /// diff --git a/src/GameLogic/PlugIns/ChatCommands/SetMasterLevelUpPointsChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/SetMasterLevelUpPointsChatCommandPlugIn.cs index e3ec23be6..7d1593d37 100644 --- a/src/GameLogic/PlugIns/ChatCommands/SetMasterLevelUpPointsChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/SetMasterLevelUpPointsChatCommandPlugIn.cs @@ -4,10 +4,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; -using System.Globalization; using System.Runtime.InteropServices; using MUnique.OpenMU.GameLogic.Views.Character; -using MUnique.OpenMU.Interfaces; using MUnique.OpenMU.PlugIns; /// @@ -20,9 +18,6 @@ public class SetMasterLevelUpPointsChatCommandPlugIn : ChatCommandPlugInBase public override string Key => Command; @@ -35,7 +30,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments { if (arguments is null) { - await this.ShowMessageToAsync(player, InvalidMasterLevelUpPointsMessage).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.InvalidMasterLevelUpPoints)).ConfigureAwait(false); return; } @@ -46,7 +41,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments if (targetPlayer?.SelectedCharacter is null || !targetPlayer.SelectedCharacter.Name.Equals(characterName, StringComparison.OrdinalIgnoreCase)) { - await this.ShowMessageToAsync(player, string.Format(CultureInfo.InvariantCulture, CharacterNotFoundMessage, characterName)).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), characterName).ConfigureAwait(false); return; } } @@ -58,13 +53,13 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments if (arguments.MasterLevelUpPoints < 0) { - await this.ShowMessageToAsync(player, InvalidMasterLevelUpPointsMessage).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.InvalidMasterLevelUpPoints)).ConfigureAwait(false); return; } targetPlayer.SelectedCharacter.MasterLevelUpPoints = checked(arguments.MasterLevelUpPoints); await targetPlayer.InvokeViewPlugInAsync(p => p.UpdateMasterLevelAsync()).ConfigureAwait(false); - await this.ShowMessageToAsync(player, string.Format(CultureInfo.InvariantCulture, MasterLevelUpPointsSetMessage, arguments.MasterLevelUpPoints)).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.SetMasterLevelUpPointsResult), arguments.MasterLevelUpPoints).ConfigureAwait(false); } /// diff --git a/src/GameLogic/PlugIns/ChatCommands/SetMoneyChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/SetMoneyChatCommandPlugIn.cs index 6f87303c0..cb19b2bac 100644 --- a/src/GameLogic/PlugIns/ChatCommands/SetMoneyChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/SetMoneyChatCommandPlugIn.cs @@ -4,10 +4,7 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; -using System.Globalization; using System.Runtime.InteropServices; -using MUnique.OpenMU.GameLogic.Views; -using MUnique.OpenMU.Interfaces; using MUnique.OpenMU.PlugIns; /// @@ -20,9 +17,6 @@ public class SetMoneyChatCommandPlugIn : ChatCommandPlugInBase public override string Key => Command; @@ -40,7 +34,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments if (targetPlayer?.SelectedCharacter is null || !targetPlayer.SelectedCharacter.Name.Equals(characterName, StringComparison.OrdinalIgnoreCase)) { - await this.ShowMessageToAsync(player, string.Format(CultureInfo.InvariantCulture, CharacterNotFoundMessage, characterName)).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), characterName).ConfigureAwait(false); return; } } @@ -57,12 +51,12 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments if (arguments is null || arguments.Amount < 0 || arguments.Amount > maxMoney) { - await this.ShowMessageToAsync(player, string.Format(CultureInfo.InvariantCulture, InvalidAmountMessage, maxMoney)).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.InvalidMoneyAmount), maxMoney).ConfigureAwait(false); return; } targetPlayer.Money = checked(arguments.Amount); - await this.ShowMessageToAsync(player, string.Format(CultureInfo.InvariantCulture, MoneySetMessage, arguments.Amount)).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.SetMoneyResult), arguments.Amount).ConfigureAwait(false); } /// diff --git a/src/GameLogic/PlugIns/ChatCommands/SetResetsChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/SetResetsChatCommandPlugIn.cs index 41d6e0a20..cd212f475 100644 --- a/src/GameLogic/PlugIns/ChatCommands/SetResetsChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/SetResetsChatCommandPlugIn.cs @@ -4,11 +4,9 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; -using System.Globalization; using System.Runtime.InteropServices; using MUnique.OpenMU.GameLogic.Attributes; using MUnique.OpenMU.GameLogic.Resets; -using MUnique.OpenMU.Interfaces; using MUnique.OpenMU.PlugIns; /// @@ -21,11 +19,6 @@ public class SetResetsChatCommandPlugIn : ChatCommandPlugInBase public override string Key => Command; @@ -39,7 +32,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments var configuration = player.GameContext.FeaturePlugIns.GetPlugIn()?.Configuration; if (configuration is null) { - await this.ShowMessageToAsync(player, ResetPluginDisabledMessage).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.ResetSystemInactive)).ConfigureAwait(false); return; } @@ -50,7 +43,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments if (targetPlayer?.SelectedCharacter is null || !targetPlayer.SelectedCharacter.Name.Equals(characterName, StringComparison.OrdinalIgnoreCase)) { - await this.ShowMessageToAsync(player, string.Format(CultureInfo.InvariantCulture, CharacterNotFoundMessage, characterName)).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), characterName).ConfigureAwait(false); return; } } @@ -64,7 +57,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments { if (arguments is null || arguments.Resets < 0) { - await this.ShowMessageToAsync(player, InvalidResetsNoLimitMessage).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.InvalidResetsAmount)).ConfigureAwait(false); return; } } @@ -72,13 +65,13 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments { if (arguments is null || arguments.Resets < 0 || arguments.Resets > configuration.ResetLimit) { - await this.ShowMessageToAsync(player, string.Format(CultureInfo.InvariantCulture, InvalidResetsWithLimitMessage, configuration.ResetLimit)).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.InvalidResetsWithLimits), configuration.ResetLimit).ConfigureAwait(false); return; } } targetPlayer.Attributes![Stats.Resets] = checked(arguments.Resets); - await this.ShowMessageToAsync(player, string.Format(CultureInfo.InvariantCulture, ResetsSetMessage, arguments.Resets)).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.SetResetsResult), arguments.Resets).ConfigureAwait(false); } /// diff --git a/src/GameLogic/PlugIns/ChatCommands/SetStatChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/SetStatChatCommandPlugIn.cs index 05959bb1c..c526228a4 100644 --- a/src/GameLogic/PlugIns/ChatCommands/SetStatChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/SetStatChatCommandPlugIn.cs @@ -4,7 +4,6 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; -using System.Globalization; using System.Runtime.InteropServices; using MUnique.OpenMU.AttributeSystem; using MUnique.OpenMU.GameLogic.Attributes; @@ -22,10 +21,6 @@ public class SetStatChatCommandPlugIn : ChatCommandPlugInBase public override string Key => Command; @@ -36,56 +31,44 @@ public class SetStatChatCommandPlugIn : ChatCommandPlugInBase protected override async ValueTask DoHandleCommandAsync(Player player, Arguments arguments) { - try + if (arguments is null) { - if (arguments is null) + return; + } + + var targetPlayer = player; + if (arguments.CharacterName is { } characterName) + { + targetPlayer = player.GameContext.GetPlayerByCharacterName(characterName); + if (targetPlayer?.SelectedCharacter is null || + !targetPlayer.SelectedCharacter.Name.Equals(characterName, StringComparison.OrdinalIgnoreCase)) { + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), characterName).ConfigureAwait(false); return; } - - var targetPlayer = player; - if (arguments.CharacterName is { } characterName) - { - targetPlayer = player.GameContext.GetPlayerByCharacterName(characterName); - if (targetPlayer?.SelectedCharacter is null || - !targetPlayer.SelectedCharacter.Name.Equals(characterName, StringComparison.OrdinalIgnoreCase)) - { - await this.ShowMessageToAsync(player, string.Format(CultureInfo.InvariantCulture, CharacterNotFoundMessage, characterName)).ConfigureAwait(false); - return; - } - } - - if (targetPlayer.SelectedCharacter is not { } selectedCharacter) - { - return; - } - - var attribute = this.GetAttribute(selectedCharacter, arguments.StatType); - if (attribute.MaximumValue is null) - { - if (arguments.Amount < 0) - { - await this.ShowMessageToAsync(player, InvalidStatNoLimitMessage).ConfigureAwait(false); - return; - } - } - else - { - if (attribute.MaximumValue < 0 || arguments.Amount > attribute.MaximumValue) - { - await this.ShowMessageToAsync(player, string.Format(CultureInfo.InvariantCulture, InvalidStatWithLimitMessage, attribute.MaximumValue)).ConfigureAwait(false); - return; - } - } - - targetPlayer.Attributes![attribute] = arguments.Amount; - await targetPlayer.InvokeViewPlugInAsync(p => p.UpdateCharacterBaseStatsAsync()).ConfigureAwait(false); - await this.ShowMessageToAsync(player, string.Format(CultureInfo.InvariantCulture, StatSetMessage, targetPlayer.SelectedCharacter.Name, arguments.Amount)).ConfigureAwait(false); + } + + if (targetPlayer.SelectedCharacter is not { } selectedCharacter) + { + return; + } + + var attribute = this.GetAttribute(selectedCharacter, arguments.StatType); + if (attribute.MaximumValue is null && arguments.Amount < 0) + { + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.InvalidStatValue), arguments.StatType).ConfigureAwait(false); + return; } - catch (ArgumentException e) + + if (attribute.MaximumValue < 0 || arguments.Amount > attribute.MaximumValue) { - await player.ShowMessageAsync(e.Message).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.InvalidStatValueRange), arguments.StatType, attribute.MaximumValue).ConfigureAwait(false); + return; } + + targetPlayer.Attributes![attribute] = arguments.Amount; + await targetPlayer.InvokeViewPlugInAsync(p => p.UpdateCharacterBaseStatsAsync()).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.SetStatResult), arguments.StatType, arguments.Amount, targetPlayer.SelectedCharacter.Name).ConfigureAwait(false); } private AttributeDefinition GetAttribute(Character selectedCharacter, string? statType) diff --git a/src/GameLogic/PlugIns/ChatCommands/UnBanAccChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/UnBanAccChatCommandPlugIn.cs index 31ae16d2e..510ea454c 100644 --- a/src/GameLogic/PlugIns/ChatCommands/UnBanAccChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/UnBanAccChatCommandPlugIn.cs @@ -29,6 +29,6 @@ protected override async ValueTask DoHandleCommandAsync(Player gameMaster, UnBan { await this.ChangeAccountStateByLoginNameAsync(gameMaster, arguments.AccountName ?? string.Empty, AccountState.Normal).ConfigureAwait(false); - await this.ShowMessageToAsync(gameMaster, $"[{this.Key}] Account {arguments.AccountName} has been unbanned.").ConfigureAwait(false); + await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.UnbanAccountResult), this.Key, arguments.AccountName).ConfigureAwait(false); } } \ No newline at end of file diff --git a/src/GameLogic/PlugIns/ChatCommands/UnBanCharChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/UnBanCharChatCommandPlugIn.cs index 2b2f86649..8421b96f4 100644 --- a/src/GameLogic/PlugIns/ChatCommands/UnBanCharChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/UnBanCharChatCommandPlugIn.cs @@ -29,6 +29,6 @@ protected override async ValueTask DoHandleCommandAsync(Player gameMaster, BanCh { await this.ChangeAccountStateByCharacterNameAsync(gameMaster, arguments.CharacterName ?? string.Empty, AccountState.Normal).ConfigureAwait(false); - await this.ShowMessageToAsync(gameMaster, $"[{this.Key}] Account from {arguments.CharacterName} has been unbanned.").ConfigureAwait(false); + await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.UnbanAccountOfCharacterResult), this.Key, arguments.CharacterName).ConfigureAwait(false); } } \ No newline at end of file diff --git a/src/GameLogic/PlugIns/ChatCommands/WalkMonsterChatCommand.cs b/src/GameLogic/PlugIns/ChatCommands/WalkMonsterChatCommand.cs index f699e10cc..89e7a1d00 100644 --- a/src/GameLogic/PlugIns/ChatCommands/WalkMonsterChatCommand.cs +++ b/src/GameLogic/PlugIns/ChatCommands/WalkMonsterChatCommand.cs @@ -31,7 +31,7 @@ protected override async ValueTask DoHandleCommandAsync(Player gameMaster, MoveM var monster = gameMaster.ObservingBuckets.SelectMany(b => b).OfType().FirstOrDefault(m => m.Id == arguments.Id); if (monster is null) { - await this.ShowMessageToAsync(gameMaster, $"Monster with id {arguments.Id} not found.").ConfigureAwait(false); + await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.MonsterNotFoundById), arguments.Id).ConfigureAwait(false); return; } diff --git a/src/GameLogic/PlugIns/QuestMonsterKillCountPlugIn.cs b/src/GameLogic/PlugIns/QuestMonsterKillCountPlugIn.cs index 9f627cbb0..e71849bf5 100644 --- a/src/GameLogic/PlugIns/QuestMonsterKillCountPlugIn.cs +++ b/src/GameLogic/PlugIns/QuestMonsterKillCountPlugIn.cs @@ -4,10 +4,9 @@ namespace MUnique.OpenMU.GameLogic.PlugIns; +using System.ComponentModel.DataAnnotations; using System.Runtime.InteropServices; using MUnique.OpenMU.GameLogic.NPC; -using MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; -using MUnique.OpenMU.Persistence; using MUnique.OpenMU.PlugIns; /// @@ -63,7 +62,8 @@ public async ValueTask AttackableGotKilledAsync(IAttackable killed, IAttacker? k requirementState.KillCount, killRequirement.MinimumNumber); - await player.ShowMessageAsync(message).ConfigureAwait(false); + // TODO: Localize + await player.ShowBlueMessageAsync(message).ConfigureAwait(false); } } } diff --git a/src/GameLogic/PlugIns/ShowMessageToAllWhenPlayerEnteredWorldPlugIn.cs b/src/GameLogic/PlugIns/ShowMessageToAllWhenPlayerEnteredWorldPlugIn.cs index c0fb8dae9..5f11db353 100644 --- a/src/GameLogic/PlugIns/ShowMessageToAllWhenPlayerEnteredWorldPlugIn.cs +++ b/src/GameLogic/PlugIns/ShowMessageToAllWhenPlayerEnteredWorldPlugIn.cs @@ -23,6 +23,6 @@ public async ValueTask PlayerStateChangedAsync(Player player, State previousStat return; } - await player.GameContext.SendGlobalMessageAsync($"{selectedCharacter.Name} entered the game.", MessageType.BlueNormal).ConfigureAwait(false); + await player.GameContext.ShowGlobalLocalizedMessageAsync(MessageType.BlueNormal, nameof(PlayerMessage.PlayerEnteredGameMessage), selectedCharacter.Name).ConfigureAwait(false); } } \ No newline at end of file diff --git a/src/GameLogic/Properties/PlayerMessage.Designer.cs b/src/GameLogic/Properties/PlayerMessage.Designer.cs index 7c307a7e5..609d268a1 100644 --- a/src/GameLogic/Properties/PlayerMessage.Designer.cs +++ b/src/GameLogic/Properties/PlayerMessage.Designer.cs @@ -22,7 +22,7 @@ namespace MUnique.OpenMU.GameLogic.Properties { [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class PlayerMessage { + public class PlayerMessage { private static global::System.Resources.ResourceManager resourceMan; @@ -36,7 +36,7 @@ internal PlayerMessage() { /// Returns the cached ResourceManager instance used by this class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { + public static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("MUnique.OpenMU.GameLogic.Properties.PlayerMessage", typeof(PlayerMessage).Assembly); @@ -51,7 +51,7 @@ internal PlayerMessage() { /// resource lookups using this strongly typed resource class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { + public static global::System.Globalization.CultureInfo Culture { get { return resourceCulture; } @@ -60,37 +60,109 @@ internal PlayerMessage() { } } + /// + /// Looks up a localized string similar to [{0}] Account of {1} chat banned for {2} minutes. + /// + public static string AccountChatBannedResult { + get { + return ResourceManager.GetString("AccountChatBannedResult", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to [{0}] Account {1} has been banned.. + /// + public static string AccountHasBeenBanned { + get { + return ResourceManager.GetString("AccountHasBeenBanned", resourceCulture); + } + } + /// /// Looks up a localized string similar to Account not found.. /// - internal static string AccountNotFound { + public static string AccountNotFound { get { return ResourceManager.GetString("AccountNotFound", resourceCulture); } } + /// + /// Looks up a localized string similar to [{0}] Account of {1} has been banned.. + /// + public static string AccountOfHasBeenBanned { + get { + return ResourceManager.GetString("AccountOfHasBeenBanned", resourceCulture); + } + } + /// /// Looks up a localized string similar to Account property not found.. /// - internal static string AccountPropertyNotFound { + public static string AccountPropertyNotFound { get { return ResourceManager.GetString("AccountPropertyNotFound", resourceCulture); } } + /// + /// Looks up a localized string similar to Adding multiple points is not allowed when playing a mini game.. + /// + public static string AddingMultiplePointsWhileMiniGameNotAllowed { + get { + return ResourceManager.GetString("AddingMultiplePointsWhileMiniGameNotAllowed", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to You are already in a duel.. + /// + public static string AlreadyInDuel { + get { + return ResourceManager.GetString("AlreadyInDuel", resourceCulture); + } + } + /// /// Looks up a localized string similar to The argument {0} was given an invalid type, it expects the value to be of the type {1}.. /// - internal static string ArgumentInvalidType { + public static string ArgumentInvalidType { get { return ResourceManager.GetString("ArgumentInvalidType", resourceCulture); } } + /// + /// Looks up a localized string similar to Available languages:. + /// + public static string AvailableLanguagesCaption { + get { + return ResourceManager.GetString("AvailableLanguagesCaption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Couldn't add reward money, inventory is full.. + /// + public static string AwardMoneyFailByFullInventory { + get { + return ResourceManager.GetString("AwardMoneyFailByFullInventory", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Can't enter event with equipped item '{0}'.. + /// + public static string CantEnterEventWithItem { + get { + return ResourceManager.GetString("CantEnterEventWithItem", resourceCulture); + } + } + /// /// Looks up a localized string similar to A character with the same name already exists.. /// - internal static string CharacterNameAlreadyExists { + public static string CharacterNameAlreadyExists { get { return ResourceManager.GetString("CharacterNameAlreadyExists", resourceCulture); } @@ -99,25 +171,34 @@ internal static string CharacterNameAlreadyExists { /// /// Looks up a localized string similar to Character name is required.. /// - internal static string CharacterNameRequired { + public static string CharacterNameRequired { get { return ResourceManager.GetString("CharacterNameRequired", resourceCulture); } } /// - /// Looks up a localized string similar to Character {0} not found.. + /// Looks up a localized string similar to Character '{0}' not found.. /// - internal static string CharacterNotFound { + public static string CharacterNotFound { get { return ResourceManager.GetString("CharacterNotFound", resourceCulture); } } /// - /// Looks up a localized string similar to The command '{0}' does not exists.. + /// Looks up a localized string similar to [{0}] The chat ban for the account from {1} has been removed.. + /// + public static string ChatBanRemoved { + get { + return ResourceManager.GetString("ChatBanRemoved", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The command '{0}' does not exist.. /// - internal static string CommandDoesNotExist { + public static string CommandDoesNotExist { get { return ResourceManager.GetString("CommandDoesNotExist", resourceCulture); } @@ -126,25 +207,250 @@ internal static string CommandDoesNotExist { /// /// Looks up a localized string similar to The command needs {0} arguments and was given {1}.. /// - internal static string CommandNeedsArguments { + public static string CommandNeedsArguments { get { return ResourceManager.GetString("CommandNeedsArguments", resourceCulture); } } + /// + /// Looks up a localized string similar to [{0}] {1} has been disconnected.. + /// + public static string CommandResultPlayerDisconnected { + get { + return ResourceManager.GetString("CommandResultPlayerDisconnected", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The duel channel is full.. + /// + public static string DuelChannelIsFull { + get { + return ResourceManager.GetString("DuelChannelIsFull", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to You can only duel players which are in the same map.. + /// + public static string DuelRequestMustBeOnSameMap { + get { + return ResourceManager.GetString("DuelRequestMustBeOnSameMap", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Event map is created on entrance. No fixed time table.. + /// + public static string EventMapCreatedOnEntranceWithoutTimetable { + get { + return ResourceManager.GetString("EventMapCreatedOnEntranceWithoutTimetable", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to This event is not implemented yet.. + /// + public static string EventNotImplementedYet { + get { + return ResourceManager.GetString("EventNotImplementedYet", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to [{0}] {1} has been disconnected.. + /// + public static string GuildDisconnectResult { + get { + return ResourceManager.GetString("GuildDisconnectResult", resourceCulture); + } + } + /// /// Looks up a localized string similar to Guild {0} not found.. /// - internal static string GuildNotFound { + public static string GuildNotFound { get { return ResourceManager.GetString("GuildNotFound", resourceCulture); } } + /// + /// Looks up a localized string similar to Invalid level - must be between 1 and {0}.. + /// + public static string InvalidCharacterLevel { + get { + return ResourceManager.GetString("InvalidCharacterLevel", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Invalid level-up points - must be bigger or equal to 0.. + /// + public static string InvalidLevelUpPoints { + get { + return ResourceManager.GetString("InvalidLevelUpPoints", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The lost map is not valid.. + /// + public static string InvalidLostMap { + get { + return ResourceManager.GetString("InvalidLostMap", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Invalid master level-up points - must be bigger or equal to 0.. + /// + public static string InvalidMasterLevelUpPoints { + get { + return ResourceManager.GetString("InvalidMasterLevelUpPoints", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Invalid NPC ID "{0}". Please provide a valid merchant NPC ID.. + /// + public static string InvalidMerchantId { + get { + return ResourceManager.GetString("InvalidMerchantId", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Invalid money amount - must be between 0 and {0}.. + /// + public static string InvalidMoneyAmount { + get { + return ResourceManager.GetString("InvalidMoneyAmount", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Invalid resets - must be bigger than 0.. + /// + public static string InvalidResetsAmount { + get { + return ResourceManager.GetString("InvalidResetsAmount", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Invalid resets - must be between 0 and {0}.. + /// + public static string InvalidResetsWithLimits { + get { + return ResourceManager.GetString("InvalidResetsWithLimits", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Invalid {0} - must be bigger than 1.. + /// + public static string InvalidStatValue { + get { + return ResourceManager.GetString("InvalidStatValue", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Invalid {0} - must be between 0 and {1}.. + /// + public static string InvalidStatValueRange { + get { + return ResourceManager.GetString("InvalidStatValueRange", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to [{0}] {1} created. + /// + public static string ItemCreatedResult { + get { + return ResourceManager.GetString("ItemCreatedResult", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Effect for item not found.. + /// + public static string ItemEffectNotFound { + get { + return ResourceManager.GetString("ItemEffectNotFound", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0} {1} does not exist.. + /// + public static string ItemGroupNumberNotExists { + get { + return ResourceManager.GetString("ItemGroupNumberNotExists", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Level cannot be greater than {0}.. + /// + public static string ItemLevelExceeded { + get { + return ResourceManager.GetString("ItemLevelExceeded", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The kalima entrance wasn't found.. + /// + public static string KalimaEntranceNotFound { + get { + return ResourceManager.GetString("KalimaEntranceNotFound", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Language has been changed to '{0}' ({1}).. + /// + public static string LanguageChanged { + get { + return ResourceManager.GetString("LanguageChanged", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Level of '{0}': {1}.. + /// + public static string LevelInformation { + get { + return ResourceManager.GetString("LevelInformation", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Level-up points of '{0}': {1}.. + /// + public static string LevelUpPointsInfo { + get { + return ResourceManager.GetString("LevelUpPointsInfo", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Another user attempted to login this account. If it wasn't you, we suggest you to change your password.. + /// + public static string LoginAttemptWarning { + get { + return ResourceManager.GetString("LoginAttemptWarning", resourceCulture); + } + } + /// /// Looks up a localized string similar to Login name is required.. /// - internal static string LoginNameRequired { + public static string LoginNameRequired { get { return ResourceManager.GetString("LoginNameRequired", resourceCulture); } @@ -153,37 +459,469 @@ internal static string LoginNameRequired { /// /// Looks up a localized string similar to Map {0} not found.. /// - internal static string MapNotFound { + public static string MapNotFound { get { return ResourceManager.GetString("MapNotFound", resourceCulture); } } + /// + /// Looks up a localized string similar to Master level of '{0}': {1}.. + /// + public static string MasterLevelInfo { + get { + return ResourceManager.GetString("MasterLevelInfo", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Master level-up points of '{0}': {1}.. + /// + public static string MasterLevelUpPointsInfo { + get { + return ResourceManager.GetString("MasterLevelUpPointsInfo", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Money of '{0}': {1}.. + /// + public static string MoneyInfo { + get { + return ResourceManager.GetString("MoneyInfo", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Monster with number {0} created, id: {1}.. + /// + public static string MonsterCreatedByGameMaster { + get { + return ResourceManager.GetString("MonsterCreatedByGameMaster", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Monster with id {0} not found.. + /// + public static string MonsterNotFoundById { + get { + return ResourceManager.GetString("MonsterNotFoundById", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Monster with number {0} not found.. + /// + public static string MonsterNotFoundByNumber { + get { + return ResourceManager.GetString("MonsterNotFoundByNumber", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to You have been moved by the game master.. + /// + public static string MovedByGameMaster { + get { + return ResourceManager.GetString("MovedByGameMaster", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to [{0}] {1} has been moved to {2} at {3}, {4}. + /// + public static string MovedPlayerResult { + get { + return ResourceManager.GetString("MovedPlayerResult", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to MU Helper is already running.. + /// + public static string MuHelperAlreadyRunning { + get { + return ResourceManager.GetString("MuHelperAlreadyRunning", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to MU Helper cannot be used after level {0}.. + /// + public static string MuHelperMaximumLevel { + get { + return ResourceManager.GetString("MuHelperMaximumLevel", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to MU Helper can be used after level {0}.. + /// + public static string MuHelperMinimumLevel { + get { + return ResourceManager.GetString("MuHelperMinimumLevel", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to MU Helper requires {0} zen.. + /// + public static string MuHelperRequiresMoney { + get { + return ResourceManager.GetString("MuHelperRequiresMoney", resourceCulture); + } + } + /// /// Looks up a localized string similar to Name is required.. /// - internal static string NameRequired { + public static string NameRequired { get { return ResourceManager.GetString("NameRequired", resourceCulture); } } + /// + /// Looks up a localized string similar to You cannot start a duel during guild war.. + /// + public static string NoDuelDuringGuildWar { + get { + return ResourceManager.GetString("NoDuelDuringGuildWar", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to You cannot start a duel during a mini game.. + /// + public static string NoDuelDuringMiniGame { + get { + return ResourceManager.GetString("NoDuelDuringMiniGame", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to You cannot start a duel with active self-defense.. + /// + public static string NoDuelDuringSelfDefense { + get { + return ResourceManager.GetString("NoDuelDuringSelfDefense", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to You cannot start a duel while you are a player killer.. + /// + public static string NoDuelWhileBeingPlayerKiller { + get { + return ResourceManager.GetString("NoDuelWhileBeingPlayerKiller", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to You cannot start a duel when a NPC dialog is opened.. + /// + public static string NoDuelWithOpenedNpcDialog { + get { + return ResourceManager.GetString("NoDuelWithOpenedNpcDialog", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to You cannot start a duel with a player killer.. + /// + public static string NoDuelWithPlayerKiller { + get { + return ResourceManager.GetString("NoDuelWithPlayerKiller", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to You cannot start a duel when one of the players has the wrong state.. + /// + public static string NoDuelWithWrongState { + get { + return ResourceManager.GetString("NoDuelWithWrongState", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Cannot create kalima gate in safe zone.. + /// + public static string NoKalimaGateInSafezone { + get { + return ResourceManager.GetString("NoKalimaGateInSafezone", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Cannot create kalima gate on event map.. + /// + public static string NoKalimaGateOnEventMap { + get { + return ResourceManager.GetString("NoKalimaGateOnEventMap", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to No warehouse NPC found. + /// + public static string NoWarehouseNpcFound { + get { + return ResourceManager.GetString("NoWarehouseNpcFound", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Not a valid merchant NPC.. + /// + public static string NpcIsNotMerchant { + get { + return ResourceManager.GetString("NpcIsNotMerchant", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to NPC with id {0} not found.. + /// + public static string NpcNotFoundById { + get { + return ResourceManager.GetString("NpcNotFoundById", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to NPC with id {0} removed.. + /// + public static string NpcRemovedById { + get { + return ResourceManager.GetString("NpcRemovedById", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to [{0}] {1} GM(s) and {2} player(s) online. + /// + public static string OnlineCountInfo { + get { + return ResourceManager.GetString("OnlineCountInfo", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The other player is already in a duel.. + /// + public static string OtherPlayerAlreadyInDuel { + get { + return ResourceManager.GetString("OtherPlayerAlreadyInDuel", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to [{0}] {1} kills have been cleaned.. + /// + public static string PkClearedResult { + get { + return ResourceManager.GetString("PkClearedResult", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Your player kills have been cleaned by the game master.. + /// + public static string PkStatusClearedByGameMaster { + get { + return ResourceManager.GetString("PkStatusClearedByGameMaster", resourceCulture); + } + } + /// /// Looks up a localized string similar to {0} entered the game.. /// - internal static string PlayerEnteredGameMessage { + public static string PlayerEnteredGameMessage { get { return ResourceManager.GetString("PlayerEnteredGameMessage", resourceCulture); } } + /// + /// Looks up a localized string similar to PK count must be greater than zero.. + /// + public static string PlayerKillCountMustBePositive { + get { + return ResourceManager.GetString("PlayerKillCountMustBePositive", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to PK level must be between {0} and {1}.. + /// + public static string PlayerKillLevelRangeError { + get { + return ResourceManager.GetString("PlayerKillLevelRangeError", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to [{0}] The state of {1} has been changed to {2} with {3} murders for {4} minutes. + /// + public static string PlayerKillStateChangeResult { + get { + return ResourceManager.GetString("PlayerKillStateChangeResult", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Requested language '{0}' not found.. + /// + public static string RequestedLanguageNotFound { + get { + return ResourceManager.GetString("RequestedLanguageNotFound", resourceCulture); + } + } + /// /// Looks up a localized string similar to The required argument named {0} was not used.. /// - internal static string RequiredArgumentNotUsed { + public static string RequiredArgumentNotUsed { get { return ResourceManager.GetString("RequiredArgumentNotUsed", resourceCulture); } } + + /// + /// Looks up a localized string similar to Resets of '{0}': {1}.. + /// + public static string ResetsInfo { + get { + return ResourceManager.GetString("ResetsInfo", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The reset system is not enabled on this server.. + /// + public static string ResetSystemInactive { + get { + return ResourceManager.GetString("ResetSystemInactive", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Level set to {0}.. + /// + public static string SetLevelResult { + get { + return ResourceManager.GetString("SetLevelResult", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Level-up points set to {0}.. + /// + public static string SetLevelUpPointsResult { + get { + return ResourceManager.GetString("SetLevelUpPointsResult", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Master level set to {0}.. + /// + public static string SetMasterLevelResult { + get { + return ResourceManager.GetString("SetMasterLevelResult", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Master level-up points set to {0}.. + /// + public static string SetMasterLevelUpPointsResult { + get { + return ResourceManager.GetString("SetMasterLevelUpPointsResult", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Money set to {0}.. + /// + public static string SetMoneyResult { + get { + return ResourceManager.GetString("SetMoneyResult", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Resets set to {0}.. + /// + public static string SetResetsResult { + get { + return ResourceManager.GetString("SetResetsResult", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0} set to {1} for player {2}.. + /// + public static string SetStatResult { + get { + return ResourceManager.GetString("SetStatResult", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Stat of '{0}': {1}.. + /// + public static string StatPointInfo { + get { + return ResourceManager.GetString("StatPointInfo", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to [{0}] Account of {1} has been unbanned.. + /// + public static string UnbanAccountOfCharacterResult { + get { + return ResourceManager.GetString("UnbanAccountOfCharacterResult", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to [{0}] Account {1} has been unbanned.. + /// + public static string UnbanAccountResult { + get { + return ResourceManager.GetString("UnbanAccountResult", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The gate npc is not defined.. + /// + public static string UndefinedGateNpc { + get { + return ResourceManager.GetString("UndefinedGateNpc", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to You are chat banned for {0} minutes. + /// + public static string YouAreChatBanned { + get { + return ResourceManager.GetString("YouAreChatBanned", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Your chat ban has been removed by a game master.. + /// + public static string YourChatBanRemovedByGameMaster { + get { + return ResourceManager.GetString("YourChatBanRemovedByGameMaster", resourceCulture); + } + } } } diff --git a/src/GameLogic/Properties/PlayerMessage.resx b/src/GameLogic/Properties/PlayerMessage.resx index cd2c62b31..8bee9b932 100644 --- a/src/GameLogic/Properties/PlayerMessage.resx +++ b/src/GameLogic/Properties/PlayerMessage.resx @@ -1,21 +1,303 @@ - text/microsoft-resx - 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - {0} entered the game. - The command needs {0} arguments and was given {1}. - The required argument named {0} was not used. - The argument {0} was given an invalid type, it expects the value to be of the type {1}. - Character name is required. - Character {0} not found. - Guild {0} not found. - Name is required. - Login name is required. - Account not found. - Account property not found. - The command '{0}' does not exists. - Map {0} not found. - A character with the same name already exists. + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + {0} entered the game. + + + The command needs {0} arguments and was given {1}. + + + The required argument named {0} was not used. + + + The argument {0} was given an invalid type, it expects the value to be of the type {1}. + + + Character name is required. + + + Character '{0}' not found. + + + Guild {0} not found. + + + Name is required. + + + Login name is required. + + + Account not found. + + + Account property not found. + + + The command '{0}' does not exist. + + + Map {0} not found. + + + A character with the same name already exists. + + + Couldn't add reward money, inventory is full. + + + Can't enter event with equipped item '{0}'. + + + MU Helper is already running. + + + MU Helper can be used after level {0}. + + + MU Helper cannot be used after level {0}. + + + MU Helper requires {0} zen. + + + You are already in a duel. + + + The other player is already in a duel. + + + The duel channel is full. + + + You can only duel players which are in the same map. + + + You cannot start a duel during a mini game. + + + You cannot start a duel while you are a player killer. + + + You cannot start a duel with a player killer. + + + You cannot start a duel during guild war. + + + You cannot start a duel with active self-defense. + + + You cannot start a duel when a NPC dialog is opened. + + + You cannot start a duel when one of the players has the wrong state. + + + Effect for item not found. + + + The lost map is not valid. + + + Cannot create kalima gate on event map. + + + Cannot create kalima gate in safe zone. + + + The gate npc is not defined. + + + The kalima entrance wasn't found. + + + Event map is created on entrance. No fixed time table. + + + This event is not implemented yet. + + + Adding multiple points is not allowed when playing a mini game. + + + Another user attempted to login this account. If it wasn't you, we suggest you to change your password. + + + Requested language '{0}' not found. + + + Language has been changed to '{0}' ({1}). + + + Available languages: + + + [{0}] Account {1} has been banned. + + + [{0}] Account of {1} has been banned. + + + [{0}] Account of {1} chat banned for {2} minutes + + + You are chat banned for {0} minutes + + + Your chat ban has been removed by a game master. + + + [{0}] The chat ban for the account from {1} has been removed. + + + Monster with number {0} not found. + + + Monster with number {0} created, id: {1}. + + + [{0}] {1} has been disconnected. + + + Level of '{0}': {1}. + + + Level-up points of '{0}': {1}. + + + Master level of '{0}': {1}. + + + Master level-up points of '{0}': {1}. + + + Money of '{0}': {1}. + + + Resets of '{0}': {1}. + + + The reset system is not enabled on this server. + + + Stat of '{0}': {1}. + + + [{0}] {1} has been disconnected. + + + You have been moved by the game master. + + + [{0}] {1} has been moved to {2} at {3}, {4} + + + [{0}] {1} created + + + {0} {1} does not exist. + + + Level cannot be greater than {0}. + + + Monster with id {0} not found. + + + Invalid NPC ID "{0}". Please provide a valid merchant NPC ID. + + + Not a valid merchant NPC. + + + [{0}] {1} GM(s) and {2} player(s) online + + + No warehouse NPC found + + + PK level must be between {0} and {1}. + + + PK count must be greater than zero. + + + [{0}] The state of {1} has been changed to {2} with {3} murders for {4} minutes + + + Your player kills have been cleaned by the game master. + + + [{0}] {1} kills have been cleaned. + + + NPC with id {0} not found. + + + NPC with id {0} removed. + + + Invalid level - must be between 1 and {0}. + + + Level set to {0}. + + + Invalid level-up points - must be bigger or equal to 0. + + + Level-up points set to {0}. + + + Master level set to {0}. + + + Invalid master level-up points - must be bigger or equal to 0. + + + Master level-up points set to {0}. + + + Invalid money amount - must be between 0 and {0}. + + + Money set to {0}. + + + Invalid resets - must be bigger than 0. + + + Invalid resets - must be between 0 and {0}. + + + Resets set to {0}. + + + Invalid {0} - must be bigger than 1. + + + Invalid {0} - must be between 0 and {1}. + + + {0} set to {1} for player {2}. + + + [{0}] Account {1} has been unbanned. + + + [{0}] Account of {1} has been unbanned. + \ No newline at end of file diff --git a/src/GameServer/GameServer.cs b/src/GameServer/GameServer.cs index 870de1c41..2146a97d3 100644 --- a/src/GameServer/GameServer.cs +++ b/src/GameServer/GameServer.cs @@ -12,7 +12,7 @@ namespace MUnique.OpenMU.GameServer; using MUnique.OpenMU.DataModel.Configuration; using MUnique.OpenMU.DataModel.Entities; using MUnique.OpenMU.GameLogic; -using MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; +using MUnique.OpenMU.GameLogic.Properties; using MUnique.OpenMU.GameLogic.Views; using MUnique.OpenMU.GameLogic.Views.Guild; using MUnique.OpenMU.GameLogic.Views.Login; @@ -330,7 +330,7 @@ public async ValueTask PlayerAlreadyLoggedInAsync(byte serverId, string loginNam if (affectedPlayer is not null) { - await affectedPlayer.ShowMessageAsync("Another user attempted to login this account. If it wasn't you, we suggest you to change your password.").ConfigureAwait(false); + await affectedPlayer.ShowBlueMessageAsync(PlayerMessage.LoginAttemptWarning).ConfigureAwait(false); } } diff --git a/src/GameServer/GlobalUsings.cs b/src/GameServer/GlobalUsings.cs new file mode 100644 index 000000000..6e6c4c3fd --- /dev/null +++ b/src/GameServer/GlobalUsings.cs @@ -0,0 +1,7 @@ +// +// Licensed under the MIT License. See LICENSE file in the project root for full license information. +// + +#pragma warning disable SA1200 // Using directives should be placed correctly + +global using System.ComponentModel.DataAnnotations; diff --git a/src/Interfaces/LocalizableException.cs b/src/Interfaces/LocalizableException.cs new file mode 100644 index 000000000..4b33b0249 --- /dev/null +++ b/src/Interfaces/LocalizableException.cs @@ -0,0 +1,72 @@ +// +// Licensed under the MIT License. See LICENSE file in the project root for full license information. +// + +namespace MUnique.OpenMU.Interfaces; + +using System.Globalization; +using System.Resources; + +/// +/// Represents an exception which wraps a base exception and provides a localized message +/// based on resources defined by . +/// The specified together with optional +/// is used to format the localized text at runtime. +/// +/// The type of the original exception which is wrapped. +/// +/// The resources class (designer generated from a .resx file) which must expose a public static +/// ResourceManager property used to resolve localized strings. +/// +/// +/// The resource manager of is resolved lazily and cached across +/// all localizable exceptions through . +/// If no resource value exists for , the key itself is returned. +/// +public class LocalizableException : LocalizableExceptionBase + where TException : Exception +{ + /// + /// Initializes a new instance of the class. + /// + /// The base exception. + /// The resource key. + /// The format arguments. + public LocalizableException(TException baseException, string resourceKey, params ReadOnlySpan formatArguments) + : base(baseException.Message, baseException, resourceKey, formatArguments) + { + } + + /// + /// Gets the inner exception. + /// + public new TException InnerException => (TException)base.InnerException!; + + /// + /// Gets the localized message for this exception using the specified . + /// + /// The culture for which the message should be localized. + /// + /// The localized message if the contains the specified ; + /// otherwise the itself. If are specified, + /// they are applied using . + /// + /// Thrown when is null. + /// + /// Thrown when the resource type does not expose a public static + /// ResourceManager property. + /// + public string GetLocalizedMessage(CultureInfo cultureInfo) + { + ArgumentNullException.ThrowIfNull(cultureInfo); + + var resourceManager = ResolveResourceManager(typeof(TResources)); + var localizedString = resourceManager.GetString(this.ResourceKey, cultureInfo) ?? this.ResourceKey; + if (this.FormatArguments.Length > 0) + { + return string.Format(cultureInfo, localizedString, this.FormatArguments); + } + + return localizedString; + } +} \ No newline at end of file diff --git a/src/Interfaces/LocalizableExceptionBase.cs b/src/Interfaces/LocalizableExceptionBase.cs new file mode 100644 index 000000000..66eb3560e --- /dev/null +++ b/src/Interfaces/LocalizableExceptionBase.cs @@ -0,0 +1,68 @@ +// +// Licensed under the MIT License. See LICENSE file in the project root for full license information. +// + +namespace MUnique.OpenMU.Interfaces; + +using System.Resources; + +/// +/// Base class for localizable exceptions sharing a common resource manager cache. +/// +public abstract class LocalizableExceptionBase : Exception +{ + /// + /// The cached resource managers shared across all localizable exceptions. + /// + private static readonly Dictionary ResourceManagers = new(); + + /// + /// Initializes a new instance of the class. + /// + /// The message. + /// The inner exception. + /// The resource key. + /// The format arguments. + protected LocalizableExceptionBase(string? message, Exception? innerException, string resourceKey, ReadOnlySpan formatArguments) + : base(message, innerException) + { + this.FormatArguments = formatArguments.ToArray(); + this.ResourceKey = resourceKey; + } + + /// + /// Gets the format arguments. + /// + public object?[] FormatArguments { get; } + + /// + /// Gets the resource key. + /// + public string ResourceKey { get; } + + /// + /// Resolves (and caches) the for the specified resource type. + /// + /// The resource type. + /// The resource manager. + /// + /// Thrown when the resource type does not expose a public static ResourceManager property. + /// + protected static ResourceManager ResolveResourceManager(Type resourceType) + { + if (!ResourceManagers.TryGetValue(resourceType, out var resourceManager)) + { + var resourceManagerProperty = resourceType.GetProperty( + "ResourceManager", + System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public); + + resourceManager = resourceManagerProperty?.GetValue(null) as ResourceManager + ?? throw new InvalidOperationException( + $"The type {resourceType.FullName} does not have a public static ResourceManager property."); + + ResourceManagers[resourceType] = resourceManager; + } + + return resourceManager; + } +} \ No newline at end of file diff --git a/src/Interfaces/LocalizedString.cs b/src/Interfaces/LocalizedString.cs new file mode 100644 index 000000000..f1dbf88bb --- /dev/null +++ b/src/Interfaces/LocalizedString.cs @@ -0,0 +1,98 @@ +// +// Licensed under the MIT License. See LICENSE file in the project root for full license information. +// + +namespace MUnique.OpenMU.Interfaces; + +using System.Globalization; + +/// +/// Represents a string which can be translated to different languages and serializes into a single string. +/// It's meant for simple usage in database fields and not for complex localization scenarios. +/// To keep compatibility with normal strings, we simply assume the first string to be in neutral (usually english) language. +/// Example: "Some text||de=Etwas Text||fr=Un peu de texte" where the first part is english, second german and third french. +/// +public readonly struct LocalizedString +{ + private const string Separator = "||"; + private const string NeutralLanguageCode = "en"; + + /// + /// Initializes a new instance of the class. + /// + /// The value. + public LocalizedString(string? value) + { + this.Value = value; + } + + public string? Value { get; } + + // override to string to keep compatibility with normal strings + public override string? ToString() + { + return this.GetTranslation(CultureInfo.CurrentCulture).ToString(); + } + + // override implicit conversion to keep compatibility with normal strings + public static implicit operator string?(LocalizedString? localizedString) + { + return localizedString?.Value; + } + + public static implicit operator LocalizedString?(string? localizedString) + { + if (localizedString is null) + { + return null; + } + + return new LocalizedString(localizedString); + } + + public ReadOnlySpan GetTranslation(CultureInfo cultureInfo) + { + // Implementation for retrieving the localized string based on the cultureInfo + if (this.Value is null) + { + return null; + } + + if (cultureInfo.TwoLetterISOLanguageName == NeutralLanguageCode) + { + return this.GetValueInNeutralLanguage(); + } + + var searchPattern = Separator + cultureInfo.TwoLetterISOLanguageName + "="; + var startIndex = this.Value.IndexOf(searchPattern, StringComparison.OrdinalIgnoreCase); + if (startIndex == -1) + { + return this.GetValueInNeutralLanguage(); + } + + var part = this.Value.AsSpan(startIndex + searchPattern.Length); + var endIndex = part.IndexOf(Separator); + if (endIndex == -1) + { + return part; + } + + return part.Slice(0, endIndex); + } + + private ReadOnlySpan GetValueInNeutralLanguage() + { + if (this.Value is null) + { + return null; + } + + var separatorIndex = this.Value.IndexOf(Separator, StringComparison.OrdinalIgnoreCase); + if (separatorIndex == -1) + { + return this.Value.AsSpan(); + } + + return this.Value.AsSpan(0, separatorIndex); + } +} \ No newline at end of file diff --git a/src/Interfaces/Properties/ModelResources.resx b/src/Interfaces/Properties/ModelResources.resx new file mode 100644 index 000000000..c2d2b3eb1 --- /dev/null +++ b/src/Interfaces/Properties/ModelResources.resx @@ -0,0 +1,451 @@ + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + Letter Header + + + Letter Headers + + + + + + Id + + + + + + Sender Name + + + + + + Receiver Name + + + + + + Subject + + + + + + Letter Date + + + + + + Read Flag + + + + + + Guild List Entry + + + Guild List Entrys + + + + + + Player Name + + + + + + Server Id + + + + + + Player Position + + + + + + Guild + + + Guilds + + + + + + Name + + + + + + Logo + + + + + + Score + + + + + + Notice + + + + + + Hostility + + + + + + Alliance Guild + + + + + + Friend + + + Friends + + + + + + Id + + + + + + Character Id + + + + + + Friend Id + + + + + + Accepted + + + + + + Request Open + + + + + + Guild Member Status + + + Guild Member Status + + + + + + Guild Id + + + + + + Position + + + + + + Chat Server Authentication Info + + + Chat Server Authentication Infos + + + + + + Index + + + + + + Room Id + + + + + + Client Name + + + + + + Authentication Token + + + + + + Host Address + + + + + + Authentication Required Until + + + + + + Friend View Item + + + Friend View Items + + + + + + Character Name + + + + + + Friend Name + + + + + + Localizable Exception + + + Localizable Exceptions + + + + + + Inner Exception + + + + + + Special Server Id + + + + + + Offline + + + + + + Invisible + + + + + + None Configuration Change Publisher + + + None Configuration Change Publishers + + + + + + Guild Position + + + + + + Undefined + + + + + + Normal Member + + + + + + Guild Master + + + + + + Battle Master + + + + + + Localizable Exception Base + + + Localizable Exception Bases + + + + + + Format Arguments + + + + + + Resource Key + + + + + + Special Server Ids + + + Special Server Ids + + + + + + Server Type + + + + + + Undefined + + + + + + Game Server + + + + + + Connect Server + + + + + + Chat Server + + + + + + Server State + + + + + + Stopped + + + + + + Starting + + + + + + Started + + + + + + Stopping + + + + + + Timeout + + + + + + Message Type + + + + + + Golden Center + + + + + + Blue Normal + + + + + + Guild Notice + + + + + diff --git a/src/Persistence/Initialization/GlobalUsings.cs b/src/Persistence/Initialization/GlobalUsings.cs new file mode 100644 index 000000000..165a327fe --- /dev/null +++ b/src/Persistence/Initialization/GlobalUsings.cs @@ -0,0 +1,14 @@ +// +// Licensed under the MIT License. See LICENSE file in the project root for full license information. +// + +#pragma warning disable SA1200 // Using directives should be placed correctly + +global using System.ComponentModel.DataAnnotations; + +global using Microsoft.Extensions.Logging; + +global using MUnique.OpenMU.DataModel; +global using MUnique.OpenMU.DataModel.Configuration; +global using MUnique.OpenMU.DataModel.Entities; +global using MUnique.OpenMU.GameLogic.Properties; \ No newline at end of file diff --git a/src/PlugIns/LocalizableString.cs b/src/PlugIns/LocalizableString.cs new file mode 100644 index 000000000..d48c994b9 --- /dev/null +++ b/src/PlugIns/LocalizableString.cs @@ -0,0 +1,156 @@ +// +// Licensed under the MIT License. See LICENSE file in the project root for full license information. +// + +namespace MUnique.OpenMU.PlugIns; + +using System.Diagnostics.CodeAnalysis; +using System.Reflection; + +/// +/// A helper class for providing a localizable string property. +/// This class is currently compiled in both System.Web.dll and System.ComponentModel.DataAnnotations.dll. +/// +/// +/// See internal class of the same name in System.ComponentModel.DataAnnotations for reference. +/// +internal sealed class LocalizableString +{ + private readonly string _propertyName; + private Func? _cachedResult; + private string? _propertyValue; + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicProperties)] + private Type? _resourceType; + + /// + /// Constructs a localizable string, specifying the property name associated + /// with this item. The value will be used + /// within any exceptions thrown as a result of localization failures. + /// + /// + /// The name of the property being localized. This name + /// will be used within exceptions thrown as a result of localization failures. + /// + public LocalizableString(string propertyName) + { + this._propertyName = propertyName; + } + + /// + /// Gets or sets the value of this localizable string. This value can be + /// either the literal, non-localized value, or it can be a resource name + /// found on the resource type supplied to . + /// + public string? Value + { + get => this._propertyValue; + set + { + if (this._propertyValue != value) + { + this.ClearCache(); + this._propertyValue = value; + } + } + } + + /// + /// Gets or sets the resource type to be used for localization. + /// + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicProperties)] + public Type? ResourceType + { + get => this._resourceType; + set + { + if (this._resourceType != value) + { + this.ClearCache(); + this._resourceType = value; + } + } + } + + /// + /// Clears any cached values, forcing to + /// perform evaluation. + /// + private void ClearCache() + { + this._cachedResult = null; + } + + /// + /// Gets the potentially localized value. + /// + /// + /// If has been specified and is not + /// null, then localization will occur and the localized value will be returned. + /// + /// If is null then will be returned + /// as a literal, non-localized string. + /// + /// + /// + /// Thrown if localization fails. This can occur if has been + /// specified, is not null, but the resource could not be + /// accessed. must be a public class, and + /// must be the name of a public static string property that contains a getter. + /// + /// + /// Returns the potentially localized value. + /// + public string? GetLocalizableValue() + { + if (this._cachedResult == null) + { + // If the property value is null, then just cache that value + // If the resource type is null, then property value is literal, so cache it + if (this._propertyValue == null || this._resourceType == null) + { + this._cachedResult = () => this._propertyValue; + } + else + { + // Get the property from the resource type for this resource key + var property = this._resourceType.GetRuntimeProperty(this._propertyValue); + + // We need to detect bad configurations so that we can throw exceptions accordingly + var badlyConfigured = false; + + // Make sure we found the property and it's the correct type, and that the type itself is public + if (!this._resourceType.IsVisible || property == null || + property.PropertyType != typeof(string)) + { + badlyConfigured = true; + } + else + { + // Ensure the getter for the property is available as public static + // TODO - check that GetMethod returns the same as old GetGetMethod() + // in all situations regardless of modifiers + var getter = property.GetMethod; + if (getter == null || !(getter.IsPublic && getter.IsStatic)) + { + badlyConfigured = true; + } + } + + // If the property is not configured properly, then throw a missing member exception + if (badlyConfigured) + { + var exceptionMessage = string.Format("Localization failed for property '{0}'. '{2}' not found in '{1}'.", this._propertyName, this._resourceType.FullName, this._propertyValue); + this._cachedResult = () => throw new InvalidOperationException(exceptionMessage); + } + else + { + // We have a valid property, so cache the resource + this._cachedResult = () => (string?)property!.GetValue(null, null); + } + } + } + + // Return the cached result + return this._cachedResult(); + } +} \ No newline at end of file diff --git a/src/SourceGenerators/ResourceGenerator.cs b/src/SourceGenerators/ResourceGenerator.cs new file mode 100644 index 000000000..c111662b9 --- /dev/null +++ b/src/SourceGenerators/ResourceGenerator.cs @@ -0,0 +1,217 @@ +// +// Licensed under the MIT License. See LICENSE file in the project root for full license information. +// + +using System.IO; + +namespace MUnique.OpenMU.SourceGenerators; + +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp; +using Microsoft.CodeAnalysis.CSharp.Syntax; +using System.Diagnostics; +using System.Reflection; +using System.Text.RegularExpressions; + +/// +/// A which creates resource strings for all classes and properties of +/// the data model. It looks for the CloneableAttribute to identify which classes should get the generated code. +/// +[Generator] +public class ResourceGenerator : ISourceGenerator +{ + //private const string CloneableAttributeFullName = "MUnique.OpenMU.Annotations.CloneableAttribute"; + + //private const string CloneableAttributeName = "CloneableAttribute"; + + + /// + public void Initialize(GeneratorInitializationContext context) + { + } + + /// + public void Execute(GeneratorExecutionContext context) + { + if (!Debugger.IsAttached) + { + // Uncomment the following line to be able to debug it during the build: + //// Debugger.Launch(); + } + + var sb = this.StartResourceFile(); + foreach (SyntaxTree tree in context.Compilation.SyntaxTrees) + { + var semanticModel = context.Compilation.GetSemanticModel(tree); + foreach (var declaredClass in tree + .GetRoot() + .DescendantNodes() + .OfType()) + { + var declaredClassSymbol = semanticModel.GetDeclaredSymbol(declaredClass); + if (declaredClassSymbol is null) + { + continue; + } + + this.AppendResourceStrings(sb, declaredClass, declaredClassSymbol); + } + + foreach (var declaredClass in tree + .GetRoot() + .DescendantNodes() + .OfType()) + { + var declaredClassSymbol = semanticModel.GetDeclaredSymbol(declaredClass); + if (declaredClassSymbol is null) + { + continue; + } + + this.AppendResourceStrings(sb, declaredClass, declaredClassSymbol); + } + } + + sb.AppendLine(""); + + if (context.AnalyzerConfigOptions.GlobalOptions.TryGetValue("build_property.projectdir", out var projectDir)) + { + var targetPath = Path.Combine(projectDir, "Properties", "ModelResources.resx"); +#pragma warning disable RS1035 + File.WriteAllText(targetPath, sb.ToString(), Encoding.UTF8); +#pragma warning restore RS1035 + } + } + + private StringBuilder StartResourceFile() + { + var sb = new StringBuilder(); + sb.AppendLine($""" + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + """); + return sb; + } + + private void AppendResourceStrings(StringBuilder sb, ClassDeclarationSyntax annotatedClass, INamedTypeSymbol declaredClassSymbol) + { + var className = annotatedClass.Identifier.Text; + + sb.AppendLine($""" + + {CaptionHelper.GetTypeCaption(annotatedClass)} + + + {CaptionHelper.GetPluralizedTypeCaption(annotatedClass)} + + + + + """); + + this.GenerateProperties(sb, declaredClassSymbol, className); + } + + private void AppendResourceStrings(StringBuilder sb, EnumDeclarationSyntax annotatedEnum, INamedTypeSymbol declaredClassSymbol) + { + var enumName = annotatedEnum.Identifier.Text; + sb.AppendLine($""" + + {CaptionHelper.SeparateWords(enumName)} + + + + + """); + + foreach (var member in annotatedEnum.Members) + { + sb.AppendLine($""" + + {CaptionHelper.SeparateWords(member.Identifier.Text)} + + + + + """); + } + } + + private void GenerateProperties(StringBuilder sb, INamedTypeSymbol declaredClassSymbol, string className) + { + var properties = declaredClassSymbol + .GetMembers() + .OfType() + .Where(ps => ps.DeclaredAccessibility == Accessibility.Public); + foreach (var property in properties) + { + sb.AppendLine($""" + + {CaptionHelper.SeparateWords(property.Name)} + + + + + """); + } + } +} + +public static class CaptionHelper +{ + private static readonly Regex WordSeparatorRegex = new("([a-z])([A-Z])", RegexOptions.Compiled); + + /// + /// Separates the words by a space. Words are detected by upper case letters. + /// + /// The input. + /// The separated words. + public static string SeparateWords(string input) + { + return WordSeparatorRegex.Replace(input, "$1 $2") + .Replace(" Definitions", "s") + .Replace(" Definition", "s"); + } + + /// + /// Gets a nice caption for types. + /// + /// The type. + /// A nice caption for types. + public static string GetTypeCaption(ClassDeclarationSyntax type) + { + return SeparateWords(type.Identifier.Text); + } + + /// + /// Gets a pluralized caption for a type. + /// + /// The type. + /// A nice caption for types. + public static string GetPluralizedTypeCaption(ClassDeclarationSyntax type) + { + var result = GetTypeCaption(type); + result = result + .Replace(" Definitions", "s") + .Replace(" Definition", "s"); + if (!result.EndsWith("s")) + { + result += "s"; + } + + return result; + } +} diff --git a/src/Web/AdminPanel/CaptionHelper.cs b/src/Web/AdminPanel/CaptionHelper.cs deleted file mode 100644 index 78cdf0449..000000000 --- a/src/Web/AdminPanel/CaptionHelper.cs +++ /dev/null @@ -1,74 +0,0 @@ -// -// Licensed under the MIT License. See LICENSE file in the project root for full license information. -// - -namespace MUnique.OpenMU.Web.AdminPanel; - -using System.ComponentModel.DataAnnotations; -using System.Reflection; -using System.Text.RegularExpressions; - -/// -/// Helper class for captions. -/// -public static class CaptionHelper -{ - private static readonly Regex WordSeparatorRegex = new("([a-z])([A-Z])", RegexOptions.Compiled); - - /// - /// Separates the words by a space. Words are detected by upper case letters. - /// - /// The input. - /// The separated words. - public static string SeparateWords(string input) - { - return WordSeparatorRegex.Replace(input, "$1 $2") - .Replace(" Definitions", "s", StringComparison.InvariantCulture) - .Replace(" Definition", "s", StringComparison.InvariantCulture); - } - - /// - /// Gets a nice caption for types. - /// - /// The type. - /// A nice caption for types. - public static string GetTypeCaption(Type type) - { - if (type.GetCustomAttribute(typeof(DisplayAttribute)) is DisplayAttribute displayAttribute - && displayAttribute.GetName() is { } displayName) - { - return displayName; - } - - return SeparateWords(type.Name); - } - - /// - /// Gets a pluralized caption for a type. - /// - /// The type. - /// A nice caption for types. - public static string GetPluralizedTypeCaption(Type type) - { - var result = GetTypeCaption(type); - return result - .Replace(" Definitions", "s", StringComparison.InvariantCulture) - .Replace(" Definition", "s", StringComparison.InvariantCulture); - } - - /// - /// Gets a description for types. - /// - /// The type. - /// A description of the type. - public static string GetTypeDescription(Type type) - { - if (type.GetCustomAttribute(typeof(DisplayAttribute)) is DisplayAttribute displayAttribute - && displayAttribute.GetDescription() is { } description) - { - return description; - } - - return string.Empty; - } -} diff --git a/tests/MUnique.OpenMU.Tests/ModelResourcesTest.cs b/tests/MUnique.OpenMU.Tests/ModelResourcesTest.cs new file mode 100644 index 000000000..736d9e360 --- /dev/null +++ b/tests/MUnique.OpenMU.Tests/ModelResourcesTest.cs @@ -0,0 +1,136 @@ +// // +// // Licensed under the MIT License. See LICENSE file in the project root for full license information. +// // + +namespace MUnique.OpenMU.Tests; + +using System.Globalization; +using MUnique.OpenMU.DataModel; +using MUnique.OpenMU.DataModel.Configuration; +using MUnique.OpenMU.DataModel.Entities; + +/// +/// Unit tests for verifying that returns expected captions and descriptions +/// for types, properties and enum values, including fallbacks for unknown languages and types. +/// +[TestFixture] +public class ModelResourcesTest +{ + /// + /// Verifies that returns the expected caption + /// for in English culture. + /// + [Test] + public void TypeCaption() + { + var typeName = ModelResourceProvider.GetTypeCaption(CultureInfo.GetCultureInfo("en")); + Assert.That(typeName, Is.EqualTo("Area Skill Settings")); + } + + /// + /// Verifies that returns the pluralized caption + /// for in English culture. + /// + [Test] + public void TypeCaptionPlural() + { + var typeName = ModelResourceProvider.GetPluralizedTypeCaption(CultureInfo.GetCultureInfo("en")); + Assert.That(typeName, Is.EqualTo("Accounts")); + } + + /// + /// Verifies that returns the expected (empty) description + /// for in English culture. + /// + [Test] + public void TypeDescription() + { + var typeName = ModelResourceProvider.GetTypeDescription(CultureInfo.GetCultureInfo("en")); + Assert.That(typeName, Is.EqualTo("")); + } + + /// + /// Verifies that returns a humanized caption + /// for the property . + /// + [Test] + public void PropertyCaption() + { + var typeName = ModelResourceProvider.GetPropertyCaption(nameof(AreaSkillSettings.DelayBetweenHits), CultureInfo.GetCultureInfo("en")); + Assert.That(typeName, Is.EqualTo("Delay Between Hits")); + } + + /// + /// Verifies that a caption can be retrieved for a property inherited from a base type, + /// here . + /// + [Test] + public void InheritedPropertyCaption() + { + var typeName = ModelResourceProvider.GetPropertyCaption(nameof(ExitGate.X1), CultureInfo.GetCultureInfo("en")); + Assert.That(typeName, Is.EqualTo("X1")); + } + + /// + /// Verifies that returns the expected (empty) description + /// for property . + /// + [Test] + public void PropertyDescription() + { + var typeName = ModelResourceProvider.GetPropertyDescription(nameof(AreaSkillSettings.DelayBetweenHits), CultureInfo.GetCultureInfo("en")); + Assert.That(typeName, Is.EqualTo("")); + } + + /// + /// Verifies that an unknown language (Swahili here) falls back to a default caption for a known type. + /// + [Test] + public void TypeCaptionUnknownLanguage() + { + var typeName = ModelResourceProvider.GetTypeCaption(CultureInfo.GetCultureInfo("sw")); + Assert.That(typeName, Is.EqualTo("Area Skill Settings")); + } + + /// + /// Verifies that unknown types get a humanized caption from their type name (splitting PascalCase). + /// + [Test] + public void TypeCaptionUnknownType() + { + var typeName = ModelResourceProvider.GetTypeCaption(CultureInfo.GetCultureInfo("en")); + Assert.That(typeName, Is.EqualTo("Model Resources Test")); + } + + /// + /// Verifies that an unknown type and property name gets a humanized caption (PascalCase splitting). + /// + [Test] + public void PropertyCaptionUnknownTypeAndProperty() + { + var typeName = ModelResourceProvider.GetPropertyCaption("FooBar", CultureInfo.GetCultureInfo("en")); + Assert.That(typeName, Is.EqualTo("Foo Bar")); + } + + /// + /// Verifies that the generic overload of + /// returns the expected caption for an enum value. + /// + [Test] + public void EnumCaptionGeneric() + { + var caption = ModelResourceProvider.GetEnumCaption(AccountState.GameMaster, CultureInfo.GetCultureInfo("en")); + Assert.That(caption, Is.EqualTo("Game Master")); + } + + /// + /// Verifies that the non-generic overload of + /// returns the expected caption for an enum value. + /// + [Test] + public void EnumCaption() + { + var caption = ModelResourceProvider.GetEnumCaption(typeof(AccountState), AccountState.GameMaster, CultureInfo.GetCultureInfo("en")); + Assert.That(caption, Is.EqualTo("Game Master")); + } +} \ No newline at end of file From 21c0abc4574e68da33a658a125b7829cf176802e Mon Sep 17 00:00:00 2001 From: sven-n Date: Thu, 18 Dec 2025 21:02:14 +0100 Subject: [PATCH 04/32] Separated Name/Description of PlugInAttribute into DisplayAttribute This way we can add localized strings more easily. --- .../ConfigurableNetworkEncryptionPlugIn.cs | 4 +- .../MuHelper/MuHelperFeaturePlugIn.cs | 3 +- ...UpdatePetCommandManagerOnItemMovePlugIn.cs | 3 +- .../Duel/EndDuelWhenLeavingDuelMapPlugIn.cs | 3 +- .../Duel/UpdateDuelScorePlugIn.cs | 3 +- .../AlcoholConsumeHandlerPlugIn.cs | 3 +- .../AntidoteConsumeHandlerPlugIn.cs | 3 +- .../AppleConsumeHandlerPlugIn.cs | 3 +- .../BlessJewelConsumeHandlerPlugIn.cs | 3 +- .../FruitConsumeHandlerPlugIn.cs | 3 +- .../HarmonyJewelConsumeHandlerPlugIn.cs | 3 +- .../HigherRefineStoneConsumeHandlerPlugIn.cs | 3 +- .../LargeComplexPotionConsumeHandlerPlugIn.cs | 3 +- .../LargeHealthPotionConsumeHandlerPlugIn.cs | 3 +- .../LargeManaPotionConsumeHandler.cs | 3 +- .../LargeShieldPotionConsumeHandlerPlugIn.cs | 3 +- .../LearnablesConsumeHandlerPlugIn.cs | 3 +- .../LifeJewelConsumeHandlerPlugIn.cs | 3 +- .../LowerRefineStoneConsumeHandlerPlugIn.cs | 3 +- ...MediumComplexPotionConsumeHandlerPlugIn.cs | 3 +- .../MediumHealthPotionConsumeHandlerPlugIn.cs | 3 +- .../MediumManaPotionConsumeHandler.cs | 3 +- .../MediumShieldPotionConsumeHandlerPlugIn.cs | 3 +- .../SiegePotionConsumeHandlerPlugIn.cs | 5 +- .../SmallComplexPotionConsumeHandlerPlugIn.cs | 3 +- .../SmallHealthPotionConsumeHandlerPlugIn.cs | 3 +- .../SmallManaPotionConsumeHandler.cs | 3 +- .../SmallShieldPotionConsumeHandlerPlugIn.cs | 3 +- .../SoulJewelConsumeHandlerPlugIn.cs | 3 +- .../SummoningOrbConsumeHandlerPlugIn.cs | 3 +- .../TownPortalScrollConsumeHandlerPlugIn.cs | 3 +- .../Items/ItemBoxDroppedPlugIn.cs | 3 +- .../Items/LostMapDroppedPlugIn.cs | 13 ++-- .../Skills/ChainLightningSkillPlugIn.cs | 3 +- .../Skills/DrainLifeSkillPlugIn.cs | 3 +- .../Skills/EarthShakeSkillPlugIn.cs | 3 +- .../PlayerActions/Skills/ForceSkillAction.cs | 3 +- .../Skills/ForceWaveStrengSkillAction.cs | 3 +- .../Skills/NovaSkillStartPlugin.cs | 3 +- .../Skills/NovaSkillStopPlugin.cs | 3 +- .../Skills/PlasmaStormSkillPlugIn.cs | 3 +- .../Skills/SoulBarrierProficieSkillAction.cs | 3 +- .../Skills/SoulBarrierStrengSkillAction.cs | 3 +- .../Skills/SummonPartySkillPlugin.cs | 3 +- .../Skills/TargetedSkillDefaultPlugin.cs | 3 +- .../AddAgilityStatChatCommandPlugIn.cs | 3 +- .../AddCommandStatChatCommandPlugIn.cs | 3 +- .../AddEnergyStatChatCommandPlugIn.cs | 3 +- .../ChatCommands/AddStatChatCommandPlugIn.cs | 37 ++++++----- .../AddStrengthStatChatCommandPlugIn.cs | 3 +- .../AddVitalityStatChatCommandPlugIn.cs | 3 +- .../ChatCommands/BanAccChatCommandPlugIn.cs | 5 +- .../ChatCommands/BanCharChatCommandPlugIn.cs | 5 +- .../ChatCommands/CharInfoChatCommandPlugIn.cs | 31 ++++----- .../ChatBanCharChatCommandPlugIn.cs | 7 +- .../ChatUnbanCharChatCommandPlugIn.cs | 7 +- .../ClearInventoryChatCommandPlugIn.cs | 13 ++-- .../ChatCommands/CreateMonsterChatCommand.cs | 7 +- .../DisconnectChatCommandPlugIn.cs | 5 +- .../ChatCommands/GetLevelChatCommandPlugIn.cs | 7 +- .../GetLevelUpPointsChatCommandPlugIn.cs | 7 +- .../GetMasterLevelChatCommandPlugIn.cs | 7 +- ...GetMasterLevelUpPointsChatCommandPlugIn.cs | 7 +- .../ChatCommands/GetMoneyChatCommandPlugIn.cs | 7 +- .../GetResetsChatCommandPlugIn.cs | 9 +-- .../ChatCommands/GetStatChatCommandPlugIn.cs | 35 +++++----- .../GuildBattleSoccerChatCommandPlugIn.cs | 3 +- .../GuildDisconnectChatCommandPlugIn.cs | 5 +- .../GuildMoveChatCommandPlugIn.cs | 7 +- .../ChatCommands/GuildWarChatCommandPlugIn.cs | 3 +- .../PlugIns/ChatCommands/HelpCommand.cs | 11 ++-- .../ChatCommands/HideChatCommandPlugIn.cs | 3 +- .../ChatCommands/ItemChatCommandPlugIn.cs | 25 +++---- .../PlugIns/ChatCommands/ListCommand.cs | 5 +- .../ChatCommands/MoveChatCommandPlugIn.cs | 7 +- .../ChatCommands/MoveMonsterChatCommand.cs | 5 +- .../ChatCommands/NoticeChatCommandPlugIn.cs | 3 +- .../ChatCommands/NpcChatCommandPlugIn.cs | 11 ++-- .../ChatCommands/OnlineChatCommandPlugIn.cs | 5 +- .../OpenWarehouseChatCommandPlugIn.cs | 7 +- .../ChatCommands/PKChatCommandPlugIn.cs | 51 ++++++++------- .../ChatCommands/PKClearChatCommandPlugIn.cs | 7 +- .../ChatCommands/PostChatCommandPlugIn.cs | 3 +- .../ChatCommands/RemoveNpcChatCommand.cs | 7 +- .../ChatCommands/SetLevelChatCommandPlugIn.cs | 9 +-- .../SetLevelUpPointsChatCommandPlugIn.cs | 9 +-- .../SetMasterLevelChatCommandPlugIn.cs | 9 +-- ...SetMasterLevelUpPointsChatCommandPlugIn.cs | 11 ++-- .../ChatCommands/SetMoneyChatCommandPlugIn.cs | 9 +-- .../SetResetsChatCommandPlugIn.cs | 13 ++-- .../ChatCommands/SetStatChatCommandPlugIn.cs | 65 ++++++++++--------- .../ShowFireworksEffectChatCommandPlugIn.cs | 3 +- .../ChatCommands/ShowNpcIdsChatCommand.cs | 3 +- ...howXmasFireworksEffectChatCommandPlugIn.cs | 3 +- .../ChatCommands/SkinChatCommandPlugIn.cs | 3 +- .../StartBloodCastleEventChatCommandPlugIn.cs | 3 +- .../StartChaosCastleEventChatCommandPlugIn.cs | 3 +- .../StartDevilSquareEventChatCommandPlugIn.cs | 3 +- .../ChatCommands/TeleportChatCommandPlugIn.cs | 3 +- .../ChatCommands/TraceChatCommandPlugIn.cs | 3 +- .../ChatCommands/TrackChatCommandPlugIn.cs | 3 +- .../ChatCommands/UnBanAccChatCommandPlugIn.cs | 5 +- .../UnBanCharChatCommandPlugIn.cs | 5 +- .../ChatCommands/UnHideChatCommandPlugIn.cs | 3 +- .../ChatCommands/WalkMonsterChatCommand.cs | 5 +- .../PlugIns/GuildWarKillScorePlugIn.cs | 3 +- .../InvasionEvents/GoldenInvasionPlugIn.cs | 3 +- .../InvasionEvents/RedDragonInvasionPlugIn.cs | 3 +- .../PlugIns/PeriodicSaveProgressPlugIn.cs | 3 +- .../PeriodicTasks/BloodCastleStartPlugIn.cs | 3 +- .../PeriodicTasks/ChaosCastleStartPlugIn.cs | 3 +- .../PeriodicTasks/DevilSquareStartPlugIn.cs | 3 +- .../PlugIns/PeriodicTasks/HappyHourPlugIn.cs | 3 +- .../PlayerLosesExperienceAfterDeathPlugIn.cs | 3 +- .../PlayerLosesMoneyAfterDeathPlugIn.cs | 3 +- .../PlugIns/QuestMonsterKillCountPlugIn.cs | 9 +-- src/GameLogic/PlugIns/SelfDefensePlugIn.cs | 3 +- ...essageToAllWhenPlayerEnteredWorldPlugIn.cs | 5 +- .../PlugIns/SymbolOfKundunStackedPlugIn.cs | 3 +- .../UnlockDarkLordAtLevel250.cs | 3 +- .../UnlockMagicGladiatorAtLevel220.cs | 3 +- .../UnlockRageFighterAtLevel150.cs | 3 +- .../UnlockSummonerAtLevel1.cs | 3 +- .../UpdateIsInSafezoneAfterPlayerMoved.cs | 3 +- .../WanderingMerchantsPlugIn.cs | 3 +- src/GameLogic/PlugIns/WeatherUpdatePlugIn.cs | 3 +- src/GameLogic/Resets/GatekeeperNpcPlugin.cs | 3 +- .../Resets/ResetCharacterNpcPlugin.cs | 3 +- .../Resets/ResetChatCommandPlugIn.cs | 3 +- src/GameLogic/Resets/ResetFeaturePlugIn.cs | 3 +- .../MessageHandler/AnimationHandlerPlugIn.cs | 3 +- .../AreaSkillAttackHandlerPlugIn.cs | 3 +- .../AreaSkillAttackHandlerPlugIn075.cs | 3 +- .../AreaSkillAttackHandlerPlugIn095.cs | 3 +- .../AreaSkillHitHandlerPlugIn.cs | 3 +- .../AreaSkillHitHandlerPlugIn075.cs | 3 +- .../AreaSkillHitHandlerPlugIn095.cs | 3 +- ...racterAddMasterPointPacketHandlerPlugIn.cs | 3 +- ...CharacterClientReadyPacketHandlerPlugIn.cs | 3 +- .../CharacterCreatePacketHandlerPlugIn.cs | 3 +- .../CharacterDeletePacketHandlerPlugIn.cs | 3 +- .../CharacterFocusPacketHandlerPlugIn.cs | 3 +- .../Character/CharacterGroupHandlerPlugIn.cs | 3 +- ...cterKeyConfigurationPacketHandlerPlugIn.cs | 3 +- ...CharacterListRequestPacketHandlerPlugIn.cs | 3 +- .../CharacterSelectPacketHandlerPlugIn.cs | 3 +- ...haracterStatIncreasePacketHandlerPlugIn.cs | 3 +- .../CharacterMoveHandlerPlugIn.cs | 3 +- .../CharacterMoveHandlerPlugIn075.cs | 3 +- .../CharacterWalkHandlerPlugIn.cs | 3 +- .../CharacterWalkHandlerPlugIn075.cs | 3 +- .../ChatMessageHandlerPlugIn.cs | 3 +- .../CloseNpcDialogHandlerPlugIn.cs | 3 +- ...CraftingDialogCloseRequestHandlerPlugIn.cs | 3 +- .../DuelChannelJoinRequestHandlerPlugIn.cs | 3 +- .../DuelChannelQuitRequestHandlerPlugIn.cs | 3 +- .../Duel/DuelGroupHandlerPlugIn.cs | 3 +- .../Duel/DuelStartRequestHandlerPlugIn.cs | 3 +- .../Duel/DuelStartResponseHandlerPlugIn.cs | 3 +- .../Duel/DuelStopResponseHandlerPlugIn.cs | 3 +- .../EnterOnGatekeeperHandlerPlugIn.cs | 3 +- .../EnterOnWerewolfHandlerPlugIn.cs | 3 +- .../Guild/CancelGuildCreationHandlerPlugIn.cs | 3 +- .../Guild/GuildCreateHandlerPlugIn.cs | 3 +- .../Guild/GuildCreateHandlerPlugIn075.cs | 3 +- .../Guild/GuildInfoRequestHandlerPlugIn.cs | 3 +- .../Guild/GuildKickPlayerHandlerPlugIn.cs | 3 +- .../Guild/GuildListRequestHandlerPlugIn.cs | 3 +- .../Guild/GuildMasterAnswerHandlerPlugIn.cs | 3 +- .../Guild/GuildRequestAnswerHandlerPlugIn.cs | 3 +- .../Guild/GuildRequestHandlerPlugIn.cs | 3 +- .../Guild/GuildWarResponseHandlerPlugIn.cs | 3 +- .../MessageHandler/HitHandlerPlugIn.cs | 3 +- .../MessageHandler/HitHandlerPlugIn075.cs | 3 +- .../Items/BuyNpcItemHandlerPlugIn.cs | 3 +- .../Items/ChaosMixHandlerPlugIn.cs | 3 +- .../Items/ConsumeItemHandlerPlugIn.cs | 3 +- .../Items/ConsumeItemHandlerPlugIn075.cs | 3 +- .../Items/DropItemHandlerPlugIn.cs | 3 +- .../Items/ItemMoveExtendedHandlerPlugIn.cs | 3 +- .../Items/ItemMoveHandlerPlugIn.cs | 3 +- .../Items/ItemRepairHandlerPlugIn.cs | 3 +- .../Items/JewelMixHandlerPlugIn.cs | 3 +- .../Items/PickupItemHandlerPlugIn.cs | 3 +- .../Items/PickupItemHandlerPlugIn075.cs | 3 +- .../Items/SellItemToNpcHandlerPlugIn.cs | 3 +- .../Login/LogInHandlerPlugIn.cs | 3 +- .../MessageHandler/Login/LogInOutGroup.cs | 3 +- .../LogOutByCheatDetectionHandlerPlugIn.cs | 3 +- .../Login/LogOutHandlerPlugIn.cs | 3 +- .../Messenger/AddFriendHandlerPlugIn.cs | 3 +- .../ChangeOnlineStateHandlerPlugIn.cs | 3 +- .../Messenger/ChatRequestHandlerPlugIn.cs | 3 +- .../ChatRoomInvitationRequestPlugIn.cs | 3 +- .../Messenger/DeleteFriendHandlerPlugIn.cs | 3 +- .../FriendAddResponseHandlerPlugIn.cs | 3 +- .../Messenger/LetterDeleteHandlerPlugIn.cs | 3 +- .../LetterReadRequestHandlerPlugIn.cs | 3 +- .../Messenger/LetterSendHandlerPlugIn.cs | 3 +- .../BloodCastleEnterHandlerPlugIn.cs | 3 +- .../ChaosCastleEnterHandlerPlugIn.cs | 3 +- .../DevilSquareEnterHandlerPlugIn.cs | 3 +- ...iniGameOpeningStateRequestHandlerPlugIn.cs | 3 +- .../MuHelper/MuHelperGroupHandler.cs | 3 +- .../MuHelperSaveDataRequestHandlerPlugin.cs | 3 +- ...uHelperStatusChangeRequestHandlerPlugIn.cs | 3 +- .../NpcActionGroupHandlerPlugIn.cs | 3 +- .../Party/PartyKickHandlerPlugIn.cs | 3 +- .../Party/PartyListRequestHandlerPlugIn.cs | 3 +- .../Party/PartyRequestHandlerPlugIn.cs | 3 +- .../Party/PartyResponseHandlerPlugIn.cs | 3 +- .../Pet/PetCommandRequestHandlerPlugIn.cs | 3 +- .../Pet/PetInfoRequestHandlerPlugIn.cs | 3 +- ...PlayerShopBuyRequestPacketHandlerPlugIn.cs | 3 +- .../PlayerShopClosePacketHandlerPlugIn.cs | 3 +- .../PlayerShopOpenPacketHandlerPlugIn.cs | 3 +- ...rShopRequestItemListPacketHandlerPlugIn.cs | 3 +- ...ayerShopSetItemPricePacketHandlerPlugIn.cs | 3 +- .../PlayerShop/StoreHandlerGroupPlugIn.cs | 3 +- .../ActiveQuestListRequestHandlerPlugIn.cs | 3 +- .../AvailableQuestsRequestHandlerPlugIn.cs | 3 +- .../Quests/BuffRequestHandlerPlugIn.cs | 3 +- .../EventQuestStateRequestHandlerPlugIn.cs | 3 +- .../Quests/QuestCancelRequestHandlerPlugIn.cs | 3 +- .../Quests/QuestClientActionHandlerPlugIn.cs | 3 +- .../QuestCompletionRequestHandlerPlugIn.cs | 3 +- .../Quests/QuestGroupHandlerPlugIn.cs | 3 +- .../QuestProceedRequestHandlerPlugIn.cs | 3 +- .../Quests/QuestSelectRequestHandlerPlugIn.cs | 3 +- ...uestStateListLegacyRequestHandlerPlugIn.cs | 3 +- .../Quests/QuestStateRequestHandlerPlugIn.cs | 3 +- ...QuestStateSetLegacyRequestHandlerPlugIn.cs | 3 +- .../RageSkillAttackHandlerPlugIn.cs | 3 +- .../RageSkillAttackRequestHandlerPlugIn.cs | 3 +- .../MessageHandler/TalkNpcHandlerPlugIn.cs | 3 +- .../MessageHandler/TalkNpcHandlerPlugIn075.cs | 3 +- .../TargetedSkillHandlerPlugIn.cs | 3 +- .../TargetedSkillHandlerPlugIn075.cs | 3 +- .../TargetedSkillHandlerPlugIn095.cs | 3 +- .../TeleportTargetHandlerPlugIn.cs | 3 +- .../Trade/TradeAcceptHandlerPlugIn.cs | 3 +- .../Trade/TradeButtonHandlerPlugIn.cs | 3 +- .../Trade/TradeCancelHandlerPlugIn.cs | 3 +- .../Trade/TradeMoneyHandlerPlugIn.cs | 3 +- .../Trade/TradeRequestHandlerPlugIn.cs | 3 +- .../Vault/RemoveVaultPinPlugIn.cs | 3 +- .../MessageHandler/Vault/SetVaultPinPlugIn.cs | 3 +- .../MessageHandler/Vault/UnlockVaultPlugIn.cs | 3 +- .../Vault/VaultCloseHandlerPlugIn.cs | 3 +- .../Vault/VaultLockGroupPlugIn.cs | 3 +- .../Vault/VaultMoneyHandlerPlugIn.cs | 3 +- .../WarpGateHandler075PlugIn.cs | 3 +- .../MessageHandler/WarpGateHandlerPlugIn.cs | 3 +- .../MessageHandler/WarpHandlerPlugIn.cs | 3 +- .../WhisperedChatMessageHandlerPlugIn.cs | 3 +- .../RemoteView/AppearanceSerializer.cs | 3 +- .../RemoteView/AppearanceSerializer075.cs | 3 +- .../RemoteView/AppearanceSerializer095.cs | 3 +- .../AppearanceSerializerExtended.cs | 3 +- .../Character/AddExperienceExtendedPlugIn.cs | 3 +- .../Character/AddExperiencePlugIn.cs | 3 +- .../Character/ApplyKeyConfigurationPlugIn.cs | 3 +- .../Character/CharacterFocusedPlugIn.cs | 3 +- .../Character/FruitConsumptionResultPlugIn.cs | 3 +- .../MasterSkillLevelChangedPlugIn.cs | 3 +- .../ShowCharacterCreationFailedPlugIn.cs | 3 +- .../ShowCharacterDeleteResponsePlugIn.cs | 3 +- .../ShowCharacterListExtendedPlugIn.cs | 3 +- .../Character/ShowCharacterListPlugIn.cs | 3 +- .../Character/ShowCharacterListPlugIn075.cs | 3 +- .../Character/ShowCharacterListPlugIn095.cs | 3 +- .../Character/ShowCreatedCharacterPlugIn.cs | 3 +- .../RemoteView/Character/ShowDialogPlugIn.cs | 3 +- .../RemoteView/Character/ShowEffectPlugIn.cs | 3 +- .../Character/ShowItemDropEffectPlugIn.cs | 3 +- .../Character/SkillListViewPlugIn.cs | 3 +- .../Character/SkillListViewPlugIn075.cs | 3 +- .../Character/SkillListViewPlugIn095.cs | 3 +- .../StatIncreaseResultExtendedPlugIn.cs | 3 +- .../Character/StatIncreaseResultPlugIn.cs | 3 +- .../UpdateCharacterBaseStatsExtendedPlugIn.cs | 3 +- .../UpdateCharacterHeroStatePlugIn.cs | 3 +- .../UpdateCharacterStatsExtendedPlugIn.cs | 3 +- .../Character/UpdateCharacterStatsPlugIn.cs | 3 +- .../UpdateCharacterStatsPlugIn075.cs | 3 +- .../UpdateCharacterStatsPlugIn097.cs | 3 +- .../Character/UpdateLevelExtendedPlugIn.cs | 3 +- .../RemoteView/Character/UpdateLevelPlugIn.cs | 3 +- .../Character/UpdateMasterSkillsPlugIn.cs | 3 +- .../UpdateMasterStatsExtendedPlugIn.cs | 3 +- .../Character/UpdateMasterStatsPlugIn.cs | 3 +- .../Character/UpdateStatsExtendedPlugIn.cs | 3 +- .../RemoteView/Character/UpdateStatsPlugIn.cs | 3 +- src/GameServer/RemoteView/ChatViewPlugIn.cs | 3 +- .../RemoteView/ConsumeSpecialItemPlugIn.cs | 3 +- .../RemoteView/Duel/DuelEndedPlugIn.cs | 3 +- .../RemoteView/Duel/DuelFinishedPlugIn.cs | 3 +- .../RemoteView/Duel/DuelHealthUpdatePlugIn.cs | 3 +- .../Duel/DuelSpectatorAddedPlugIn.cs | 3 +- .../Duel/DuelSpectatorListUpdatePlugIn.cs | 3 +- .../Duel/DuelSpectatorRemovedPlugIn.cs | 3 +- .../RemoteView/Duel/DuelStatusUpdatePlugIn.cs | 3 +- .../RemoteView/Duel/InitializeDuelPlugIn.cs | 3 +- .../RemoteView/Duel/ShowDuelRequestPlugIn.cs | 3 +- .../Duel/ShowDuelRequestResultPlugIn.cs | 3 +- .../Duel/ShowDuelScoreUpdatePlugIn.cs | 3 +- .../Guild/AssignPlayersToGuildPlugIn.cs | 3 +- .../Guild/AssignPlayersToGuildPlugIn075.cs | 3 +- .../Guild/GuildJoinResponsePlugIn.cs | 3 +- .../RemoteView/Guild/GuildKickResultPlugIn.cs | 3 +- .../Guild/GuildWarScoreUpdatePlugIn.cs | 3 +- .../RemoteView/Guild/PlayerLeftGuildPlugIn.cs | 3 +- .../Guild/ShowGuildCreateResultPlugIn.cs | 3 +- .../Guild/ShowGuildCreationDialogPlugIn.cs | 3 +- .../RemoteView/Guild/ShowGuildInfoPlugIn.cs | 3 +- .../Guild/ShowGuildJoinRequestPlugIn.cs | 3 +- .../RemoteView/Guild/ShowGuildListPlugIn.cs | 3 +- .../Guild/ShowGuildListPlugIn075.cs | 3 +- .../Guild/ShowGuildMasterDialogPlugIn.cs | 3 +- .../Guild/ShowGuildWarDeclaredPlugIn.cs | 3 +- .../Guild/ShowGuildWarRequestPlugIn.cs | 3 +- .../Guild/ShowGuildWarResultPlugIn.cs | 3 +- .../ShowShowGuildWarRequestResultPlugIn.cs | 3 +- .../Inventory/BuyNpcItemFailedPlugIn.cs | 3 +- .../RemoteView/Inventory/ItemAppearPlugIn.cs | 3 +- .../Inventory/ItemDropResultPlugIn.cs | 3 +- .../Inventory/ItemDurabilityChangedPlugIn.cs | 3 +- .../Inventory/ItemMoveFailedPlugIn.cs | 3 +- .../RemoteView/Inventory/ItemMovedPlugIn.cs | 3 +- .../Inventory/ItemPickUpFailedPlugIn.cs | 3 +- .../Inventory/ItemPriceSetResponsePlugIn.cs | 3 +- .../RemoteView/Inventory/ItemRemovedPlugIn.cs | 3 +- .../Inventory/ItemSoldByPlayerShopPlugIn.cs | 3 +- .../Inventory/ItemSoldToNpcPlugIn.cs | 3 +- .../Inventory/ItemUpgradedPlugIn.cs | 3 +- .../Inventory/NpcItemBoughtPlugIn.cs | 3 +- ...layerShopBuyRequestResultExtendedPlugIn.cs | 3 +- .../PlayerShopBuyRequestResultPlugIn.cs | 3 +- ...stedItemConsumptionFailedExtendedPlugIn.cs | 3 +- .../RequestedItemConsumptionFailedPlugIn.cs | 3 +- .../Inventory/UpdateInventoryListPlugIn.cs | 3 +- .../RemoteView/Inventory/UpdateMoneyPlugIn.cs | 3 +- src/GameServer/RemoteView/ItemSerializer.cs | 3 +- .../RemoteView/ItemSerializer075.cs | 3 +- .../RemoteView/ItemSerializer095.cs | 3 +- .../RemoteView/ItemSerializerExtended.cs | 3 +- .../RemoteView/Login/LogoutPlugIn.cs | 3 +- .../RemoteView/Login/ShowLoginResultPlugIn.cs | 3 +- .../RemoteView/Login/ShowLoginWindowPlugIn.cs | 3 +- .../Messenger/AddToLetterListPlugIn.cs | 3 +- .../Messenger/ChatRoomCreatedPlugIn.cs | 3 +- .../RemoteView/Messenger/FriendAddedPlugIn.cs | 3 +- .../Messenger/FriendDeletedPlugIn.cs | 3 +- .../Messenger/FriendStateUpdatePlugIn.cs | 3 +- .../Messenger/InitializeMessengerPlugIn.cs | 3 +- .../Messenger/LetterDeletedPlugIn.cs | 3 +- .../Messenger/LetterSendResultPlugIn.cs | 3 +- .../ShowFriendInvitationResultPlugIn.cs | 3 +- .../Messenger/ShowFriendRequestPlugIn.cs | 3 +- .../Messenger/ShowLetterExtendedPlugIn.cs | 3 +- .../RemoteView/Messenger/ShowLetterPlugIn.cs | 3 +- .../BloodCastleScoreTableViewPlugin.cs | 3 +- .../MiniGames/BloodCastleStateViewPlugIn.cs | 3 +- .../ChangeTerrainAttributesViewPlugIn.cs | 3 +- .../MiniGames/ChaosCastleStateViewPlugIn.cs | 3 +- .../MiniGames/MiniGameScoreTableViewPlugin.cs | 3 +- .../ShowMiniGameEnterResultViewPlugIn.cs | 3 +- .../ShowMiniGameOpeningStateViewPlugIn.cs | 3 +- .../UpdateMiniGameStateViewViewPlugIn.cs | 3 +- .../MuHelperConfigurationUpdatePlugIn.cs | 3 +- .../MuHelper/MuHelperStatusUpdatePlugIn.cs | 3 +- .../NPC/NpcDialogClosedPlugIn075.cs | 3 +- .../RemoteView/NPC/OpenNpcWindowPlugIn.cs | 3 +- .../NPC/ShowItemCraftingResultPlugIn.cs | 3 +- .../NPC/ShowMerchantStoreItemListPlugIn.cs | 3 +- .../NPC/ShowMessageOfObjectPlugIn.cs | 3 +- .../RemoteView/Party/PartyHealthViewPlugIn.cs | 3 +- .../Party/PartyMemberRemovedPlugIn.cs | 3 +- .../Party/ShowPartyRequestPlugIn.cs | 3 +- .../RemoteView/Party/UpdatePartyListPlugIn.cs | 3 +- .../Party/UpdatePartyListPlugIn075.cs | 3 +- .../RemoteView/Pet/PetAttackViewPlugIn.cs | 3 +- .../Pet/PetBehaviourChangedViewPlugIn.cs | 3 +- .../RemoteView/Pet/PetInfoViewPlugIn.cs | 3 +- .../PlayerShop/PlayerShopClosedPlugIn.cs | 3 +- .../PlayerShop/PlayerShopOpenedPlugIn.cs | 3 +- .../ShowShopItemListExtendedPlugIn.cs | 3 +- .../PlayerShop/ShowShopItemListPlugIn.cs | 3 +- .../PlayerShop/ShowShopsOfPlayersPlugIn.cs | 3 +- .../Quest/CurrentlyActiveQuestsPlugIn.cs | 3 +- .../Quest/LegacyQuestRewardPlugIn.cs | 3 +- .../Quest/LegacyQuestStateDialogPlugIn.cs | 3 +- .../RemoteView/Quest/QuestCancelledPlugIn.cs | 3 +- .../Quest/QuestCompletionResponsePlugIn.cs | 3 +- .../Quest/QuestEventResponsePlugIn.cs | 3 +- .../Quest/QuestProgressExtendedPlugIn.cs | 3 +- .../RemoteView/Quest/QuestProgressPlugIn.cs | 3 +- .../RemoteView/Quest/QuestStartedPlugIn.cs | 3 +- .../Quest/QuestStateResponseExtendedPlugIn.cs | 3 +- .../Quest/QuestStateResponsePlugIn.cs | 3 +- .../RemoteView/Quest/QuestStepInfoPlugIn.cs | 3 +- .../Quest/ShowAvailableQuestsPlugIn.cs | 3 +- .../RemoteView/ShowMessagePlugIn.cs | 3 +- .../Trade/ChangeTradeButtonStatePlugIn.cs | 3 +- .../RequestedTradeMoneyHasBeenSetPlugIn.cs | 3 +- .../RemoteView/Trade/SetTradeMoneyPlugIn.cs | 3 +- .../Trade/ShowTradeRequestAnswerPlugIn.cs | 3 +- .../Trade/ShowTradeRequestPlugIn.cs | 3 +- .../RemoteView/Trade/TradeFinishedPlugIn.cs | 3 +- .../RemoteView/Trade/TradeItemAppearPlugIn.cs | 3 +- .../Trade/TradeItemDisappearPlugIn.cs | 3 +- .../RemoteView/Vault/CloseVaultPlugIn.cs | 3 +- .../ShowVaultLockChangeResponsePlugIn.cs | 3 +- .../RemoteView/Vault/ShowVaultPlugIn.cs | 3 +- .../Vault/UpdateVaultMoneyPlugIn.cs | 3 +- .../Vault/UpdateVaultStatePlugIn.cs | 3 +- .../World/AppearanceChangedPlugIn.cs | 6 +- .../World/DeActivateMagicEffectPlugIn.cs | 3 +- .../World/DeActivateMagicEffectPlugIn075.cs | 3 +- .../World/DroppedItemsDisappearedPlugIn.cs | 3 +- .../RemoteView/World/MapChangePlugIn.cs | 3 +- .../RemoteView/World/MapChangePlugIn075.cs | 3 +- .../World/MapEventStateUpdatePlugIn.cs | 3 +- .../RemoteView/World/NewNpcsInScopePlugIn.cs | 3 +- .../World/NewNpcsInScopePlugIn075.cs | 3 +- .../World/NewNpcsInScopePlugIn095.cs | 3 +- .../World/NewPlayersInScopeExtendedPlugIn.cs | 3 +- .../World/NewPlayersInScopePlugIn.cs | 3 +- .../World/NewPlayersInScopePlugIn075.cs | 3 +- .../World/NewPlayersInScopePlugIn095.cs | 3 +- .../RemoteView/World/ObjectGotKilledPlugIn.cs | 3 +- .../RemoteView/World/ObjectMovedPlugIn.cs | 3 +- .../RemoteView/World/ObjectMovedPlugIn075.cs | 3 +- .../World/ObjectMovedPlugInExtended.cs | 3 +- .../World/ObjectsOutOfScopePlugIn.cs | 3 +- .../World/RespawnAfterDeathExtendedPlugIn.cs | 3 +- .../World/RespawnAfterDeathPlugIn.cs | 3 +- .../World/RespawnAfterDeathPlugIn075.cs | 3 +- .../World/RespawnAfterDeathPlugIn095.cs | 3 +- .../RemoteView/World/ShowAnimationPlugIn.cs | 3 +- .../World/ShowAnimationPlugIn075.cs | 3 +- .../World/ShowAreaSkillAnimationPlugIn.cs | 3 +- .../World/ShowAreaSkillAnimationPlugIn075.cs | 3 +- .../World/ShowAreaSkillAnimationPlugIn095.cs | 3 +- .../World/ShowChainLightningPlugIn.cs | 3 +- .../World/ShowDroppedItemsPlugIn.cs | 3 +- .../RemoteView/World/ShowHitExtendedPlugIn.cs | 3 +- .../RemoteView/World/ShowHitPlugIn.cs | 3 +- .../RemoteView/World/ShowMoneyDrop075.cs | 3 +- .../World/ShowMoneyDropExtendedPlugIn.cs | 3 +- .../RemoteView/World/ShowMoneyDropPlugIn.cs | 3 +- .../RemoteView/World/ShowRageAttackPlugIn.cs | 3 +- .../World/ShowRageAttackRangePlugIn.cs | 3 +- .../World/ShowSkillAnimationPlugIn.cs | 3 +- .../World/ShowSkillAnimationPlugIn075.cs | 3 +- .../World/ShowSkillAnimationPlugIn095.cs | 3 +- .../World/SkillStageUpdatePlugInPlugIn.cs | 3 +- .../RemoteView/World/TeleportPlugIn.cs | 3 +- .../RemoteView/World/TeleportPlugIn075.cs | 3 +- .../RemoteView/World/UpdateRotationPlugIn.cs | 3 +- .../World/WeatherStatusUpdatePlugIn.cs | 3 +- ...rceClientNetworkEncryptionFactoryPlugIn.cs | 4 +- ...reSeason6NetworkEncryptionFactoryPlugIn.cs | 4 +- ...6Episode3NetworkEncryptionFactoryPlugIn.cs | 4 +- ...ersion075NetworkEncryptionFactoryPlugIn.cs | 4 +- .../CharacterCreated/AddArrowsForFairyElf.cs | 3 +- .../AddChargeForRageFighter.cs | 3 +- .../AddCrescentMoonSlashForDarkKnight.cs | 3 +- .../AddEnergyBallForDarkWizard.cs | 3 +- .../AddFireBlastForDarkLord.cs | 3 +- .../CharacterCreated/AddForceForDarkLord.cs | 3 +- .../CharacterCreated/AddLanceForSummoner.cs | 3 +- .../AddManaRaysForMagicGladiator.cs | 3 +- ...AddRingOfWarriorLevel40ForNewCharacters.cs | 3 +- ...AddRingOfWarriorLevel80ForNewCharacters.cs | 3 +- .../AddShortBowForFairyElf.cs | 3 +- .../AddShortSwordForDarkLord.cs | 3 +- .../AddShortSwordForMagicGladiator.cs | 3 +- .../AddSmallAxeForDarkKnight.cs | 3 +- .../AddSmallShieldForDarkLord.cs | 3 +- .../AddSmallShieldForMagicGladiator.cs | 3 +- .../AddSpiralSlashForMagicGladiator.cs | 3 +- .../AddStarfallForFairyElf.cs | 3 +- .../AddAreaSkillSettingsUpdatePlugIn.cs | 3 +- .../Updates/AddDuelConfigurationPlugIn.cs | 3 +- .../Updates/AddGuardsDataPlugIn.cs | 3 +- .../AddHarmonyOptionWeightsUpdateSeason6.cs | 3 +- .../AddItemDropGroupForJewelsUpdate075.cs | 3 +- .../AddItemDropGroupForJewelsUpdate095d.cs | 3 +- .../AddItemDropGroupForJewelsUpdateSeason6.cs | 3 +- .../Initialization/Updates/AddKalimaPlugIn.cs | 3 +- .../AddPointsPerResetAttributePlugIn.cs | 3 +- .../Updates/AddQuestItemLimitPlugIn.cs | 3 +- .../Updates/ChainLightningUpdatePlugIn.cs | 3 +- .../Updates/ChaosCastleDataUpdatePlugIn.cs | 3 +- .../FixAncientDiscriminatorsUpdatePlugIn.cs | 3 +- .../FixAttackSpeedCalculationUpdate.cs | 3 +- .../Updates/FixChaosMixesPlugIn095D.cs | 3 +- .../Updates/FixChaosMixesPlugInSeason6.cs | 3 +- .../Updates/FixChaosMixesUpdatePlugIn075.cs | 3 +- .../Updates/FixCharStatsForceWavePlugIn075.cs | 3 +- .../FixCharStatsForceWavePlugIn095d.cs | 3 +- .../FixCharStatsForceWavePlugInSeason6.cs | 3 +- .../FixDamageAbsorbItemsUpdatePlugIn.cs | 3 +- .../Updates/FixDamageCalcsPlugIn075.cs | 3 +- .../Updates/FixDamageCalcsPlugIn095d.cs | 3 +- .../Updates/FixDamageCalcsPlugInSeason6.cs | 3 +- .../Updates/FixDefenseCalcsPlugIn075.cs | 3 +- .../Updates/FixDefenseCalcsPlugIn095d.cs | 3 +- .../Updates/FixDefenseCalcsPlugInSeason6.cs | 3 +- .../Updates/FixDrainLifeSkillUpdate.cs | 3 +- .../Updates/FixDuelArenaSafezoneMapUpdate.cs | 3 +- ...ntItemsDropFromMonstersUpdatePlugIn095d.cs | 3 +- ...temsDropFromMonstersUpdatePlugInSeason6.cs | 3 +- .../FixHorseFenrirOptionsSoulBarrierPlugIn.cs | 3 +- .../FixIgnoreDefenseSkillUpdatePlugIn.cs | 3 +- .../FixItemOptionsAndAttackSpeedPlugIn075.cs | 3 +- .../FixItemOptionsAndAttackSpeedPlugIn095d.cs | 3 +- ...xItemOptionsAndAttackSpeedPlugInSeason6.cs | 3 +- .../Updates/FixItemRequirementsPlugIn.cs | 3 +- .../Updates/FixItemRequirementsPlugIn2.cs | 3 +- .../FixJeweleryPetsDamageCalcsPlugIn075.cs | 3 +- .../FixJeweleryPetsDamageCalcsPlugIn095d.cs | 3 +- ...FixJeweleryPetsDamageCalcsPlugInSeason6.cs | 3 +- .../FixLevelDiv20ExcOptionUpdatePlugIn.cs | 3 +- .../Updates/FixLifeSwellEffectUpdatePlugIn.cs | 3 +- ...naAndAbilityJewelryOptionsUpdateSeason6.cs | 3 +- .../Updates/FixSetBonusesPlugIn.cs | 9 ++- .../FixSocketSeedCraftingUpdatePlugIn.cs | 3 +- .../Updates/FixWarpLevelUpdatePlugIn.cs | 3 +- .../Updates/FixWarriorMorningStarPlugIn.cs | 3 +- .../FixWeaponRisePercentagePlugIn075.cs | 3 +- .../FixWeaponRisePercentagePlugIn095d.cs | 3 +- .../FixWeaponRisePercentagePlugInSeason6.cs | 3 +- .../FixWingsAndCapesCraftingsUpdatePlugIn.cs | 3 +- .../FixWingsDmgRatesUpdatePlugIn075.cs | 3 +- .../FixWingsDmgRatesUpdatePlugIn095d.cs | 3 +- .../FixWingsDmgRatesUpdatePlugInSeason6.cs | 3 +- ...finityArrowSkillOnQuestCompletionPlugIn.cs | 3 +- .../Updates/SpawnFixesUpdatePlugIn.cs | 3 +- .../SystemConfigurationAddedPlugIn075.cs | 3 +- .../SystemConfigurationAddedPlugIn095d.cs | 3 +- .../SystemConfigurationAddedPlugInSeason6.cs | 3 +- ...EnhanceAndRagefighterSkillsUpdatePlugIn.cs | 3 +- .../Version075/DataInitialization.cs | 3 +- .../Version095d/DataInitialization.cs | 3 +- .../VersionSeasonSix/DataInitialization.cs | 3 +- src/PlugIns/PlugInAttribute.cs | 24 +------ src/PlugIns/PlugInConfiguration.cs | 3 +- src/PlugIns/PlugInPointAttribute.cs | 4 ++ src/PlugIns/Readme.md | 3 +- .../AdminPanel/Services/PlugInController.cs | 5 +- .../ExamplePlugIn.cs | 10 ++- .../ExampleStrategyPlugIn.cs | 4 +- .../TestCustomPlugIn.cs | 8 +-- .../TestCustomPlugIn2.cs | 4 +- .../ViewPlugInContainerTest.cs | 19 ++++-- 557 files changed, 1343 insertions(+), 788 deletions(-) diff --git a/src/ChatServer/ExDbConnector/ConfigurableNetworkEncryptionPlugIn.cs b/src/ChatServer/ExDbConnector/ConfigurableNetworkEncryptionPlugIn.cs index b5f750603..6e4aa4d41 100644 --- a/src/ChatServer/ExDbConnector/ConfigurableNetworkEncryptionPlugIn.cs +++ b/src/ChatServer/ExDbConnector/ConfigurableNetworkEncryptionPlugIn.cs @@ -4,6 +4,7 @@ namespace MUnique.OpenMU.ChatServer.ExDbConnector; +using System.ComponentModel.DataAnnotations; using System.IO.Pipelines; using System.Runtime.InteropServices; using MUnique.OpenMU.Network; @@ -14,7 +15,8 @@ namespace MUnique.OpenMU.ChatServer.ExDbConnector; /// /// A configurable network encryption factory plugin which reads the Xor32 key from the ChatServer.cfg file. Only used by the ExDbConnector project. /// -[PlugIn("Configurable encryption plugin", "A configurable network encryption factory plugin which reads the Xor32 key from the ChatServer.cfg file. Only used by the ExDbConnector project.")] +[PlugIn] +[Display(Name = "Configurable encryption plugin", Description = "A configurable network encryption factory plugin which reads the Xor32 key from the ChatServer.cfg file. Only used by the ExDbConnector project.")] [Guid("890997B2-9334-4E9E-8C82-4492A831BCE3")] public class ConfigurableNetworkEncryptionPlugIn : INetworkEncryptionFactoryPlugIn { diff --git a/src/GameLogic/MuHelper/MuHelperFeaturePlugIn.cs b/src/GameLogic/MuHelper/MuHelperFeaturePlugIn.cs index 4c477b7d3..7641b84b9 100644 --- a/src/GameLogic/MuHelper/MuHelperFeaturePlugIn.cs +++ b/src/GameLogic/MuHelper/MuHelperFeaturePlugIn.cs @@ -10,7 +10,8 @@ namespace MUnique.OpenMU.GameLogic.MuHelper; /// /// Feature plugin which provides the configuration for the reset feature. /// -[PlugIn("MU Helper Feature", "Provides configuration for the MU Helper feature.")] +[PlugIn] +[Display(Name = "MU Helper Feature", Description = "Provides configuration for the MU Helper feature.")] [Guid("E90A72C3-0459-4323-B6D3-171F88D35542")] public class MuHelperFeaturePlugIn : IFeaturePlugIn, ISupportCustomConfiguration, ISupportDefaultCustomConfiguration { diff --git a/src/GameLogic/Pet/UpdatePetCommandManagerOnItemMovePlugIn.cs b/src/GameLogic/Pet/UpdatePetCommandManagerOnItemMovePlugIn.cs index 455300757..1d2660b49 100644 --- a/src/GameLogic/Pet/UpdatePetCommandManagerOnItemMovePlugIn.cs +++ b/src/GameLogic/Pet/UpdatePetCommandManagerOnItemMovePlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameLogic.Pet; /// Updates the pet command manager on the player object after a pet has been equipped or unequipped. /// [Guid("E25CBAE0-CFD2-4BAF-9178-4FBD90F26E4B")] -[PlugIn(nameof(UpdatePetCommandManagerOnItemMovePlugIn), "Updates the pet command manager on the player object after a pet has been equipped or unequipped.")] +[PlugIn] +[Display(Name = nameof(UpdatePetCommandManagerOnItemMovePlugIn), Description = "Updates the pet command manager on the player object after a pet has been equipped or unequipped.")] public class UpdatePetCommandManagerOnItemMovePlugIn : IItemMovedPlugIn { /// diff --git a/src/GameLogic/PlayerActions/Duel/EndDuelWhenLeavingDuelMapPlugIn.cs b/src/GameLogic/PlayerActions/Duel/EndDuelWhenLeavingDuelMapPlugIn.cs index 2bd302e2b..647d4bc69 100644 --- a/src/GameLogic/PlayerActions/Duel/EndDuelWhenLeavingDuelMapPlugIn.cs +++ b/src/GameLogic/PlayerActions/Duel/EndDuelWhenLeavingDuelMapPlugIn.cs @@ -11,7 +11,8 @@ namespace MUnique.OpenMU.GameLogic.PlayerActions.Duel; /// /// Ends the duel when a player leaves the duel map. /// -[PlugIn(nameof(EndDuelWhenLeavingDuelMapPlugIn), "Updates the state of the weather of each hosted map in a random way.")] +[PlugIn] +[Display(Name = nameof(EndDuelWhenLeavingDuelMapPlugIn), Description = "Updates the state of the weather of each hosted map in a random way.")] [Guid("3DF85180-4C51-437A-8072-8F42EEFED983")] public class EndDuelWhenLeavingDuelMapPlugIn : IObjectRemovedFromMapPlugIn { diff --git a/src/GameLogic/PlayerActions/Duel/UpdateDuelScorePlugIn.cs b/src/GameLogic/PlayerActions/Duel/UpdateDuelScorePlugIn.cs index 98cc6199e..af9380087 100644 --- a/src/GameLogic/PlayerActions/Duel/UpdateDuelScorePlugIn.cs +++ b/src/GameLogic/PlayerActions/Duel/UpdateDuelScorePlugIn.cs @@ -11,7 +11,8 @@ namespace MUnique.OpenMU.GameLogic.PlayerActions.Duel; /// /// This plugin increases the score of the duel result, when a kill occurred. /// -[PlugIn(nameof(UpdateDuelScorePlugIn), "This plugin increases the score of the duel, when a kill occurred.")] +[PlugIn] +[Display(Name = nameof(UpdateDuelScorePlugIn), Description = "This plugin increases the score of the duel, when a kill occurred.")] [Guid("C5CAC184-F8A9-41A0-A34E-04A07DB81F5E")] public class UpdateDuelScorePlugIn : IAttackableGotKilledPlugIn { diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/AlcoholConsumeHandlerPlugIn.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/AlcoholConsumeHandlerPlugIn.cs index d30d97575..084df7d24 100644 --- a/src/GameLogic/PlayerActions/ItemConsumeActions/AlcoholConsumeHandlerPlugIn.cs +++ b/src/GameLogic/PlayerActions/ItemConsumeActions/AlcoholConsumeHandlerPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameLogic.PlayerActions.ItemConsumeActions; /// The alcohol consume handler. /// [Guid("7FC2FE02-9215-4AD3-958F-D2279CD84266")] -[PlugIn(nameof(AlcoholConsumeHandlerPlugIn), "Plugin which handles the alcohol consumption.")] +[PlugIn] +[Display(Name = nameof(AlcoholConsumeHandlerPlugIn), Description = "Plugin which handles the alcohol consumption.")] public class AlcoholConsumeHandlerPlugIn : ApplyMagicEffectConsumeHandlerPlugIn { /// diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/AntidoteConsumeHandlerPlugIn.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/AntidoteConsumeHandlerPlugIn.cs index 5b224aa29..96a6f743a 100644 --- a/src/GameLogic/PlayerActions/ItemConsumeActions/AntidoteConsumeHandlerPlugIn.cs +++ b/src/GameLogic/PlayerActions/ItemConsumeActions/AntidoteConsumeHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameLogic.PlayerActions.ItemConsumeActions; /// Consume handler for the antidote potion. It removes the poison effect from the player. /// [Guid("F838B348-DAA5-475B-BCED-41A076D08948")] -[PlugIn(nameof(AntidoteConsumeHandlerPlugIn), "Plugin which handles the antidote consumption.")] +[PlugIn] +[Display(Name = nameof(AntidoteConsumeHandlerPlugIn), Description = "Plugin which handles the antidote consumption.")] public class AntidoteConsumeHandlerPlugIn : BaseConsumeHandlerPlugIn { private const short PoisonEffectNumber = 0x37; diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/AppleConsumeHandlerPlugIn.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/AppleConsumeHandlerPlugIn.cs index 4a14248e5..57fa1415a 100644 --- a/src/GameLogic/PlayerActions/ItemConsumeActions/AppleConsumeHandlerPlugIn.cs +++ b/src/GameLogic/PlayerActions/ItemConsumeActions/AppleConsumeHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameLogic.PlayerActions.ItemConsumeActions; /// Consume handler for apples. /// [Guid("58518298-42BC-48D1-AB07-17A9D83A2103")] -[PlugIn(nameof(AppleConsumeHandlerPlugIn), "Plugin which handles the apple consumption.")] +[PlugIn] +[Display(Name = nameof(AppleConsumeHandlerPlugIn), Description = "Plugin which handles the apple consumption.")] public class AppleConsumeHandlerPlugIn : HealthPotionConsumeHandlerPlugIn { /// diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/BlessJewelConsumeHandlerPlugIn.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/BlessJewelConsumeHandlerPlugIn.cs index e192fa7fa..5c5d63ca6 100644 --- a/src/GameLogic/PlayerActions/ItemConsumeActions/BlessJewelConsumeHandlerPlugIn.cs +++ b/src/GameLogic/PlayerActions/ItemConsumeActions/BlessJewelConsumeHandlerPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameLogic.PlayerActions.ItemConsumeActions; /// Consume handler for upgrading items up to level 6 using the Jewel of Bless. /// [Guid("E95A0292-B3B4-4E8C-AC5A-7F3DB4F01A37")] -[PlugIn(nameof(BlessJewelConsumeHandlerPlugIn), "Plugin which handles the jewel of bless consumption.")] +[PlugIn] +[Display(Name = nameof(BlessJewelConsumeHandlerPlugIn), Description = "Plugin which handles the jewel of bless consumption.")] public class BlessJewelConsumeHandlerPlugIn : UpgradeItemLevelJewelConsumeHandlerPlugIn { /// diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/FruitConsumeHandlerPlugIn.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/FruitConsumeHandlerPlugIn.cs index 2216f42bf..bd38bebba 100644 --- a/src/GameLogic/PlayerActions/ItemConsumeActions/FruitConsumeHandlerPlugIn.cs +++ b/src/GameLogic/PlayerActions/ItemConsumeActions/FruitConsumeHandlerPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameLogic.PlayerActions.ItemConsumeActions; /// Implementation of a consume handler for fruits. /// [Guid("151E4292-96FE-4FF5-A51B-060B510D3DF8")] -[PlugIn(nameof(FruitConsumeHandlerPlugIn), "Plugin which handles the fruit consumption.")] +[PlugIn] +[Display(Name = nameof(FruitConsumeHandlerPlugIn), Description = "Plugin which handles the fruit consumption.")] public class FruitConsumeHandlerPlugIn : BaseConsumeHandlerPlugIn { /// diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/HarmonyJewelConsumeHandlerPlugIn.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/HarmonyJewelConsumeHandlerPlugIn.cs index 85bb38c5d..b8d3f074c 100644 --- a/src/GameLogic/PlayerActions/ItemConsumeActions/HarmonyJewelConsumeHandlerPlugIn.cs +++ b/src/GameLogic/PlayerActions/ItemConsumeActions/HarmonyJewelConsumeHandlerPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameLogic.PlayerActions.ItemConsumeActions; /// The consume handler for the harmony jewel. /// [Guid("DAC3E5C2-FF0F-4773-AFBF-EBDC0C35336D")] -[PlugIn(nameof(HarmonyJewelConsumeHandlerPlugIn), "Plugin which handles the jewel of harmony consumption.")] +[PlugIn] +[Display(Name = nameof(HarmonyJewelConsumeHandlerPlugIn), Description = "Plugin which handles the jewel of harmony consumption.")] public class HarmonyJewelConsumeHandlerPlugIn : ItemUpgradeConsumeHandlerPlugIn { /// diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/HigherRefineStoneConsumeHandlerPlugIn.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/HigherRefineStoneConsumeHandlerPlugIn.cs index 75be67440..066fd3e1c 100644 --- a/src/GameLogic/PlayerActions/ItemConsumeActions/HigherRefineStoneConsumeHandlerPlugIn.cs +++ b/src/GameLogic/PlayerActions/ItemConsumeActions/HigherRefineStoneConsumeHandlerPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameLogic.PlayerActions.ItemConsumeActions; /// Consume handler for the Higher Refine Stone which increases the item option of . /// [Guid("A9F58DF6-06DB-4187-B386-9F00382333EE")] -[PlugIn(nameof(HigherRefineStoneConsumeHandlerPlugIn), "Plugin which handles the higher refine stone consumption.")] +[PlugIn] +[Display(Name = nameof(HigherRefineStoneConsumeHandlerPlugIn), Description = "Plugin which handles the higher refine stone consumption.")] public class HigherRefineStoneConsumeHandlerPlugIn : RefineStoneUpgradeConsumeHandlerPlugIn { /// diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/LargeComplexPotionConsumeHandlerPlugIn.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/LargeComplexPotionConsumeHandlerPlugIn.cs index c30469f47..9e6a74b17 100644 --- a/src/GameLogic/PlayerActions/ItemConsumeActions/LargeComplexPotionConsumeHandlerPlugIn.cs +++ b/src/GameLogic/PlayerActions/ItemConsumeActions/LargeComplexPotionConsumeHandlerPlugIn.cs @@ -11,7 +11,8 @@ namespace MUnique.OpenMU.GameLogic.PlayerActions.ItemConsumeActions; /// Consume handler for large complex potions. /// [Guid("F5A8C0C4-7960-4815-83C2-F57339CD6FE2")] -[PlugIn(nameof(LargeComplexPotionConsumeHandlerPlugIn), "Plugin which handles the large complex potion consumption.")] +[PlugIn] +[Display(Name = nameof(LargeComplexPotionConsumeHandlerPlugIn), Description = "Plugin which handles the large complex potion consumption.")] public class LargeComplexPotionConsumeHandlerPlugIn : ComplexPotionConsumeHandlerPlugIn { /// diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/LargeHealthPotionConsumeHandlerPlugIn.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/LargeHealthPotionConsumeHandlerPlugIn.cs index 0b64ee29d..d9ebb7fc8 100644 --- a/src/GameLogic/PlayerActions/ItemConsumeActions/LargeHealthPotionConsumeHandlerPlugIn.cs +++ b/src/GameLogic/PlayerActions/ItemConsumeActions/LargeHealthPotionConsumeHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameLogic.PlayerActions.ItemConsumeActions; /// Consume handler for big health potions. /// [Guid("5035BBF5-A45D-454F-9D15-4DB6F725DCFB")] -[PlugIn(nameof(LargeHealthPotionConsumeHandlerPlugIn), "Plugin which handles the large health potion consumption.")] +[PlugIn] +[Display(Name = nameof(LargeHealthPotionConsumeHandlerPlugIn), Description = "Plugin which handles the large health potion consumption.")] public class LargeHealthPotionConsumeHandlerPlugIn : HealthPotionConsumeHandlerPlugIn { /// diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/LargeManaPotionConsumeHandler.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/LargeManaPotionConsumeHandler.cs index 8e02414df..8e51214ba 100644 --- a/src/GameLogic/PlayerActions/ItemConsumeActions/LargeManaPotionConsumeHandler.cs +++ b/src/GameLogic/PlayerActions/ItemConsumeActions/LargeManaPotionConsumeHandler.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameLogic.PlayerActions.ItemConsumeActions; /// Consume handler for gib mana potions. /// [Guid("21CB28A4-BE9A-421C-9C7C-6F2E0FC9D614")] -[PlugIn(nameof(LargeManaPotionConsumeHandler), "Plugin which handles the large mana potion consumption.")] +[PlugIn] +[Display(Name = nameof(LargeManaPotionConsumeHandler), Description = "Plugin which handles the large mana potion consumption.")] public class LargeManaPotionConsumeHandler : ManaPotionConsumeHandler { /// diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/LargeShieldPotionConsumeHandlerPlugIn.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/LargeShieldPotionConsumeHandlerPlugIn.cs index 54b7f30c2..83a43d360 100644 --- a/src/GameLogic/PlayerActions/ItemConsumeActions/LargeShieldPotionConsumeHandlerPlugIn.cs +++ b/src/GameLogic/PlayerActions/ItemConsumeActions/LargeShieldPotionConsumeHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameLogic.PlayerActions.ItemConsumeActions; /// Consume handler for large shield potions. /// [Guid("683C4BF1-8794-41B0-9742-B17B73A12BFE")] -[PlugIn(nameof(LargeShieldPotionConsumeHandlerPlugIn), "Plugin which handles the large shield potion consumption.")] +[PlugIn] +[Display(Name = nameof(LargeShieldPotionConsumeHandlerPlugIn), Description = "Plugin which handles the large shield potion consumption.")] public class LargeShieldPotionConsumeHandlerPlugIn : ShieldPotionConsumeHandlerPlugIn { /// diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/LearnablesConsumeHandlerPlugIn.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/LearnablesConsumeHandlerPlugIn.cs index 19240af63..585a56a63 100644 --- a/src/GameLogic/PlayerActions/ItemConsumeActions/LearnablesConsumeHandlerPlugIn.cs +++ b/src/GameLogic/PlayerActions/ItemConsumeActions/LearnablesConsumeHandlerPlugIn.cs @@ -11,7 +11,8 @@ namespace MUnique.OpenMU.GameLogic.PlayerActions.ItemConsumeActions; /// Consume handler for items (e.g. scrolls, orbs) which add a skill when being consumed. /// [Guid("FD86947E-0B94-4490-8158-63B11A61565F")] -[PlugIn(nameof(LearnablesConsumeHandlerPlugIn), "Plugin which handles the consumption of items which add skills (e.g. scrolls, orbs).")] +[PlugIn] +[Display(Name = nameof(LearnablesConsumeHandlerPlugIn), Description = "Plugin which handles the consumption of items which add skills (e.g. scrolls, orbs).")] public class LearnablesConsumeHandlerPlugIn : BaseConsumeHandlerPlugIn { /// diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/LifeJewelConsumeHandlerPlugIn.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/LifeJewelConsumeHandlerPlugIn.cs index 12d3e7378..2f3852a03 100644 --- a/src/GameLogic/PlayerActions/ItemConsumeActions/LifeJewelConsumeHandlerPlugIn.cs +++ b/src/GameLogic/PlayerActions/ItemConsumeActions/LifeJewelConsumeHandlerPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameLogic.PlayerActions.ItemConsumeActions; /// Consume handler for the Jewel of Life which adds and increases the item option of . /// [Guid("8AC6592D-D51C-47C9-B491-4778C615691D")] -[PlugIn(nameof(LifeJewelConsumeHandlerPlugIn), "Plugin which handles the jewel of life consumption.")] +[PlugIn] +[Display(Name = nameof(LifeJewelConsumeHandlerPlugIn), Description = "Plugin which handles the jewel of life consumption.")] public class LifeJewelConsumeHandlerPlugIn : ItemUpgradeConsumeHandlerPlugIn { /// diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/LowerRefineStoneConsumeHandlerPlugIn.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/LowerRefineStoneConsumeHandlerPlugIn.cs index 5089b9f08..70459bdbc 100644 --- a/src/GameLogic/PlayerActions/ItemConsumeActions/LowerRefineStoneConsumeHandlerPlugIn.cs +++ b/src/GameLogic/PlayerActions/ItemConsumeActions/LowerRefineStoneConsumeHandlerPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameLogic.PlayerActions.ItemConsumeActions; /// Consume handler for the Lower Refine Stone which increases the item option of . /// [Guid("71380E37-7AA9-447A-8A83-D08B676E55E1")] -[PlugIn(nameof(LowerRefineStoneConsumeHandlerPlugIn), "Plugin which handles the lower refine stone consumption.")] +[PlugIn] +[Display(Name = nameof(LowerRefineStoneConsumeHandlerPlugIn), Description = "Plugin which handles the lower refine stone consumption.")] public class LowerRefineStoneConsumeHandlerPlugIn : RefineStoneUpgradeConsumeHandlerPlugIn { /// diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/MediumComplexPotionConsumeHandlerPlugIn.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/MediumComplexPotionConsumeHandlerPlugIn.cs index 7b0635e03..0743f8f9a 100644 --- a/src/GameLogic/PlayerActions/ItemConsumeActions/MediumComplexPotionConsumeHandlerPlugIn.cs +++ b/src/GameLogic/PlayerActions/ItemConsumeActions/MediumComplexPotionConsumeHandlerPlugIn.cs @@ -11,7 +11,8 @@ namespace MUnique.OpenMU.GameLogic.PlayerActions.ItemConsumeActions; /// Consume handler for medium complex potions. /// [Guid("D4ED0E2E-3CAA-4B35-BA17-230E29EC324B")] -[PlugIn(nameof(MediumComplexPotionConsumeHandlerPlugIn), "Plugin which handles the medium complex potion consumption.")] +[PlugIn] +[Display(Name = nameof(MediumComplexPotionConsumeHandlerPlugIn), Description = "Plugin which handles the medium complex potion consumption.")] public class MediumComplexPotionConsumeHandlerPlugIn : ComplexPotionConsumeHandlerPlugIn { /// diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/MediumHealthPotionConsumeHandlerPlugIn.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/MediumHealthPotionConsumeHandlerPlugIn.cs index 183dfc0e7..3bbd1e094 100644 --- a/src/GameLogic/PlayerActions/ItemConsumeActions/MediumHealthPotionConsumeHandlerPlugIn.cs +++ b/src/GameLogic/PlayerActions/ItemConsumeActions/MediumHealthPotionConsumeHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameLogic.PlayerActions.ItemConsumeActions; /// Consume handler for middle health potions. /// [Guid("2ED0A431-B562-4097-AAE4-C972074BDCBA")] -[PlugIn(nameof(MediumHealthPotionConsumeHandlerPlugIn), "Plugin which handles the medium health potion consumption.")] +[PlugIn] +[Display(Name = nameof(MediumHealthPotionConsumeHandlerPlugIn), Description = "Plugin which handles the medium health potion consumption.")] public class MediumHealthPotionConsumeHandlerPlugIn : HealthPotionConsumeHandlerPlugIn { /// diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/MediumManaPotionConsumeHandler.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/MediumManaPotionConsumeHandler.cs index 163fef35d..f2b011302 100644 --- a/src/GameLogic/PlayerActions/ItemConsumeActions/MediumManaPotionConsumeHandler.cs +++ b/src/GameLogic/PlayerActions/ItemConsumeActions/MediumManaPotionConsumeHandler.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameLogic.PlayerActions.ItemConsumeActions; /// Consume handler for middle health potions. /// [Guid("EC1F3DDF-5AF1-455C-AE0C-11A8018AE7D4")] -[PlugIn(nameof(MediumManaPotionConsumeHandler), "Plugin which handles the medium mana potion consumption.")] +[PlugIn] +[Display(Name = nameof(MediumManaPotionConsumeHandler), Description = "Plugin which handles the medium mana potion consumption.")] public class MediumManaPotionConsumeHandler : ManaPotionConsumeHandler { /// diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/MediumShieldPotionConsumeHandlerPlugIn.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/MediumShieldPotionConsumeHandlerPlugIn.cs index 06e0a0c9e..674480989 100644 --- a/src/GameLogic/PlayerActions/ItemConsumeActions/MediumShieldPotionConsumeHandlerPlugIn.cs +++ b/src/GameLogic/PlayerActions/ItemConsumeActions/MediumShieldPotionConsumeHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameLogic.PlayerActions.ItemConsumeActions; /// Consume handler for middle shield potions. /// [Guid("5205B818-68DE-4639-BA50-85CD285CDC95")] -[PlugIn(nameof(MediumShieldPotionConsumeHandlerPlugIn), "Plugin which handles the medium shield potion consumption.")] +[PlugIn] +[Display(Name = nameof(MediumShieldPotionConsumeHandlerPlugIn), Description = "Plugin which handles the medium shield potion consumption.")] public class MediumShieldPotionConsumeHandlerPlugIn : ShieldPotionConsumeHandlerPlugIn { /// diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/SiegePotionConsumeHandlerPlugIn.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/SiegePotionConsumeHandlerPlugIn.cs index 721f89a11..cda59844d 100644 --- a/src/GameLogic/PlayerActions/ItemConsumeActions/SiegePotionConsumeHandlerPlugIn.cs +++ b/src/GameLogic/PlayerActions/ItemConsumeActions/SiegePotionConsumeHandlerPlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameLogic.PlayerActions.ItemConsumeActions; /// The alcohol consume handler. /// [Guid("9D50CE95-5354-43A7-8DD5-9D6953700DFA")] -[PlugIn(nameof(SiegePotionConsumeHandlerPlugIn), "Plugin which handles the siege potion consumption.")] +[PlugIn] +[Display(Name = nameof(SiegePotionConsumeHandlerPlugIn), Description = "Plugin which handles the siege potion consumption.")] public class SiegePotionConsumeHandlerPlugIn : ApplyMagicEffectConsumeHandlerPlugIn { /// @@ -41,7 +42,7 @@ public override async ValueTask ConsumeItemAsync(Player player, Item item, } else { - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.ItemEffectNotFound)).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.ItemEffectNotFound)).ConfigureAwait(false); } return false; diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/SmallComplexPotionConsumeHandlerPlugIn.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/SmallComplexPotionConsumeHandlerPlugIn.cs index 49c8cd8ff..429b98331 100644 --- a/src/GameLogic/PlayerActions/ItemConsumeActions/SmallComplexPotionConsumeHandlerPlugIn.cs +++ b/src/GameLogic/PlayerActions/ItemConsumeActions/SmallComplexPotionConsumeHandlerPlugIn.cs @@ -11,7 +11,8 @@ namespace MUnique.OpenMU.GameLogic.PlayerActions.ItemConsumeActions; /// Consume handler for small complex potions. /// [Guid("9424D511-0AF7-4FC2-BD11-24799368D651")] -[PlugIn(nameof(SmallComplexPotionConsumeHandlerPlugIn), "Plugin which handles the small complex potion consumption.")] +[PlugIn] +[Display(Name = nameof(SmallComplexPotionConsumeHandlerPlugIn), Description = "Plugin which handles the small complex potion consumption.")] public class SmallComplexPotionConsumeHandlerPlugIn : ComplexPotionConsumeHandlerPlugIn { /// diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/SmallHealthPotionConsumeHandlerPlugIn.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/SmallHealthPotionConsumeHandlerPlugIn.cs index ce93ddef2..18752fe0c 100644 --- a/src/GameLogic/PlayerActions/ItemConsumeActions/SmallHealthPotionConsumeHandlerPlugIn.cs +++ b/src/GameLogic/PlayerActions/ItemConsumeActions/SmallHealthPotionConsumeHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameLogic.PlayerActions.ItemConsumeActions; /// Consume handler for small health potions. /// [Guid("BF28D5A4-D97E-44AA-88CB-D448B1BF7A75")] -[PlugIn(nameof(SmallHealthPotionConsumeHandlerPlugIn), "Plugin which handles the small health potion consumption.")] +[PlugIn] +[Display(Name = nameof(SmallHealthPotionConsumeHandlerPlugIn), Description = "Plugin which handles the small health potion consumption.")] public class SmallHealthPotionConsumeHandlerPlugIn : HealthPotionConsumeHandlerPlugIn { /// diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/SmallManaPotionConsumeHandler.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/SmallManaPotionConsumeHandler.cs index 7efa620de..34592b6f9 100644 --- a/src/GameLogic/PlayerActions/ItemConsumeActions/SmallManaPotionConsumeHandler.cs +++ b/src/GameLogic/PlayerActions/ItemConsumeActions/SmallManaPotionConsumeHandler.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameLogic.PlayerActions.ItemConsumeActions; /// Consume handler for small health potions. /// [Guid("A55849BC-7BD7-4444-A35A-F1AC1D48F179")] -[PlugIn(nameof(SmallManaPotionConsumeHandler), "Plugin which handles the small mana potion consumption.")] +[PlugIn] +[Display(Name = nameof(SmallManaPotionConsumeHandler), Description = "Plugin which handles the small mana potion consumption.")] public class SmallManaPotionConsumeHandler : ManaPotionConsumeHandler { /// diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/SmallShieldPotionConsumeHandlerPlugIn.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/SmallShieldPotionConsumeHandlerPlugIn.cs index f0aba0422..9c08c4b07 100644 --- a/src/GameLogic/PlayerActions/ItemConsumeActions/SmallShieldPotionConsumeHandlerPlugIn.cs +++ b/src/GameLogic/PlayerActions/ItemConsumeActions/SmallShieldPotionConsumeHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameLogic.PlayerActions.ItemConsumeActions; /// Consume handler for small shield potions. /// [Guid("C403C8D7-9143-42BC-9894-CA285303E17A")] -[PlugIn(nameof(SmallShieldPotionConsumeHandlerPlugIn), "Plugin which handles the small shield potion consumption.")] +[PlugIn] +[Display(Name = nameof(SmallShieldPotionConsumeHandlerPlugIn), Description = "Plugin which handles the small shield potion consumption.")] public class SmallShieldPotionConsumeHandlerPlugIn : ShieldPotionConsumeHandlerPlugIn { /// diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/SoulJewelConsumeHandlerPlugIn.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/SoulJewelConsumeHandlerPlugIn.cs index 7555d6dda..4ae8fcbbe 100644 --- a/src/GameLogic/PlayerActions/ItemConsumeActions/SoulJewelConsumeHandlerPlugIn.cs +++ b/src/GameLogic/PlayerActions/ItemConsumeActions/SoulJewelConsumeHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameLogic.PlayerActions.ItemConsumeActions; /// Consume handler for the Jewel of Soul which increases the item level by one until the level of 9 with a chance of 50%. /// [Guid("A76CDA49-1C56-401A-96D1-294D9A68A7B9")] -[PlugIn(nameof(SoulJewelConsumeHandlerPlugIn), "Plugin which handles the jewel of soul consumption.")] +[PlugIn] +[Display(Name = nameof(SoulJewelConsumeHandlerPlugIn), Description = "Plugin which handles the jewel of soul consumption.")] public class SoulJewelConsumeHandlerPlugIn : UpgradeItemLevelJewelConsumeHandlerPlugIn { /// diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/SummoningOrbConsumeHandlerPlugIn.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/SummoningOrbConsumeHandlerPlugIn.cs index de6160dd4..9485ee5d9 100644 --- a/src/GameLogic/PlayerActions/ItemConsumeActions/SummoningOrbConsumeHandlerPlugIn.cs +++ b/src/GameLogic/PlayerActions/ItemConsumeActions/SummoningOrbConsumeHandlerPlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameLogic.PlayerActions.ItemConsumeActions; /// of the . /// [Guid("71C8E542-4868-487E-BC92-0B7CC7CAEC8B")] -[PlugIn(nameof(SummoningOrbConsumeHandlerPlugIn), "Plugin which handles the summoning orb consumption.")] +[PlugIn] +[Display(Name = nameof(SummoningOrbConsumeHandlerPlugIn), Description = "Plugin which handles the summoning orb consumption.")] public class SummoningOrbConsumeHandlerPlugIn : LearnablesConsumeHandlerPlugIn { /// diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/TownPortalScrollConsumeHandlerPlugIn.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/TownPortalScrollConsumeHandlerPlugIn.cs index 9fde4cc86..c56dbc3db 100644 --- a/src/GameLogic/PlayerActions/ItemConsumeActions/TownPortalScrollConsumeHandlerPlugIn.cs +++ b/src/GameLogic/PlayerActions/ItemConsumeActions/TownPortalScrollConsumeHandlerPlugIn.cs @@ -18,7 +18,8 @@ namespace MUnique.OpenMU.GameLogic.PlayerActions.ItemConsumeActions; /// might not be suitable. /// [Guid("825C3110-75F1-4157-A189-15B365B4791E")] -[PlugIn(nameof(TownPortalScrollConsumeHandlerPlugIn), "Plugin which handles the town portal scroll consumption.")] +[PlugIn] +[Display(Name = nameof(TownPortalScrollConsumeHandlerPlugIn), Description = "Plugin which handles the town portal scroll consumption.")] public class TownPortalScrollConsumeHandlerPlugIn : BaseConsumeHandlerPlugIn { /// diff --git a/src/GameLogic/PlayerActions/Items/ItemBoxDroppedPlugIn.cs b/src/GameLogic/PlayerActions/Items/ItemBoxDroppedPlugIn.cs index c985bc067..bed50aae6 100644 --- a/src/GameLogic/PlayerActions/Items/ItemBoxDroppedPlugIn.cs +++ b/src/GameLogic/PlayerActions/Items/ItemBoxDroppedPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameLogic.PlayerActions.Items; /// /// This plugin handles the drop of an item box, e.g. box of kundun. /// -[PlugIn(nameof(ItemBoxDroppedPlugIn), "This plugin handles the drop of an item box, e.g. box of kundun.")] +[PlugIn] +[Display(Name = nameof(ItemBoxDroppedPlugIn), Description = "This plugin handles the drop of an item box, e.g. box of kundun.")] [Guid("3D15D55D-EEFE-4B5F-89B1-6934AB3F0BEE")] public sealed class ItemBoxDroppedPlugIn : IItemDropPlugIn { diff --git a/src/GameLogic/PlayerActions/Items/LostMapDroppedPlugIn.cs b/src/GameLogic/PlayerActions/Items/LostMapDroppedPlugIn.cs index 85b484f35..13826dd45 100644 --- a/src/GameLogic/PlayerActions/Items/LostMapDroppedPlugIn.cs +++ b/src/GameLogic/PlayerActions/Items/LostMapDroppedPlugIn.cs @@ -16,7 +16,8 @@ namespace MUnique.OpenMU.GameLogic.PlayerActions.Items; /// This plugin transforms a stack of symbol of kundun into a lost map. /// todo: implement plugin configuration to resolve magic numbers. /// -[PlugIn(nameof(LostMapDroppedPlugIn), "This plugin handles the drop of the lost map item. It creates the gate to the kalima map.")] +[PlugIn] +[Display(Name = nameof(LostMapDroppedPlugIn), Description = "This plugin handles the drop of the lost map item. It creates the gate to the kalima map.")] [Guid("F6DB10E0-AE7F-4BC6-914F-B858763C5CF7")] public sealed class LostMapDroppedPlugIn : IItemDropPlugIn { @@ -41,20 +42,20 @@ public async ValueTask HandleItemDropAsync(Player player, Item item, Point targe if (item.Level is < 1 or > 7) { - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.InvalidLostMap)).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.InvalidLostMap)).ConfigureAwait(false); return; } if (player.CurrentMiniGame is not null) { - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.NoKalimaGateOnEventMap)).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.NoKalimaGateOnEventMap)).ConfigureAwait(false); return; } var gatePosition = target; if (player.IsAtSafezone() || player.CurrentMap?.Terrain.SafezoneMap[gatePosition.X, gatePosition.Y] is true) { - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.NoKalimaGateInSafezone)).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.NoKalimaGateInSafezone)).ConfigureAwait(false); return; } @@ -62,7 +63,7 @@ public async ValueTask HandleItemDropAsync(Player player, Item item, Point targe var gateNpcDef = player.GameContext.Configuration.Monsters.FirstOrDefault(def => def.Number == gateNpcNumber); if (gateNpcDef is null) { - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.UndefinedGateNpc)).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.UndefinedGateNpc)).ConfigureAwait(false); return; } @@ -81,7 +82,7 @@ public async ValueTask HandleItemDropAsync(Player player, Item item, Point targe var targetGate = player.GameContext.Configuration.Maps.FirstOrDefault(g => g.Number == KalimaMapNumbers[item.Level - 1])?.ExitGates.FirstOrDefault(); if (targetGate is null) { - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.KalimaEntranceNotFound)).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.KalimaEntranceNotFound)).ConfigureAwait(false); return; } diff --git a/src/GameLogic/PlayerActions/Skills/ChainLightningSkillPlugIn.cs b/src/GameLogic/PlayerActions/Skills/ChainLightningSkillPlugIn.cs index 5f9891965..ba7724064 100644 --- a/src/GameLogic/PlayerActions/Skills/ChainLightningSkillPlugIn.cs +++ b/src/GameLogic/PlayerActions/Skills/ChainLightningSkillPlugIn.cs @@ -16,7 +16,8 @@ namespace MUnique.OpenMU.GameLogic.PlayerActions.Skills; /// /// Handles the chain lightning skill of the summoner class. Additionally to the attacked target, it will hit up to two additional targets. /// -[PlugIn(nameof(ChainLightningSkillPlugIn), "Handles the chain lightning skill of the summoner class. Additionally to the attacked target, it will hit up to two additional targets.")] +[PlugIn] +[Display(Name = nameof(ChainLightningSkillPlugIn), Description = "Handles the chain lightning skill of the summoner class. Additionally to the attacked target, it will hit up to two additional targets.")] [Guid("298C5FF8-03A2-476B-B064-A59E73DFCEB9")] public class ChainLightningSkillPlugIn : IAreaSkillPlugIn { diff --git a/src/GameLogic/PlayerActions/Skills/DrainLifeSkillPlugIn.cs b/src/GameLogic/PlayerActions/Skills/DrainLifeSkillPlugIn.cs index a3c823f08..2606c4c39 100644 --- a/src/GameLogic/PlayerActions/Skills/DrainLifeSkillPlugIn.cs +++ b/src/GameLogic/PlayerActions/Skills/DrainLifeSkillPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameLogic.PlayerActions.Skills; /// /// Handles the drain life skill of the summoner class. Additionally to the attacked target, it regains life for damage dealt. /// -[PlugIn(nameof(ChainLightningSkillPlugIn), "Handles the drain life skill of the summoner class. Additionally to the attacked target, it regains life for damage dealt.")] +[PlugIn] +[Display(Name = nameof(ChainLightningSkillPlugIn), Description = "Handles the drain life skill of the summoner class. Additionally to the attacked target, it regains life for damage dealt.")] [Guid("9A5A5671-3A8C-4C01-984F-1A8F8E0E7BDA")] public class DrainLifeSkillPlugIn : IAreaSkillPlugIn { diff --git a/src/GameLogic/PlayerActions/Skills/EarthShakeSkillPlugIn.cs b/src/GameLogic/PlayerActions/Skills/EarthShakeSkillPlugIn.cs index 9a5b3eb5e..4a5d3b679 100644 --- a/src/GameLogic/PlayerActions/Skills/EarthShakeSkillPlugIn.cs +++ b/src/GameLogic/PlayerActions/Skills/EarthShakeSkillPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameLogic.PlayerActions.Skills; /// Handles the earth shake skill of the dark horse. Pushes the targets away from the attacker. /// [Guid("5D00F012-B0A3-41D6-B2FD-66D37A81615C")] -[PlugIn("Earth shake skill", "Handles the earth shake skill of the dark horse. Pushes the targets away from the attacker.")] +[PlugIn] +[Display(Name = "Earth shake skill", Description = "Handles the earth shake skill of the dark horse. Pushes the targets away from the attacker.")] public class EarthShakeSkillPlugIn : IAreaSkillPlugIn { /// diff --git a/src/GameLogic/PlayerActions/Skills/ForceSkillAction.cs b/src/GameLogic/PlayerActions/Skills/ForceSkillAction.cs index 480516e08..e2a237bed 100644 --- a/src/GameLogic/PlayerActions/Skills/ForceSkillAction.cs +++ b/src/GameLogic/PlayerActions/Skills/ForceSkillAction.cs @@ -10,7 +10,8 @@ namespace MUnique.OpenMU.GameLogic.PlayerActions.Skills; /// /// The Force skill action. /// -[PlugIn(nameof(ForceSkillAction), "Handles the force skill of the dark lord.")] +[PlugIn] +[Display(Name = nameof(ForceSkillAction), Description = "Handles the force skill of the dark lord.")] [Guid("552e4e3d-8215-44f4-bee3-b006da049eb2")] public class ForceSkillAction : TargetedSkillDefaultPlugin { diff --git a/src/GameLogic/PlayerActions/Skills/ForceWaveStrengSkillAction.cs b/src/GameLogic/PlayerActions/Skills/ForceWaveStrengSkillAction.cs index 1d51bbde0..ee60a8f8a 100644 --- a/src/GameLogic/PlayerActions/Skills/ForceWaveStrengSkillAction.cs +++ b/src/GameLogic/PlayerActions/Skills/ForceWaveStrengSkillAction.cs @@ -10,7 +10,8 @@ namespace MUnique.OpenMU.GameLogic.PlayerActions.Skills; /// /// The Force Wave Strengthener skill action. /// -[PlugIn(nameof(ForceWaveStrengSkillAction), "Handles the force wave strengthener skill of the dark lord.")] +[PlugIn] +[Display(Name = nameof(ForceWaveStrengSkillAction), Description = "Handles the force wave strengthener skill of the dark lord.")] [Guid("9072ce9c-1482-4838-ba0a-4c312062e090")] public class ForceWaveStrengSkillAction : ForceSkillAction { diff --git a/src/GameLogic/PlayerActions/Skills/NovaSkillStartPlugin.cs b/src/GameLogic/PlayerActions/Skills/NovaSkillStartPlugin.cs index 5a4d5f833..73e49af2a 100644 --- a/src/GameLogic/PlayerActions/Skills/NovaSkillStartPlugin.cs +++ b/src/GameLogic/PlayerActions/Skills/NovaSkillStartPlugin.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameLogic.PlayerActions.Skills; /// /// The start nova skill action. /// -[PlugIn(nameof(NovaSkillStartPlugin), "Handles the start of nova skill of the wizard class.")] +[PlugIn] +[Display(Name = nameof(NovaSkillStartPlugin), Description = "Handles the start of nova skill of the wizard class.")] [Guid("e966e7eb-58b8-4356-8725-5da9f43c1fa4")] public class NovaSkillStartPlugin : TargetedSkillPluginBase { diff --git a/src/GameLogic/PlayerActions/Skills/NovaSkillStopPlugin.cs b/src/GameLogic/PlayerActions/Skills/NovaSkillStopPlugin.cs index 0d7fa0602..d5517dbf8 100644 --- a/src/GameLogic/PlayerActions/Skills/NovaSkillStopPlugin.cs +++ b/src/GameLogic/PlayerActions/Skills/NovaSkillStopPlugin.cs @@ -10,7 +10,8 @@ namespace MUnique.OpenMU.GameLogic.PlayerActions.Skills; /// /// The stop nova skill action. /// -[PlugIn(nameof(NovaSkillStopPlugin), "Handles the stopping of nova skill of the wizard class.")] +[PlugIn] +[Display(Name = nameof(NovaSkillStopPlugin), Description = "Handles the stopping of nova skill of the wizard class.")] [Guid("3cb98892-b3ce-42de-8956-5ed5625c6285")] public class NovaSkillStopPlugin : TargetedSkillPluginBase { diff --git a/src/GameLogic/PlayerActions/Skills/PlasmaStormSkillPlugIn.cs b/src/GameLogic/PlayerActions/Skills/PlasmaStormSkillPlugIn.cs index 7b2e07330..1c954bb66 100644 --- a/src/GameLogic/PlayerActions/Skills/PlasmaStormSkillPlugIn.cs +++ b/src/GameLogic/PlayerActions/Skills/PlasmaStormSkillPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameLogic.PlayerActions.Skills; /// /// Handles the plasma storm skill of the fenrir pet. It randomly halves the durability of a target's equipped item. /// -[PlugIn("Plasma Storm Skill", "Handles the plasma storm skill of the fenrir pet. It randomly halves the durability of a target's equipped item.")] +[PlugIn] +[Display(Name = "Plasma Storm Skill", Description = "Handles the plasma storm skill of the fenrir pet. It randomly halves the durability of a target's equipped item.")] [Guid("5EF7C564-B32B-4630-9380-0233BECFA663")] public class PlasmaStormSkillPlugIn : IAreaSkillPlugIn { diff --git a/src/GameLogic/PlayerActions/Skills/SoulBarrierProficieSkillAction.cs b/src/GameLogic/PlayerActions/Skills/SoulBarrierProficieSkillAction.cs index e44d520d2..8feeb3bf8 100644 --- a/src/GameLogic/PlayerActions/Skills/SoulBarrierProficieSkillAction.cs +++ b/src/GameLogic/PlayerActions/Skills/SoulBarrierProficieSkillAction.cs @@ -10,7 +10,8 @@ namespace MUnique.OpenMU.GameLogic.PlayerActions.Skills; /// /// The Soul Barrier Proficiency skill action. /// -[PlugIn(nameof(SoulBarrierProficieSkillAction), "Handles the soul barrier proficiency skill of the grand master.")] +[PlugIn] +[Display(Name = nameof(SoulBarrierProficieSkillAction), Description = "Handles the soul barrier proficiency skill of the grand master.")] [Guid("9c56073f-1719-423c-8397-30d94793f929")] public class SoulBarrierProficieSkillAction : SoulBarrierStrengSkillAction { diff --git a/src/GameLogic/PlayerActions/Skills/SoulBarrierStrengSkillAction.cs b/src/GameLogic/PlayerActions/Skills/SoulBarrierStrengSkillAction.cs index 55fe85f83..7b5d0f197 100644 --- a/src/GameLogic/PlayerActions/Skills/SoulBarrierStrengSkillAction.cs +++ b/src/GameLogic/PlayerActions/Skills/SoulBarrierStrengSkillAction.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameLogic.PlayerActions.Skills; /// /// The Soul Barrier Strengthener skill action. /// -[PlugIn(nameof(SoulBarrierStrengSkillAction), "Handles the soul barrier strengthener skill of the grand master.")] +[PlugIn] +[Display(Name = nameof(SoulBarrierStrengSkillAction), Description = "Handles the soul barrier strengthener skill of the grand master.")] [Guid("05fdea2a-ac92-4b2c-8305-001e97ec26a8")] public class SoulBarrierStrengSkillAction : TargetedSkillDefaultPlugin { diff --git a/src/GameLogic/PlayerActions/Skills/SummonPartySkillPlugin.cs b/src/GameLogic/PlayerActions/Skills/SummonPartySkillPlugin.cs index 35ca7eb25..cc7f81dd7 100644 --- a/src/GameLogic/PlayerActions/Skills/SummonPartySkillPlugin.cs +++ b/src/GameLogic/PlayerActions/Skills/SummonPartySkillPlugin.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameLogic.PlayerActions.Skills; /// /// The summon skill action for Dark Lord. /// -[PlugIn(nameof(SummonPartySkillPlugin), "Handles the summon party skill of the dark lord class.")] +[PlugIn] +[Display(Name = nameof(SummonPartySkillPlugin), Description = "Handles the summon party skill of the dark lord class.")] [Guid("44e34497-c9e1-4c15-9388-589dfa3fa820")] public class SummonPartySkillPlugin : TargetedSkillPluginBase { diff --git a/src/GameLogic/PlayerActions/Skills/TargetedSkillDefaultPlugin.cs b/src/GameLogic/PlayerActions/Skills/TargetedSkillDefaultPlugin.cs index 4bd07b93a..723634e01 100644 --- a/src/GameLogic/PlayerActions/Skills/TargetedSkillDefaultPlugin.cs +++ b/src/GameLogic/PlayerActions/Skills/TargetedSkillDefaultPlugin.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameLogic.PlayerActions.Skills; /// /// Action to perform a skill which is explicitly aimed to a target. /// -[PlugIn(nameof(TargetedSkillDefaultPlugin), "Default (catch-all) handler for targeted skills")] +[PlugIn] +[Display(Name = nameof(TargetedSkillDefaultPlugin), Description = "Default (catch-all) handler for targeted skills")] [Guid("eb2949fb-5ed2-407e-a4e8-e3015ed5692b")] public class TargetedSkillDefaultPlugin : TargetedSkillPluginBase { diff --git a/src/GameLogic/PlugIns/ChatCommands/AddAgilityStatChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/AddAgilityStatChatCommandPlugIn.cs index 995c890b7..45aefe26a 100644 --- a/src/GameLogic/PlugIns/ChatCommands/AddAgilityStatChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/AddAgilityStatChatCommandPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin which handles the command to add agility stat points. /// [Guid("43156A52-03EE-42C0-88BF-CA9665DC8E1E")] -[PlugIn("Add agility chat command", "Adds the specified amount of agility points to the character.")] +[PlugIn] +[Display(Name = "Add agility chat command", Description = "Adds the specified amount of agility points to the character.")] [ChatCommandHelp(Command, "Adds the specified amount of agility points to the character.", null, MinimumStatus)] public class AddAgilityStatChatCommandPlugIn : AddStatChatCommandPlugIn, IDisabledByDefault { diff --git a/src/GameLogic/PlugIns/ChatCommands/AddCommandStatChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/AddCommandStatChatCommandPlugIn.cs index c69c74733..ef8ebac14 100644 --- a/src/GameLogic/PlugIns/ChatCommands/AddCommandStatChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/AddCommandStatChatCommandPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin which handles the command to add command stat points. /// [Guid("EFE421FB-BE79-4656-AF39-D22A105D1455")] -[PlugIn("Add command chat command", "Adds the specified amount of command points to the character.")] +[PlugIn] +[Display(Name = "Add command chat command", Description = "Adds the specified amount of command points to the character.")] [ChatCommandHelp(Command, "Adds the specified amount of command points to the character.", null, MinimumStatus)] public class AddCommandStatChatCommandPlugIn : AddStatChatCommandPlugIn, IDisabledByDefault { diff --git a/src/GameLogic/PlugIns/ChatCommands/AddEnergyStatChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/AddEnergyStatChatCommandPlugIn.cs index cc36ba6de..4c6157aa4 100644 --- a/src/GameLogic/PlugIns/ChatCommands/AddEnergyStatChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/AddEnergyStatChatCommandPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin which handles the command to add energy stat points. /// [Guid("A597B6E7-9395-4CF4-8439-A1D60134B63E")] -[PlugIn("Add energy chat command", "Adds the specified amount of energy points to the character.")] +[PlugIn] +[Display(Name = "Add energy chat command", Description = "Adds the specified amount of energy points to the character.")] [ChatCommandHelp(Command, "Adds the specified amount of energy points to the character.", null, MinimumStatus)] public class AddEnergyStatChatCommandPlugIn : AddStatChatCommandPlugIn, IDisabledByDefault { diff --git a/src/GameLogic/PlugIns/ChatCommands/AddStatChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/AddStatChatCommandPlugIn.cs index 6f34cbbf7..65aa5cbde 100644 --- a/src/GameLogic/PlugIns/ChatCommands/AddStatChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/AddStatChatCommandPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin which handles the command to add stat points. /// [Guid("042EC5C6-27C8-4E00-A48B-C5458EDEA0BC")] -[PlugIn("Add Stat chat command", "Handles the chat command '/add (ene|agi|vit|str|cmd) (amount)'. Adds the specified amount of stat points to the specified attribute of the character.")] +[PlugIn] +[Display(Name = "Add Stat chat command", Description = "Handles the chat command '/add (ene|agi|vit|str|cmd) (amount)'. Adds the specified amount of stat points to the specified attribute of the character.")] [ChatCommandHelp(Command, "Adds the specified amount of stat points to the specified attribute of the character.", typeof(Arguments), MinimumStatus)] public class AddStatChatCommandPlugIn : IChatCommandPlugIn { @@ -33,27 +34,27 @@ public class AddStatChatCommandPlugIn : IChatCommandPlugIn /// public virtual async ValueTask HandleCommandAsync(Player player, string command) { - if (player.SelectedCharacter is null) + if (player.SelectedCharacter is null) { - return; + return; } - - var arguments = command.ParseArguments(); - var attribute = this.GetAttribute(player, arguments.StatType); - var selectedCharacter = player.SelectedCharacter; - - if (!selectedCharacter.CanIncreaseStats(arguments.Amount)) - { - return; - } - - if (player.CurrentMiniGame is not null) + + var arguments = command.ParseArguments(); + var attribute = this.GetAttribute(player, arguments.StatType); + var selectedCharacter = player.SelectedCharacter; + + if (!selectedCharacter.CanIncreaseStats(arguments.Amount)) + { + return; + } + + if (player.CurrentMiniGame is not null) { - await player.ShowLocalizedBlueMessageAsync(PlayerMessage.AddingMultiplePointsWhileMiniGameNotAllowed).ConfigureAwait(false); - return; + await player.ShowLocalizedBlueMessageAsync(PlayerMessage.AddingMultiplePointsWhileMiniGameNotAllowed).ConfigureAwait(false); + return; } - - await this._action.IncreaseStatsAsync(player, attribute, arguments.Amount).ConfigureAwait(false); + + await this._action.IncreaseStatsAsync(player, attribute, arguments.Amount).ConfigureAwait(false); } private AttributeDefinition GetAttribute(Player player, string? statType) diff --git a/src/GameLogic/PlugIns/ChatCommands/AddStrengthStatChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/AddStrengthStatChatCommandPlugIn.cs index ad20a3dd5..bec997368 100644 --- a/src/GameLogic/PlugIns/ChatCommands/AddStrengthStatChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/AddStrengthStatChatCommandPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin which handles the command to add strength stat points. /// [Guid("21B15D95-BA2F-40A3-AB7D-8BD886FAEAE5")] -[PlugIn("Add strength chat command", "Adds the specified amount of strength points to the character.")] +[PlugIn] +[Display(Name = "Add strength chat command", Description = "Adds the specified amount of strength points to the character.")] [ChatCommandHelp(Command, "Adds the specified amount of strength points to the character.", null, MinimumStatus)] public class AddStrengthStatChatCommandPlugIn : AddStatChatCommandPlugIn, IDisabledByDefault { diff --git a/src/GameLogic/PlugIns/ChatCommands/AddVitalityStatChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/AddVitalityStatChatCommandPlugIn.cs index aafe2da63..43ecbc12c 100644 --- a/src/GameLogic/PlugIns/ChatCommands/AddVitalityStatChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/AddVitalityStatChatCommandPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin which handles the command to add vitality stat points. /// [Guid("370CE86C-E382-4E0F-93F4-AD75FA079129")] -[PlugIn("Add vitality chat command", "Adds the specified amount of vitality points to the character.")] +[PlugIn] +[Display(Name = "Add vitality chat command", Description = "Adds the specified amount of vitality points to the character.")] [ChatCommandHelp(Command, "Adds the specified amount of vitality points to the character.", null, MinimumStatus)] public class AddVitalityStatChatCommandPlugIn : AddStatChatCommandPlugIn, IDisabledByDefault { diff --git a/src/GameLogic/PlugIns/ChatCommands/BanAccChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/BanAccChatCommandPlugIn.cs index f59c682c8..6a74d86fc 100644 --- a/src/GameLogic/PlugIns/ChatCommands/BanAccChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/BanAccChatCommandPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin which handles banacc commands. /// [Guid("EF869270-847E-48D5-9012-F5D111D9C8EB")] -[PlugIn("Ban Account command", "Handles the chat command '/banacc '. Bans an account from the game.")] +[PlugIn] +[Display(Name = "Ban Account command", Description = "Handles the chat command '/banacc '. Bans an account from the game.")] [ChatCommandHelp(Command, "Bans an account from the game.", typeof(BanAccChatCommandArgs), CharacterStatus.GameMaster)] public class BanAccChatCommandPlugIn : ChatCommandPlugInBase { @@ -29,6 +30,6 @@ protected override async ValueTask DoHandleCommandAsync(Player gameMaster, BanAc { await this.ChangeAccountStateByLoginNameAsync(gameMaster, arguments.AccountName ?? string.Empty, AccountState.Banned).ConfigureAwait(false); - await this.ShowMessageToAsync(gameMaster, $"[{this.Key}] Account {arguments.AccountName} has been banned.").ConfigureAwait(false); + await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.AccountHasBeenBanned), this.Key, arguments.AccountName).ConfigureAwait(false); } } \ No newline at end of file diff --git a/src/GameLogic/PlugIns/ChatCommands/BanCharChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/BanCharChatCommandPlugIn.cs index 2e5a4379c..3e343109d 100644 --- a/src/GameLogic/PlugIns/ChatCommands/BanCharChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/BanCharChatCommandPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin which handles banchar commands. /// [Guid("7AD1E5F4-4B07-4165-B9A4-188614F00F7C")] -[PlugIn("Ban Character command", "Handles the chat command '/banchar '. Bans the account of a character from the game.")] +[PlugIn] +[Display(Name = "Ban Character command", Description = "Handles the chat command '/banchar '. Bans the account of a character from the game.")] [ChatCommandHelp(Command, "Bans the account of a character from the game.", typeof(BanCharChatCommandArgs), CharacterStatus.GameMaster)] public class BanCharChatCommandPlugIn : ChatCommandPlugInBase { @@ -29,6 +30,6 @@ protected override async ValueTask DoHandleCommandAsync(Player gameMaster, BanCh { await this.ChangeAccountStateByCharacterNameAsync(gameMaster, arguments.CharacterName ?? string.Empty, AccountState.Banned).ConfigureAwait(false); - await this.ShowMessageToAsync(gameMaster, $"[{this.Key}] Account from {arguments.CharacterName} has been banned.").ConfigureAwait(false); + await this.ShowMessageToAsync(gameMaster, $"[{this.Key}] Account from {arguments.CharacterName} has been banned.").ConfigureAwait(false); } } \ No newline at end of file diff --git a/src/GameLogic/PlugIns/ChatCommands/CharInfoChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/CharInfoChatCommandPlugIn.cs index 30fcf65d4..259c23473 100644 --- a/src/GameLogic/PlugIns/ChatCommands/CharInfoChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/CharInfoChatCommandPlugIn.cs @@ -8,15 +8,16 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; using System.Runtime.InteropServices; using MUnique.OpenMU.DataModel.Entities; using MUnique.OpenMU.GameLogic.PlugIns.ChatCommands.Arguments; -using MUnique.OpenMU.GameLogic.Views; -using MUnique.OpenMU.Interfaces; +using MUnique.OpenMU.GameLogic.Views; +using MUnique.OpenMU.Interfaces; using MUnique.OpenMU.PlugIns; /// /// A chat command plugin which handles charinfo commands. /// [Guid("0C7162BC-C74E-4A65-82E3-12811E4BE170")] -[PlugIn("Char Info command", "Handles the chat command '/charinfo '. Returns information about the character back to the requester.")] +[PlugIn] +[Display(Name = "Char Info command", Description = "Handles the chat command '/charinfo '. Returns information about the character back to the requester.")] [ChatCommandHelp(Command, "Returns information about the character back to the requester.", typeof(CharInfoChatCommandArgs), CharacterStatus.GameMaster)] public class CharInfoChatCommandPlugIn : ChatCommandPlugInBase { @@ -90,16 +91,16 @@ private async ValueTask ShowAllLinesMessageToAsync(Player gameMaster, string? me await this.ShowMessageToAsync(gameMaster, line).ConfigureAwait(false); } } - - /// - /// Shows a message to a player. - /// - /// The player. - /// The message. - /// The message type. - [Obsolete("Use localized messages")] - private ValueTask ShowMessageToAsync(Player player, string message, MessageType messageType = MessageType.BlueNormal) - { - return player.InvokeViewPlugInAsync(p => p.ShowMessageAsync(message, messageType)); - } + + /// + /// Shows a message to a player. + /// + /// The player. + /// The message. + /// The message type. + [Obsolete("Use localized messages")] + private ValueTask ShowMessageToAsync(Player player, string message, MessageType messageType = MessageType.BlueNormal) + { + return player.InvokeViewPlugInAsync(p => p.ShowMessageAsync(message, messageType)); + } } \ No newline at end of file diff --git a/src/GameLogic/PlugIns/ChatCommands/ChatBanCharChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/ChatBanCharChatCommandPlugIn.cs index 812c4dda2..3a3d14ef0 100644 --- a/src/GameLogic/PlugIns/ChatCommands/ChatBanCharChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/ChatBanCharChatCommandPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin which handles chatban command. /// [Guid("287AE9A6-E434-4E52-A791-8AAD267A8E05")] -[PlugIn("Chat Ban Character command", "Handles the chat command '/chatban '. Bans the account of a character from chatting for the specified minutes.")] +[PlugIn] +[Display(Name = "Chat Ban Character command", Description = "Handles the chat command '/chatban '. Bans the account of a character from chatting for the specified minutes.")] [ChatCommandHelp(Command, "Bans the account of a character from chatting for the specified minutes.", typeof(ChatBanCharChatCommandArgs), CharacterStatus.GameMaster)] public class ChatBanCharChatCommandPlugIn : ChatCommandPlugInBase { @@ -46,9 +47,9 @@ protected override async ValueTask DoHandleCommandAsync(Player gameMaster, ChatB await this.ChangeAccountChatBanUntilAsync(player, DateTime.UtcNow.AddMinutes(arguments.DurationMinutes)).ConfigureAwait(false); // Send ban notice to Game Master - await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.AccountChatBannedResult), this.Key, arguments.CharacterName, arguments.DurationMinutes).ConfigureAwait(false); + await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.AccountChatBannedResult), this.Key, arguments.CharacterName, arguments.DurationMinutes).ConfigureAwait(false); // Send ban notice to character - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.YouAreChatBanned), arguments.DurationMinutes).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.YouAreChatBanned), arguments.DurationMinutes).ConfigureAwait(false); } } \ No newline at end of file diff --git a/src/GameLogic/PlugIns/ChatCommands/ChatUnbanCharChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/ChatUnbanCharChatCommandPlugIn.cs index d29df478a..d3efc3917 100644 --- a/src/GameLogic/PlugIns/ChatCommands/ChatUnbanCharChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/ChatUnbanCharChatCommandPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin which handles chatunban command. /// [Guid("82E74664-7700-433B-9428-90C17CC71350")] -[PlugIn("Chat Ban Character command", "Handles the chat command '/chatunban '. Unbans the account of a character from chatting.")] +[PlugIn] +[Display(Name = "Chat Ban Character command", Description = "Handles the chat command '/chatunban '. Unbans the account of a character from chatting.")] [ChatCommandHelp(Command, "Unbans the account of a character from chatting", typeof(ChatUnbanCharChatCommandArgs), CharacterStatus.GameMaster)] public class ChatUnbanCharChatCommandPlugIn : ChatCommandPlugInBase { @@ -41,9 +42,9 @@ protected override async ValueTask DoHandleCommandAsync(Player gameMaster, ChatU await this.ChangeAccountChatBanUntilAsync(player, null).ConfigureAwait(false); // Send unban notice to Game Master - await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.ChatBanRemoved), this.Key, arguments.CharacterName).ConfigureAwait(false); + await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.ChatBanRemoved), this.Key, arguments.CharacterName).ConfigureAwait(false); // Send unban notice to character - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.YourChatBanRemovedByGameMaster)).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.YourChatBanRemovedByGameMaster)).ConfigureAwait(false); } } \ No newline at end of file diff --git a/src/GameLogic/PlugIns/ChatCommands/ClearInventoryChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/ClearInventoryChatCommandPlugIn.cs index 320c4dbee..3b541c974 100644 --- a/src/GameLogic/PlugIns/ChatCommands/ClearInventoryChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/ClearInventoryChatCommandPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin which clears a character's inventory. /// [Guid("1E895A6F-3056-4A78-BA64-96E24363B8BC")] -[PlugIn("Clear Inventory chat command", "Clears inventory. Usage: /clearinv (optional:character)")] +[PlugIn] +[Display(Name = "Clear Inventory chat command", Description = "Clears inventory. Usage: /clearinv (optional:character)")] [ChatCommandHelp(Command, "Clears inventory.", null, MinimumStatus)] public class ClearInventoryChatCommandPlugIn : ChatCommandPlugInBase, ISupportCustomConfiguration, ISupportDefaultCustomConfiguration, IDisabledByDefault { @@ -56,7 +57,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments if (targetPlayer?.SelectedCharacter is null || !targetPlayer.SelectedCharacter.Name.Equals(characterName, StringComparison.OrdinalIgnoreCase)) { - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), characterName).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), characterName).ConfigureAwait(false); return; } } @@ -73,7 +74,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments if (!this.pendingConfirmations.TryGetValue(playerId, out var confirmationTime) || (DateTime.UtcNow - confirmationTime).TotalSeconds > ConfirmationTimeoutSeconds) { this.pendingConfirmations[playerId] = DateTime.UtcNow; - await player.ShowBlueMessageAsync(configuration.ConfirmationMessage).ConfigureAwait(false); + await player.ShowBlueMessageAsync(configuration.ConfirmationMessage).ConfigureAwait(false); return; } @@ -92,7 +93,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments if (removeMoney && !player.TryRemoveMoney(configuration.MoneyCost)) { - await player.ShowBlueMessageAsync(configuration.NotEnoughMoneyMessage).ConfigureAwait(false); + await player.ShowBlueMessageAsync(configuration.NotEnoughMoneyMessage).ConfigureAwait(false); return; } @@ -101,7 +102,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments await targetPlayer.DestroyInventoryItemAsync(item).ConfigureAwait(false); } - await player.ShowBlueMessageAsync(configuration.InventoryClearedMessage).ConfigureAwait(false); + await player.ShowBlueMessageAsync(configuration.InventoryClearedMessage).ConfigureAwait(false); } /// @@ -117,7 +118,7 @@ public class Arguments : ArgumentsBase /// /// The configuration of a . - /// TODO: Make localizable. + /// TODO: Make localizable. /// public class ClearInventoryConfiguration { diff --git a/src/GameLogic/PlugIns/ChatCommands/CreateMonsterChatCommand.cs b/src/GameLogic/PlugIns/ChatCommands/CreateMonsterChatCommand.cs index aa6a30958..58f50e0f0 100644 --- a/src/GameLogic/PlugIns/ChatCommands/CreateMonsterChatCommand.cs +++ b/src/GameLogic/PlugIns/ChatCommands/CreateMonsterChatCommand.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command to create a new monster which can be remote controlled. /// [Guid("BF4DA282-8CFE-4110-B1C5-A01D3F224FAB")] -[PlugIn("Create monster chat command", "Handles the chat command '/createmonster '. Creates a monster which can be remote controlled by the GM.")] +[PlugIn] +[Display(Name = "Create monster chat command", Description = "Handles the chat command '/createmonster '. Creates a monster which can be remote controlled by the GM.")] [ChatCommandHelp(Command, "Creates a monster which can be remote controlled by the game master.", typeof(CreateMonsterChatCommandArgs), CharacterStatus.GameMaster)] internal class CreateMonsterChatCommand : ChatCommandPlugInBase { @@ -31,7 +32,7 @@ protected override async ValueTask DoHandleCommandAsync(Player gameMaster, Creat var monsterDef = gameMaster.GameContext.Configuration.Monsters.FirstOrDefault(m => m.Number == arguments.MonsterNumber); if (monsterDef is null) { - await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.MonsterNotFoundByNumber), arguments.MonsterNumber).ConfigureAwait(false); + await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.MonsterNotFoundByNumber), arguments.MonsterNumber).ConfigureAwait(false); return; } @@ -56,6 +57,6 @@ protected override async ValueTask DoHandleCommandAsync(Player gameMaster, Creat await gameMap.AddAsync(monster).ConfigureAwait(false); monster.OnSpawn(); - await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.MonsterCreatedByGameMaster), arguments.MonsterNumber, monster.Id).ConfigureAwait(false); + await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.MonsterCreatedByGameMaster), arguments.MonsterNumber, monster.Id).ConfigureAwait(false); } } \ No newline at end of file diff --git a/src/GameLogic/PlugIns/ChatCommands/DisconnectChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/DisconnectChatCommandPlugIn.cs index a5c750e3a..529d2cbe1 100644 --- a/src/GameLogic/PlugIns/ChatCommands/DisconnectChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/DisconnectChatCommandPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin which handles disconnect commands. /// [Guid("B5E0F108-9E55-48F6-A7A8-220BFAEF2F3E")] -[PlugIn("Disconnect chat command", "Handles the chat command '/disconnect '. Disconnects a player from the game server.")] +[PlugIn] +[Display(Name = "Disconnect chat command", Description = "Handles the chat command '/disconnect '. Disconnects a player from the game server.")] [ChatCommandHelp(Command, "Disconnects a player from the game server.", typeof(DisconnectChatCommandArgs), CharacterStatus.GameMaster)] public class DisconnectChatCommandPlugIn : ChatCommandPlugInBase { @@ -32,7 +33,7 @@ protected override async ValueTask DoHandleCommandAsync(Player gameMaster, Disco if (!player.Name.Equals(gameMaster.Name)) { - await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CommandResultPlayerDisconnected), this.Key, player.Name).ConfigureAwait(false); + await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CommandResultPlayerDisconnected), this.Key, player.Name).ConfigureAwait(false); } } } \ No newline at end of file diff --git a/src/GameLogic/PlugIns/ChatCommands/GetLevelChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/GetLevelChatCommandPlugIn.cs index bb62062af..a1cae5579 100644 --- a/src/GameLogic/PlugIns/ChatCommands/GetLevelChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/GetLevelChatCommandPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin to get a character's level. /// [Guid("9D5C8FFE-EC32-48AC-8B6F-BB361AD184E5")] -[PlugIn("Get level command", "Gets level of a player. Usage: /getlevel (optional:character)")] +[PlugIn] +[Display(Name = "Get level command", Description = "Gets level of a player. Usage: /getlevel (optional:character)")] [ChatCommandHelp(Command, "Gets level of a player. Usage: /getlevel (optional:character)", null)] public class GetLevelChatCommandPlugIn : ChatCommandPlugInBase, IDisabledByDefault { @@ -35,7 +36,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments if (targetPlayer?.SelectedCharacter is null || !targetPlayer.SelectedCharacter.Name.Equals(characterName, StringComparison.OrdinalIgnoreCase)) { - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), characterName).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), characterName).ConfigureAwait(false); return; } } @@ -45,7 +46,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments return; } - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.LevelInformation), targetPlayer.SelectedCharacter.Name, targetPlayer.Attributes![Stats.Level]).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.LevelInformation), targetPlayer.SelectedCharacter.Name, targetPlayer.Attributes![Stats.Level]).ConfigureAwait(false); } /// diff --git a/src/GameLogic/PlugIns/ChatCommands/GetLevelUpPointsChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/GetLevelUpPointsChatCommandPlugIn.cs index c57341198..1f10d48eb 100644 --- a/src/GameLogic/PlugIns/ChatCommands/GetLevelUpPointsChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/GetLevelUpPointsChatCommandPlugIn.cs @@ -11,7 +11,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin to get a character's level-up points. /// [Guid("E4D65354-CCD2-4960-BDCA-D4582A57BBCB")] -[PlugIn("Get level up points command", "Gets level up points of a player. Usage: /getleveluppoints (optional:character)")] +[PlugIn] +[Display(Name = "Get level up points command", Description = "Gets level up points of a player. Usage: /getleveluppoints (optional:character)")] [ChatCommandHelp(Command, "Gets level up points of a player. Usage: /getleveluppoints (optional:character)", null)] public class GetLevelUpPointsChatCommandPlugIn : ChatCommandPlugInBase, IDisabledByDefault { @@ -34,7 +35,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments if (targetPlayer?.SelectedCharacter is null || !targetPlayer.SelectedCharacter.Name.Equals(characterName, StringComparison.OrdinalIgnoreCase)) { - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), characterName).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), characterName).ConfigureAwait(false); return; } } @@ -44,7 +45,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments return; } - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.LevelUpPointsInfo), targetPlayer.SelectedCharacter.Name, targetPlayer.SelectedCharacter.LevelUpPoints).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.LevelUpPointsInfo), targetPlayer.SelectedCharacter.Name, targetPlayer.SelectedCharacter.LevelUpPoints).ConfigureAwait(false); } /// diff --git a/src/GameLogic/PlugIns/ChatCommands/GetMasterLevelChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/GetMasterLevelChatCommandPlugIn.cs index 81aed931c..51028e6d5 100644 --- a/src/GameLogic/PlugIns/ChatCommands/GetMasterLevelChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/GetMasterLevelChatCommandPlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin to get a character's master level. /// [Guid("4CED4BF8-9D91-47F9-82DE-51E2646F77C8")] -[PlugIn("Get master level command", "Gets master level of a player. Usage: /getmasterlevel (optional:character)")] +[PlugIn] +[Display(Name = "Get master level command", Description = "Gets master level of a player. Usage: /getmasterlevel (optional:character)")] [ChatCommandHelp(Command, "Gets master level of a player. Usage: /getmasterlevel (optional:character)", null)] public class GetMasterLevelChatCommandPlugIn : ChatCommandPlugInBase, IDisabledByDefault { @@ -38,7 +39,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments if (targetPlayer?.SelectedCharacter is null || !targetPlayer.SelectedCharacter.Name.Equals(characterName, StringComparison.OrdinalIgnoreCase)) { - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), characterName).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), characterName).ConfigureAwait(false); return; } } @@ -48,7 +49,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments return; } - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.MasterLevelInfo), targetPlayer.SelectedCharacter.Name, targetPlayer.Attributes![Stats.MasterLevel]).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.MasterLevelInfo), targetPlayer.SelectedCharacter.Name, targetPlayer.Attributes![Stats.MasterLevel]).ConfigureAwait(false); } /// diff --git a/src/GameLogic/PlugIns/ChatCommands/GetMasterLevelUpPointsChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/GetMasterLevelUpPointsChatCommandPlugIn.cs index ba93e11b8..751af3b13 100644 --- a/src/GameLogic/PlugIns/ChatCommands/GetMasterLevelUpPointsChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/GetMasterLevelUpPointsChatCommandPlugIn.cs @@ -11,7 +11,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin to get a character's master level-up points. /// [Guid("8ACCF267-F5F3-4003-B4C3-536ACCB5181D")] -[PlugIn("Get master level up points command", "Gets master level up points of a player. Usage: /getmasterleveluppoints (optional:character)")] +[PlugIn] +[Display(Name = "Get master level up points command", Description = "Gets master level up points of a player. Usage: /getmasterleveluppoints (optional:character)")] [ChatCommandHelp(Command, "Gets master level up points of a player. Usage: /getmasterleveluppoints (optional:character)", null)] public class GetMasterLevelUpPointsChatCommandPlugIn : ChatCommandPlugInBase, IDisabledByDefault { @@ -34,7 +35,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments if (targetPlayer?.SelectedCharacter is null || !targetPlayer.SelectedCharacter.Name.Equals(characterName, StringComparison.OrdinalIgnoreCase)) { - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), characterName).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), characterName).ConfigureAwait(false); return; } } @@ -44,7 +45,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments return; } - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.MasterLevelUpPointsInfo), targetPlayer.SelectedCharacter.Name, targetPlayer.SelectedCharacter.MasterLevelUpPoints).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.MasterLevelUpPointsInfo), targetPlayer.SelectedCharacter.Name, targetPlayer.SelectedCharacter.MasterLevelUpPoints).ConfigureAwait(false); } /// diff --git a/src/GameLogic/PlugIns/ChatCommands/GetMoneyChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/GetMoneyChatCommandPlugIn.cs index 4ac15eb70..c0d944543 100644 --- a/src/GameLogic/PlugIns/ChatCommands/GetMoneyChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/GetMoneyChatCommandPlugIn.cs @@ -11,7 +11,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin to get a character's money. /// [Guid("207F5872-33AB-4764-B67F-95AB7C6313E3")] -[PlugIn("Get money command", "Gets money of a player. Usage: /getmoney (optional:character)")] +[PlugIn] +[Display(Name = "Get money command", Description = "Gets money of a player. Usage: /getmoney (optional:character)")] [ChatCommandHelp(Command, "Gets money of a player. Usage: /getmoney (optional:character)", null)] public class GetMoneyChatCommandPlugIn : ChatCommandPlugInBase, IDisabledByDefault { @@ -34,7 +35,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments if (targetPlayer?.SelectedCharacter is null || !targetPlayer.SelectedCharacter.Name.Equals(characterName, StringComparison.OrdinalIgnoreCase)) { - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), characterName).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), characterName).ConfigureAwait(false); return; } } @@ -44,7 +45,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments return; } - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.MoneyInfo), targetPlayer.SelectedCharacter.Name, targetPlayer.Money).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.MoneyInfo), targetPlayer.SelectedCharacter.Name, targetPlayer.Money).ConfigureAwait(false); } /// diff --git a/src/GameLogic/PlugIns/ChatCommands/GetResetsChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/GetResetsChatCommandPlugIn.cs index c20924c04..15d93a59b 100644 --- a/src/GameLogic/PlugIns/ChatCommands/GetResetsChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/GetResetsChatCommandPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin which sets a character's resets. /// [Guid("26ACF6A9-346A-49DF-8583-EA610F6E3AEA")] -[PlugIn("Get resets command", "Gets resets of a player. Usage: /getresets (optional:character)")] +[PlugIn] +[Display(Name = "Get resets command", Description = "Gets resets of a player. Usage: /getresets (optional:character)")] [ChatCommandHelp(Command, "Gets resets of a player. Usage: /getresets (optional:character)", null)] public class GetResetsChatCommandPlugIn : ChatCommandPlugInBase, IDisabledByDefault { @@ -32,7 +33,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments var configuration = player.GameContext.FeaturePlugIns.GetPlugIn()?.Configuration; if (configuration is null) { - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.ResetSystemInactive)).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.ResetSystemInactive)).ConfigureAwait(false); return; } @@ -43,7 +44,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments if (targetPlayer?.SelectedCharacter is null || !targetPlayer.SelectedCharacter.Name.Equals(characterName, StringComparison.OrdinalIgnoreCase)) { - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), characterName).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), characterName).ConfigureAwait(false); return; } } @@ -53,7 +54,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments return; } - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.ResetsInfo), targetPlayer.SelectedCharacter.Name, targetPlayer.Attributes![Stats.Resets]).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.ResetsInfo), targetPlayer.SelectedCharacter.Name, targetPlayer.Attributes![Stats.Resets]).ConfigureAwait(false); } /// diff --git a/src/GameLogic/PlugIns/ChatCommands/GetStatChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/GetStatChatCommandPlugIn.cs index a998cf91b..bc9861045 100644 --- a/src/GameLogic/PlugIns/ChatCommands/GetStatChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/GetStatChatCommandPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin which handles the command to get stat points. /// [Guid("F8CACA47-D486-45AE-814F-C6218AD87652")] -[PlugIn("Get Stat chat command", "Get stat points. Usage: /get (ene|agi|vit|str|cmd) (optional:character)")] +[PlugIn] +[Display(Name = "Get Stat chat command", Description = "Get stat points. Usage: /get (ene|agi|vit|str|cmd) (optional:character)")] [ChatCommandHelp(Command, "Get stat points. Usage: /get (ene|agi|vit|str|cmd) (optional:character)", typeof(Arguments), MinimumStatus)] public class GetStatChatCommandPlugIn : ChatCommandPlugInBase, IDisabledByDefault { @@ -29,30 +30,30 @@ public class GetStatChatCommandPlugIn : ChatCommandPlugInBase protected override async ValueTask DoHandleCommandAsync(Player player, Arguments arguments) { - if (arguments is null) + if (arguments is null) { - return; - } + return; + } - var targetPlayer = player; - if (arguments.CharacterName is { } characterName) - { - targetPlayer = player.GameContext.GetPlayerByCharacterName(characterName); - if (targetPlayer?.SelectedCharacter is null || - !targetPlayer.SelectedCharacter.Name.Equals(characterName, StringComparison.OrdinalIgnoreCase)) + var targetPlayer = player; + if (arguments.CharacterName is { } characterName) + { + targetPlayer = player.GameContext.GetPlayerByCharacterName(characterName); + if (targetPlayer?.SelectedCharacter is null || + !targetPlayer.SelectedCharacter.Name.Equals(characterName, StringComparison.OrdinalIgnoreCase)) { - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), characterName).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), characterName).ConfigureAwait(false); return; } } - - if (targetPlayer.SelectedCharacter is not { } selectedCharacter) + + if (targetPlayer.SelectedCharacter is not { } selectedCharacter) { - return; + return; } - - var attribute = this.GetAttribute(selectedCharacter, arguments.StatType); - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.StatPointInfo), selectedCharacter.Name, targetPlayer.Attributes![attribute]).ConfigureAwait(false); + + var attribute = this.GetAttribute(selectedCharacter, arguments.StatType); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.StatPointInfo), selectedCharacter.Name, targetPlayer.Attributes![attribute]).ConfigureAwait(false); } private AttributeDefinition GetAttribute(Character selectedCharacter, string? statType) diff --git a/src/GameLogic/PlugIns/ChatCommands/GuildBattleSoccerChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/GuildBattleSoccerChatCommandPlugIn.cs index 1dee119de..a64266e97 100644 --- a/src/GameLogic/PlugIns/ChatCommands/GuildBattleSoccerChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/GuildBattleSoccerChatCommandPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin which handles guild battle soccer requests. /// [Guid("A456F032-CE7D-4EA5-8EB2-96C2B04C70D1")] -[PlugIn("Guild battle soccer chat command", "Handles the chat command '/battlesoccer '. Sends a request to the guild master of the requested guild.")] +[PlugIn] +[Display(Name = "Guild battle soccer chat command", Description = "Handles the chat command '/battlesoccer '. Sends a request to the guild master of the requested guild.")] [ChatCommandHelp(Command, "Sends a battle soccer request to the guild master of the requested guild.", typeof(GuildWarChatCommandArgs), CharacterStatus.Normal)] public class GuildBattleSoccerChatCommandPlugIn : ChatCommandPlugInBase { diff --git a/src/GameLogic/PlugIns/ChatCommands/GuildDisconnectChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/GuildDisconnectChatCommandPlugIn.cs index 4db4f6656..d375c03fc 100644 --- a/src/GameLogic/PlugIns/ChatCommands/GuildDisconnectChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/GuildDisconnectChatCommandPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin which handles gm disconnect commands. /// [Guid("F23262E6-0D7C-4B9C-8CD5-7E44AF4EE469")] -[PlugIn("Guild disconnect chat command", "Handles the chat command '/guilddisconnect '. Disconnect the guild members.")] +[PlugIn] +[Display(Name = "Guild disconnect chat command", Description = "Handles the chat command '/guilddisconnect '. Disconnect the guild members.")] [ChatCommandHelp(Command, "Disconnects the members of a guild.", typeof(GuildDisconnectChatCommandArgs), CharacterStatus.GameMaster)] public class GuildDisconnectChatCommandPlugIn : ChatCommandPlugInBase { @@ -39,7 +40,7 @@ await gameServerContext.ForEachGuildPlayerAsync(guildId, async guildPlayer => if (!guildPlayer.Name.Equals(gameMaster.Name)) { - await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.GuildDisconnectResult), this.Key, guildPlayer.Name).ConfigureAwait(false); + await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.GuildDisconnectResult), this.Key, guildPlayer.Name).ConfigureAwait(false); } }).ConfigureAwait(false); } diff --git a/src/GameLogic/PlugIns/ChatCommands/GuildMoveChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/GuildMoveChatCommandPlugIn.cs index 4d82e4698..a8f847254 100644 --- a/src/GameLogic/PlugIns/ChatCommands/GuildMoveChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/GuildMoveChatCommandPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin which handles gm move commands. /// [Guid("9163C3EA-6722-4E55-A109-20C163C05266")] -[PlugIn("Guild move chat command", "Handles the chat command '/guildmove '. Move the character from a guild to a specified map and coordinates.")] +[PlugIn] +[Display(Name = "Guild move chat command", Description = "Handles the chat command '/guildmove '. Move the character from a guild to a specified map and coordinates.")] [ChatCommandHelp(Command, "Move the character from a guild to a specified map and coordinates.", typeof(GuildMoveChatCommandArgs), CharacterStatus.GameMaster)] public class GuildMoveChatCommandPlugIn : ChatCommandPlugInBase { @@ -41,8 +42,8 @@ await gameServerContext.ForEachGuildPlayerAsync(guildId, async guildPlayer => if (!guildPlayer.Name.Equals(gameMaster.Name)) { - await guildPlayer.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.MovedByGameMaster)).ConfigureAwait(false); - await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.MovedPlayerResult), this.Key, guildPlayer.Name, exitGate!.Map!.Name, guildPlayer.Position.X, guildPlayer.Position.Y).ConfigureAwait(false); + await guildPlayer.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.MovedByGameMaster)).ConfigureAwait(false); + await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.MovedPlayerResult), this.Key, guildPlayer.Name, exitGate!.Map!.Name, guildPlayer.Position.X, guildPlayer.Position.Y).ConfigureAwait(false); } }).ConfigureAwait(false); } diff --git a/src/GameLogic/PlugIns/ChatCommands/GuildWarChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/GuildWarChatCommandPlugIn.cs index ecfc674ea..cf033ec0b 100644 --- a/src/GameLogic/PlugIns/ChatCommands/GuildWarChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/GuildWarChatCommandPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin which handles guild war requests. /// [Guid("12A6E159-0D5E-44DE-8CF8-012A7278D42C")] -[PlugIn("Guild war chat command", "Handles the chat command '/war '. Sends a request to the guild master of the requested guild.")] +[PlugIn] +[Display(Name = "Guild war chat command", Description = "Handles the chat command '/war '. Sends a request to the guild master of the requested guild.")] [ChatCommandHelp(Command, "Sends a guild war request to the master of the requested guild.", typeof(GuildWarChatCommandArgs), CharacterStatus.Normal)] public class GuildWarChatCommandPlugIn : ChatCommandPlugInBase { diff --git a/src/GameLogic/PlugIns/ChatCommands/HelpCommand.cs b/src/GameLogic/PlugIns/ChatCommands/HelpCommand.cs index a552cd2cd..fbe3b2e77 100644 --- a/src/GameLogic/PlugIns/ChatCommands/HelpCommand.cs +++ b/src/GameLogic/PlugIns/ChatCommands/HelpCommand.cs @@ -11,7 +11,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// The help command which shows the usage of a command. /// [Guid("EFE9399A-9A14-4B94-BBC1-20718584C4C2")] -[PlugIn("Help command", "Handles the /help chat command. Shows information about the requested command.")] +[PlugIn] +[Display(Name = "Help command", Description = "Handles the /help chat command. Shows information about the requested command.")] [ChatCommandHelp(Command, "Shows information about the requested command.", typeof(Arguments))] public class HelpCommand : IChatCommandPlugIn { @@ -34,16 +35,16 @@ public async ValueTask HandleCommandAsync(Player player, string command) .FirstOrDefault(x => x.Command.Equals("/" + commandName, StringComparison.InvariantCultureIgnoreCase)); if (commandPluginAttribute is null) { - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CommandDoesNotExist), commandName ?? string.Empty).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CommandDoesNotExist), commandName ?? string.Empty).ConfigureAwait(false); return; } - // TODO: Localize - await player.ShowBlueMessageAsync(commandPluginAttribute.Usage).ConfigureAwait(false); + // TODO: Localize + await player.ShowBlueMessageAsync(commandPluginAttribute.Usage).ConfigureAwait(false); } catch (ArgumentException e) { - await player.ShowBlueMessageAsync(e.Message).ConfigureAwait(false); + await player.ShowBlueMessageAsync(e.Message).ConfigureAwait(false); } } diff --git a/src/GameLogic/PlugIns/ChatCommands/HideChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/HideChatCommandPlugIn.cs index 648ad0ac4..1c7ce6d0e 100644 --- a/src/GameLogic/PlugIns/ChatCommands/HideChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/HideChatCommandPlugIn.cs @@ -11,7 +11,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin which handles hide commands. /// [Guid("7CE1CA66-C6B1-4840-9997-EF15C49FAB49")] -[PlugIn("Hide command", "Handles the chat command '/hide'. Hides the own player from others.")] +[PlugIn] +[Display(Name = "Hide command", Description = "Handles the chat command '/hide'. Hides the own player from others.")] [ChatCommandHelp(Command, "Hides the own player from others.", CharacterStatus.GameMaster)] public class HideChatCommandPlugIn : IChatCommandPlugIn { diff --git a/src/GameLogic/PlugIns/ChatCommands/ItemChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/ItemChatCommandPlugIn.cs index c74d8ec94..4fbc46a09 100644 --- a/src/GameLogic/PlugIns/ChatCommands/ItemChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/ItemChatCommandPlugIn.cs @@ -8,7 +8,7 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; using MUnique.OpenMU.DataModel.Configuration.Items; using MUnique.OpenMU.GameLogic.Attributes; using MUnique.OpenMU.GameLogic.PlugIns.ChatCommands.Arguments; -using MUnique.OpenMU.Interfaces; +using MUnique.OpenMU.Interfaces; using MUnique.OpenMU.PlugIns; /// @@ -16,7 +16,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// /// [Guid("ABFE2440-E765-4F17-A588-BD9AE3799887")] -[PlugIn("Item chat command", "Handles the chat command '/item '. Drops a specific item next to the character.")] +[PlugIn] +[Display(Name = "Item chat command", Description = "Handles the chat command '/item '. Drops a specific item next to the character.")] [ChatCommandHelp(Command, "Drops a specific item next to the character.", typeof(ItemChatCommandArgs), CharacterStatus.GameMaster)] public class ItemChatCommandPlugIn : ChatCommandPlugInBase { @@ -37,7 +38,7 @@ protected override async ValueTask DoHandleCommandAsync(Player gameMaster, ItemC var dropCoordinates = gameMaster.CurrentMap.Terrain.GetRandomCoordinate(gameMaster.Position, 1); var droppedItem = new DroppedItem(item, dropCoordinates, gameMaster.CurrentMap, gameMaster); await gameMaster.CurrentMap.AddAsync(droppedItem).ConfigureAwait(false); - await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.ItemCreatedResult), this.Key, item).ConfigureAwait(false); + await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.ItemCreatedResult), this.Key, item).ConfigureAwait(false); } } @@ -62,21 +63,21 @@ private static ItemDefinition GetItemDefinition(Player gameMaster, ItemChatComma { return gameMaster.GameContext.Configuration.Items .FirstOrDefault(def => def.Group == arguments.Group && def.Number == arguments.Number) - ?? throw new LocalizableException( - new(string.Format(PlayerMessage.ItemGroupNumberNotExists, arguments.Group, arguments.Number)), - nameof(PlayerMessage.ItemGroupNumberNotExists), - arguments.Group, - arguments.Number); + ?? throw new LocalizableException( + new(string.Format(PlayerMessage.ItemGroupNumberNotExists, arguments.Group, arguments.Number)), + nameof(PlayerMessage.ItemGroupNumberNotExists), + arguments.Group, + arguments.Number); } private static byte GetItemLevel(ItemDefinition itemDefinition, ItemChatCommandArgs arguments) { if (arguments.Level > itemDefinition.MaximumItemLevel) { - throw new LocalizableException( - new(string.Format(PlayerMessage.ItemLevelExceeded, itemDefinition.MaximumItemLevel)), - nameof(PlayerMessage.ItemLevelExceeded), - itemDefinition.MaximumItemLevel); + throw new LocalizableException( + new(string.Format(PlayerMessage.ItemLevelExceeded, itemDefinition.MaximumItemLevel)), + nameof(PlayerMessage.ItemLevelExceeded), + itemDefinition.MaximumItemLevel); } return arguments.Level; diff --git a/src/GameLogic/PlugIns/ChatCommands/ListCommand.cs b/src/GameLogic/PlugIns/ChatCommands/ListCommand.cs index 026ad30cd..0a66ef716 100644 --- a/src/GameLogic/PlugIns/ChatCommands/ListCommand.cs +++ b/src/GameLogic/PlugIns/ChatCommands/ListCommand.cs @@ -11,7 +11,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A command which lists all available chat commands with their usage. /// [Guid("a5b0a3e5-bb2a-4287-821a-cd97714fe209")] -[PlugIn("List command", "Lists all the commands.")] +[PlugIn] +[Display(Name = "List command", Description = "Lists all the commands.")] [ChatCommandHelp(Command, "Lists all the commands.", null)] public class ListCommand : IChatCommandPlugIn { @@ -30,7 +31,7 @@ public async ValueTask HandleCommandAsync(Player player, string command) foreach (var commandUsage in commands.Select(x => x.Usage)) { - await player.ShowBlueMessageAsync(commandUsage).ConfigureAwait(false); + await player.ShowBlueMessageAsync(commandUsage).ConfigureAwait(false); } } } \ No newline at end of file diff --git a/src/GameLogic/PlugIns/ChatCommands/MoveChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/MoveChatCommandPlugIn.cs index 16c2c0042..d5b75665c 100644 --- a/src/GameLogic/PlugIns/ChatCommands/MoveChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/MoveChatCommandPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin which handles move commands. /// [Guid("4564AE2B-4819-4155-B5B2-FE2ED0CF7A7F")] -[PlugIn("Move chat command", "Handles the chat command '/move '. Moves the character to the specified destination.")] +[PlugIn] +[Display(Name = "Move chat command", Description = "Handles the chat command '/move '. Moves the character to the specified destination.")] [ChatCommandHelp(Command, "Moves the character to the specified destination.", typeof(MoveChatCommandArgs), CharacterStatus.Normal)] public class MoveChatCommandPlugIn : ChatCommandPlugInBase { @@ -39,8 +40,8 @@ protected override async ValueTask DoHandleCommandAsync(Player sender, MoveChatC if (!targetPlayer.Name.Equals(sender.Name)) { - await targetPlayer.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.MovedByGameMaster)).ConfigureAwait(false); - await sender.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.MovedPlayerResult), this.Key, targetPlayer.Name, exitGate!.Map!.Name, targetPlayer.Position.X, targetPlayer.Position.Y).ConfigureAwait(false); + await targetPlayer.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.MovedByGameMaster)).ConfigureAwait(false); + await sender.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.MovedPlayerResult), this.Key, targetPlayer.Name, exitGate!.Map!.Name, targetPlayer.Position.X, targetPlayer.Position.Y).ConfigureAwait(false); } } else diff --git a/src/GameLogic/PlugIns/ChatCommands/MoveMonsterChatCommand.cs b/src/GameLogic/PlugIns/ChatCommands/MoveMonsterChatCommand.cs index 1e52aea96..bed3ceef7 100644 --- a/src/GameLogic/PlugIns/ChatCommands/MoveMonsterChatCommand.cs +++ b/src/GameLogic/PlugIns/ChatCommands/MoveMonsterChatCommand.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// Chat command to instantly move a monster to specific coordinates. /// [Guid("B3DE58F3-B604-4F59-9122-E686AD90BE7B")] -[PlugIn("Move remote monster chat command", "Handles the chat command '/movemonster '. Moves a previously created monster which can be remote controlled by the GM.")] +[PlugIn] +[Display(Name = "Move remote monster chat command", Description = "Handles the chat command '/movemonster '. Moves a previously created monster which can be remote controlled by the GM.")] [ChatCommandHelp(Command, "Moves a previously created monster which can be remote controlled by the game master.", typeof(MoveMonsterCommandArgs), CharacterStatus.GameMaster)] internal class MoveMonsterChatCommand : ChatCommandPlugInBase { @@ -31,7 +32,7 @@ protected override async ValueTask DoHandleCommandAsync(Player gameMaster, MoveM var monster = gameMaster.ObservingBuckets.SelectMany(b => b).OfType().FirstOrDefault(m => m.Id == arguments.Id); if (monster is null) { - await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.MonsterNotFoundById), arguments.Id).ConfigureAwait(false); + await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.MonsterNotFoundById), arguments.Id).ConfigureAwait(false); return; } diff --git a/src/GameLogic/PlugIns/ChatCommands/NoticeChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/NoticeChatCommandPlugIn.cs index 931a129d7..d80b25736 100644 --- a/src/GameLogic/PlugIns/ChatCommands/NoticeChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/NoticeChatCommandPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin which handles post commands by sending a golden notice message to all players. /// [Guid("2BFC9464-4B76-4D76-8CE1-69B712B65E6C")] -[PlugIn("Notice chat command", "Handles the chat command '/goldnotice message'. Sends a global golden notice message to all players of the game.")] +[PlugIn] +[Display(Name = "Notice chat command", Description = "Handles the chat command '/goldnotice message'. Sends a global golden notice message to all players of the game.")] public class NoticeChatCommandPlugIn : IChatCommandPlugIn { private const string CommandKey = "/goldnotice"; diff --git a/src/GameLogic/PlugIns/ChatCommands/NpcChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/NpcChatCommandPlugIn.cs index 58abcad11..68f038bc1 100644 --- a/src/GameLogic/PlugIns/ChatCommands/NpcChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/NpcChatCommandPlugIn.cs @@ -16,7 +16,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin which opens NPC windows. /// [Guid("D8AC2F15-AB30-4432-A042-A41ACA1B274D")] -[PlugIn("NPC open merchant chat command", "Opens the merchant NPC store.")] +[PlugIn] +[Display(Name = "NPC open merchant chat command", Description = "Opens the merchant NPC store.")] [ChatCommandHelp(Command, "Opens the NPC store.", null)] public class NpcChatCommandPlugIn : ChatCommandPlugInBase, ISupportCustomConfiguration, ISupportDefaultCustomConfiguration, IDisabledByDefault { @@ -58,7 +59,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments } else { - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.InvalidMerchantId), npcIdStr).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.InvalidMerchantId), npcIdStr).ConfigureAwait(false); return; } } @@ -68,11 +69,11 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments return; } - if (npcDefinition.MerchantStore is null) + if (npcDefinition.MerchantStore is null) { if (player.SelectedCharacter?.CharacterStatus >= CharacterStatus.GameMaster) { - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.NpcIsNotMerchant)).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.NpcIsNotMerchant)).ConfigureAwait(false); } return; @@ -80,7 +81,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments if (configuration.MinimumVipLevel > 0 && (player.Attributes?[Stats.IsVip] ?? 0) < configuration.MinimumVipLevel) { - await player.ShowBlueMessageAsync(configuration.InsufficientVipLevelMessage).ConfigureAwait(false); + await player.ShowBlueMessageAsync(configuration.InsufficientVipLevelMessage).ConfigureAwait(false); return; } diff --git a/src/GameLogic/PlugIns/ChatCommands/OnlineChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/OnlineChatCommandPlugIn.cs index bbe8a7350..653fe875d 100644 --- a/src/GameLogic/PlugIns/ChatCommands/OnlineChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/OnlineChatCommandPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin which handles online commands. /// [Guid("6693ABA3-7B35-4800-815B-096F3420E998")] -[PlugIn("Online chat command", "Handles the chat command '/online'. Gets the count of game masters and players online.")] +[PlugIn] +[Display(Name = "Online chat command", Description = "Handles the chat command '/online'. Gets the count of game masters and players online.")] [ChatCommandHelp(Command, "Gets the online count of game masters and players.", typeof(EmptyChatCommandArgs), CharacterStatus.GameMaster)] public class OnlineChatCommandPlugIn : ChatCommandPlugInBase, IChatCommandPlugIn { @@ -45,6 +46,6 @@ await gameMasterPlayer.GameContext.ForEachPlayerAsync(player => return Task.CompletedTask; }).ConfigureAwait(false); - await gameMasterPlayer.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.OnlineCountInfo), this.Key, totalGameMastersCount, totalCharactersCount).ConfigureAwait(false); + await gameMasterPlayer.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.OnlineCountInfo), this.Key, totalGameMastersCount, totalCharactersCount).ConfigureAwait(false); } } \ No newline at end of file diff --git a/src/GameLogic/PlugIns/ChatCommands/OpenWarehouseChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/OpenWarehouseChatCommandPlugIn.cs index 94c0d97ea..2850d2127 100644 --- a/src/GameLogic/PlugIns/ChatCommands/OpenWarehouseChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/OpenWarehouseChatCommandPlugIn.cs @@ -16,7 +16,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin which opens the warehouse NPC window. /// [Guid("62027B6B-D8E7-4DDB-A16B-7070D1BC4A56")] -[PlugIn("Open Warehouse chat command", "Opens the warehouse.")] +[PlugIn] +[Display(Name = "Open Warehouse chat command", Description = "Opens the warehouse.")] [ChatCommandHelp(Command, "Opens the warehouse.", null)] public class OpenWarehouseChatCommandPlugIn : ChatCommandPlugInBase, ISupportCustomConfiguration, ISupportDefaultCustomConfiguration, IDisabledByDefault { @@ -51,7 +52,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments if (configuration.MinimumVipLevel > 0 && (player.Attributes?[Stats.IsVip] ?? 0) < configuration.MinimumVipLevel) { - await player.ShowBlueMessageAsync(configuration.InsufficientVipLevelMessage).ConfigureAwait(false); + await player.ShowBlueMessageAsync(configuration.InsufficientVipLevelMessage).ConfigureAwait(false); return; } @@ -59,7 +60,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments { if (player.SelectedCharacter?.CharacterStatus >= CharacterStatus.GameMaster) { - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.NoWarehouseNpcFound)).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.NoWarehouseNpcFound)).ConfigureAwait(false); } return; diff --git a/src/GameLogic/PlugIns/ChatCommands/PKChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/PKChatCommandPlugIn.cs index 44511bdc0..198d79418 100644 --- a/src/GameLogic/PlugIns/ChatCommands/PKChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/PKChatCommandPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin which handles pk commands. /// [Guid("30B7EFF0-33EE-4136-BEB0-BE503B748DC6")] -[PlugIn("PK chat command", "Handles the chat command '/pk '. Sets player kill level and count of a character.")] +[PlugIn] +[Display(Name = "PK chat command", Description = "Handles the chat command '/pk '. Sets player kill level and count of a character.")] [ChatCommandHelp(Command, "Sets player kill level and count of a character.", typeof(PkChatCommandArgs), CharacterStatus.GameMaster)] public class PkChatCommandPlugIn : ChatCommandPlugInBase { @@ -32,35 +33,35 @@ protected override async ValueTask DoHandleCommandAsync(Player gameMaster, PkCha { if (arguments.Level < MinPkLevel || arguments.Level > MaxPkLevel) { - await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.PlayerKillLevelRangeError), MinPkLevel, MaxPkLevel).ConfigureAwait(false); - return; + await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.PlayerKillLevelRangeError), MinPkLevel, MaxPkLevel).ConfigureAwait(false); + return; } - if (arguments.Count <= 0) + if (arguments.Count <= 0) { - await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.PlayerKillCountMustBePositive)).ConfigureAwait(false); - return; + await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.PlayerKillCountMustBePositive)).ConfigureAwait(false); + return; } var targetPlayer = this.GetPlayerByCharacterName(gameMaster, arguments.CharacterName ?? string.Empty); - var character = targetPlayer?.SelectedCharacter; - if (character is null) - { - // logged out in the mean time ... - return; - } - - character.State = HeroState.Normal + arguments.Level; - character.StateRemainingSeconds = (int)TimeSpan.FromHours(arguments.Count).TotalSeconds; - character.PlayerKillCount = arguments.Count; - await targetPlayer!.ForEachWorldObserverAsync(p => p.UpdateCharacterHeroStateAsync(targetPlayer!), true).ConfigureAwait(false); - - await gameMaster.ShowLocalizedBlueMessageAsync( - nameof(PlayerMessage.PlayerKillStateChangeResult), - this.Key, - character.Name, - character.State, - character.PlayerKillCount, - Math.Round(TimeSpan.FromSeconds(character!.StateRemainingSeconds).TotalMinutes)).ConfigureAwait(false); + var character = targetPlayer?.SelectedCharacter; + if (character is null) + { + // logged out in the mean time ... + return; + } + + character.State = HeroState.Normal + arguments.Level; + character.StateRemainingSeconds = (int)TimeSpan.FromHours(arguments.Count).TotalSeconds; + character.PlayerKillCount = arguments.Count; + await targetPlayer!.ForEachWorldObserverAsync(p => p.UpdateCharacterHeroStateAsync(targetPlayer!), true).ConfigureAwait(false); + + await gameMaster.ShowLocalizedBlueMessageAsync( + nameof(PlayerMessage.PlayerKillStateChangeResult), + this.Key, + character.Name, + character.State, + character.PlayerKillCount, + Math.Round(TimeSpan.FromSeconds(character!.StateRemainingSeconds).TotalMinutes)).ConfigureAwait(false); } } \ No newline at end of file diff --git a/src/GameLogic/PlugIns/ChatCommands/PKClearChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/PKClearChatCommandPlugIn.cs index 7942a2e18..46c22298f 100644 --- a/src/GameLogic/PlugIns/ChatCommands/PKClearChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/PKClearChatCommandPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin which handles pk clear commands. /// [Guid("EB97A8F6-F6BD-460A-BCBE-253BF679361A")] -[PlugIn("PK clear chat command", "Handles the chat command '/pkclear '. Clears the player kill count.")] +[PlugIn] +[Display(Name = "PK clear chat command", Description = "Handles the chat command '/pkclear '. Clears the player kill count.")] [ChatCommandHelp(Command, "Clears the player kill count.", typeof(PkClearChatCommandArgs), CharacterStatus.GameMaster)] public class PkClearChatCommandPlugIn : ChatCommandPlugInBase { @@ -37,9 +38,9 @@ protected override async ValueTask DoHandleCommandAsync(Player gameMaster, PkCle if (!targetPlayer.Name.Equals(gameMaster.Name)) { - await targetPlayer.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.PkStatusClearedByGameMaster)).ConfigureAwait(false); + await targetPlayer.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.PkStatusClearedByGameMaster)).ConfigureAwait(false); } - await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.PkClearedResult), this.Key, targetPlayer.Name).ConfigureAwait(false); + await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.PkClearedResult), this.Key, targetPlayer.Name).ConfigureAwait(false); } } \ No newline at end of file diff --git a/src/GameLogic/PlugIns/ChatCommands/PostChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/PostChatCommandPlugIn.cs index 602dc5cca..020b8e89b 100644 --- a/src/GameLogic/PlugIns/ChatCommands/PostChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/PostChatCommandPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin which handles post commands by sending a blue system message to all players. /// [Guid("ED2523C1-F66D-4B53-814E-D2FC0C1F46C0")] -[PlugIn("Post chat command", "Handles the chat command '/post message'. Sends a global blue system message to all players of the game.")] +[PlugIn] +[Display(Name = "Post chat command", Description = "Handles the chat command '/post message'. Sends a global blue system message to all players of the game.")] public class PostChatCommandPlugIn : IChatCommandPlugIn { private const string CommandKey = "/post"; diff --git a/src/GameLogic/PlugIns/ChatCommands/RemoveNpcChatCommand.cs b/src/GameLogic/PlugIns/ChatCommands/RemoveNpcChatCommand.cs index c121e2cd4..b852a96ba 100644 --- a/src/GameLogic/PlugIns/ChatCommands/RemoveNpcChatCommand.cs +++ b/src/GameLogic/PlugIns/ChatCommands/RemoveNpcChatCommand.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// Chat command to remove a npc with a specific id. /// [Guid("34FAAD0A-FCA4-42E2-8F37-CEF48783BD78")] -[PlugIn("Remove npc chat command", "Handles the chat command '/removenpc '.")] +[PlugIn] +[Display(Name = "Remove npc chat command", Description = "Handles the chat command '/removenpc '.")] [ChatCommandHelp(Command, "Removes a NPC with the specified id.", typeof(IdCommandArgs), CharacterStatus.GameMaster)] internal class RemoveNpcChatCommand : ChatCommandPlugInBase { @@ -31,11 +32,11 @@ protected override async ValueTask DoHandleCommandAsync(Player gameMaster, IdCom var monster = gameMaster.ObservingBuckets.SelectMany(b => b).OfType().FirstOrDefault(m => m.Id == arguments.Id); if (monster is null) { - await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.NpcNotFoundById), arguments.Id).ConfigureAwait(false); + await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.NpcNotFoundById), arguments.Id).ConfigureAwait(false); return; } monster.Dispose(); - await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.NpcRemovedById), arguments.Id).ConfigureAwait(false); + await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.NpcRemovedById), arguments.Id).ConfigureAwait(false); } } \ No newline at end of file diff --git a/src/GameLogic/PlugIns/ChatCommands/SetLevelChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/SetLevelChatCommandPlugIn.cs index c0159c8a8..d79ad465f 100644 --- a/src/GameLogic/PlugIns/ChatCommands/SetLevelChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/SetLevelChatCommandPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin which sets a character's level. /// [Guid("4BE779C9-E6B6-47F2-BC23-2E71D82A6C1D")] -[PlugIn("Set level command", "Sets level of a player. Usage: /setlevel (level) (optional:character)")] +[PlugIn] +[Display(Name = "Set level command", Description = "Sets level of a player. Usage: /setlevel (level) (optional:character)")] [ChatCommandHelp(Command, "Sets level of a player. Usage: /setlevel (level) (optional:character)", null)] public class SetLevelChatCommandPlugIn : ChatCommandPlugInBase, IDisabledByDefault { @@ -36,7 +37,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments if (targetPlayer?.SelectedCharacter is null || !targetPlayer.SelectedCharacter.Name.Equals(characterName, StringComparison.OrdinalIgnoreCase)) { - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), characterName).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), characterName).ConfigureAwait(false); return; } } @@ -48,14 +49,14 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments if (arguments is null || arguments.Level < 1 || arguments.Level > targetPlayer.GameContext.Configuration.MaximumLevel) { - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.InvalidCharacterLevel), targetPlayer.GameContext.Configuration.MaximumLevel).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.InvalidCharacterLevel), targetPlayer.GameContext.Configuration.MaximumLevel).ConfigureAwait(false); return; } targetPlayer.Attributes![Stats.Level] = checked(arguments.Level); await targetPlayer.InvokeViewPlugInAsync(p => p.UpdateLevelAsync()).ConfigureAwait(false); await targetPlayer.ForEachWorldObserverAsync(p => p.ShowEffectAsync(targetPlayer, IShowEffectPlugIn.EffectType.LevelUp), true).ConfigureAwait(false); - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.SetLevelResult), arguments.Level).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.SetLevelResult), arguments.Level).ConfigureAwait(false); } /// diff --git a/src/GameLogic/PlugIns/ChatCommands/SetLevelUpPointsChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/SetLevelUpPointsChatCommandPlugIn.cs index c079c24a9..cc9187aef 100644 --- a/src/GameLogic/PlugIns/ChatCommands/SetLevelUpPointsChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/SetLevelUpPointsChatCommandPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin which sets a character's level-up points. /// [Guid("50EF670A-DF7A-4FEE-8E42-7C7A18A68941")] -[PlugIn("Set level up points command", "Sets level up points of a player. Usage: /setleveluppoints (points) (optional:character)")] +[PlugIn] +[Display(Name = "Set level up points command", Description = "Sets level up points of a player. Usage: /setleveluppoints (points) (optional:character)")] [ChatCommandHelp(Command, "Sets level up points of a player. Usage: /setleveluppoints (points) (optional:character)", null)] public class SetLevelUpPointsChatCommandPlugIn : ChatCommandPlugInBase, IDisabledByDefault { @@ -37,7 +38,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments if (targetPlayer?.SelectedCharacter is null || !targetPlayer.SelectedCharacter.Name.Equals(characterName, StringComparison.OrdinalIgnoreCase)) { - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), characterName).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), characterName).ConfigureAwait(false); return; } } @@ -49,13 +50,13 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments if (arguments is null || arguments.LevelUpPoints < 0) { - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.InvalidLevelUpPoints)).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.InvalidLevelUpPoints)).ConfigureAwait(false); return; } targetPlayer.SelectedCharacter.LevelUpPoints = checked(arguments.LevelUpPoints); await targetPlayer.InvokeViewPlugInAsync(p => p.UpdateLevelAsync()).ConfigureAwait(false); - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.SetLevelUpPointsResult), arguments.LevelUpPoints).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.SetLevelUpPointsResult), arguments.LevelUpPoints).ConfigureAwait(false); } /// diff --git a/src/GameLogic/PlugIns/ChatCommands/SetMasterLevelChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/SetMasterLevelChatCommandPlugIn.cs index d72f0a88e..9281a5e28 100644 --- a/src/GameLogic/PlugIns/ChatCommands/SetMasterLevelChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/SetMasterLevelChatCommandPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin which sets a character's master level. /// [Guid("E401CA16-7827-495B-9DD0-EABDFF39901E")] -[PlugIn("Set master level command", "Sets master level of a player. Usage: /setmasterlevel (level) (optional:character)")] +[PlugIn] +[Display(Name = "Set master level command", Description = "Sets master level of a player. Usage: /setmasterlevel (level) (optional:character)")] [ChatCommandHelp(Command, "Sets master level of a player. Usage: /setmasterlevel (level) (optional:character)", null)] public class SetMasterLevelChatCommandPlugIn : ChatCommandPlugInBase, IDisabledByDefault { @@ -36,7 +37,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments if (targetPlayer?.SelectedCharacter is null || !targetPlayer.SelectedCharacter.Name.Equals(characterName, StringComparison.OrdinalIgnoreCase)) { - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), characterName).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), characterName).ConfigureAwait(false); return; } } @@ -48,14 +49,14 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments if (arguments is null || arguments.MasterLevel < 1 || arguments.MasterLevel > targetPlayer.GameContext.Configuration.MaximumMasterLevel) { - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.InvalidCharacterLevel), targetPlayer.GameContext.Configuration.MaximumMasterLevel).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.InvalidCharacterLevel), targetPlayer.GameContext.Configuration.MaximumMasterLevel).ConfigureAwait(false); return; } targetPlayer.Attributes![Stats.MasterLevel] = checked(arguments.MasterLevel); await targetPlayer.InvokeViewPlugInAsync(p => p.UpdateMasterLevelAsync()).ConfigureAwait(false); await targetPlayer.ForEachWorldObserverAsync(p => p.ShowEffectAsync(targetPlayer, IShowEffectPlugIn.EffectType.LevelUp), true).ConfigureAwait(false); - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.SetMasterLevelResult), arguments.MasterLevel).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.SetMasterLevelResult), arguments.MasterLevel).ConfigureAwait(false); } /// diff --git a/src/GameLogic/PlugIns/ChatCommands/SetMasterLevelUpPointsChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/SetMasterLevelUpPointsChatCommandPlugIn.cs index 7d1593d37..a6e7fb502 100644 --- a/src/GameLogic/PlugIns/ChatCommands/SetMasterLevelUpPointsChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/SetMasterLevelUpPointsChatCommandPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin which sets a character's master level-up points. /// [Guid("69AC0B9E-1063-448E-ABD6-C5837A1E8A4B")] -[PlugIn("Set master level up points command", "Sets master level up points of a player. Usage: /setmasterleveluppoints (points) (optional:character)")] +[PlugIn] +[Display(Name = "Set master level up points command", Description = "Sets master level up points of a player. Usage: /setmasterleveluppoints (points) (optional:character)")] [ChatCommandHelp(Command, "Sets master level up points of a player. Usage: /setmasterleveluppoints (points) (optional:character)", null)] public class SetMasterLevelUpPointsChatCommandPlugIn : ChatCommandPlugInBase, IDisabledByDefault { @@ -30,7 +31,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments { if (arguments is null) { - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.InvalidMasterLevelUpPoints)).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.InvalidMasterLevelUpPoints)).ConfigureAwait(false); return; } @@ -41,7 +42,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments if (targetPlayer?.SelectedCharacter is null || !targetPlayer.SelectedCharacter.Name.Equals(characterName, StringComparison.OrdinalIgnoreCase)) { - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), characterName).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), characterName).ConfigureAwait(false); return; } } @@ -53,13 +54,13 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments if (arguments.MasterLevelUpPoints < 0) { - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.InvalidMasterLevelUpPoints)).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.InvalidMasterLevelUpPoints)).ConfigureAwait(false); return; } targetPlayer.SelectedCharacter.MasterLevelUpPoints = checked(arguments.MasterLevelUpPoints); await targetPlayer.InvokeViewPlugInAsync(p => p.UpdateMasterLevelAsync()).ConfigureAwait(false); - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.SetMasterLevelUpPointsResult), arguments.MasterLevelUpPoints).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.SetMasterLevelUpPointsResult), arguments.MasterLevelUpPoints).ConfigureAwait(false); } /// diff --git a/src/GameLogic/PlugIns/ChatCommands/SetMoneyChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/SetMoneyChatCommandPlugIn.cs index cb19b2bac..de9ee0f8f 100644 --- a/src/GameLogic/PlugIns/ChatCommands/SetMoneyChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/SetMoneyChatCommandPlugIn.cs @@ -11,7 +11,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin which sets a character's money. /// [Guid("00AA4F0E-911D-49FE-8D88-114C7496D383")] -[PlugIn("Set money command", "Sets money of a player. Usage: /setmoney (amount) (optional:character)")] +[PlugIn] +[Display(Name = "Set money command", Description = "Sets money of a player. Usage: /setmoney (amount) (optional:character)")] [ChatCommandHelp(Command, "Sets money of a player. Usage: /setmoney (amount) (optional:character)", null)] public class SetMoneyChatCommandPlugIn : ChatCommandPlugInBase, IDisabledByDefault { @@ -34,7 +35,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments if (targetPlayer?.SelectedCharacter is null || !targetPlayer.SelectedCharacter.Name.Equals(characterName, StringComparison.OrdinalIgnoreCase)) { - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), characterName).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), characterName).ConfigureAwait(false); return; } } @@ -51,12 +52,12 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments if (arguments is null || arguments.Amount < 0 || arguments.Amount > maxMoney) { - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.InvalidMoneyAmount), maxMoney).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.InvalidMoneyAmount), maxMoney).ConfigureAwait(false); return; } targetPlayer.Money = checked(arguments.Amount); - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.SetMoneyResult), arguments.Amount).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.SetMoneyResult), arguments.Amount).ConfigureAwait(false); } /// diff --git a/src/GameLogic/PlugIns/ChatCommands/SetResetsChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/SetResetsChatCommandPlugIn.cs index cd212f475..a59a18fc6 100644 --- a/src/GameLogic/PlugIns/ChatCommands/SetResetsChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/SetResetsChatCommandPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin which sets a character's resets. /// [Guid("47A8644C-B6C5-439E-BAB0-C1A7AE72691C")] -[PlugIn("Set resets command", "Sets resets of a player. Usage: /setresets (resets) (optional:character)")] +[PlugIn] +[Display(Name = "Set resets command", Description = "Sets resets of a player. Usage: /setresets (resets) (optional:character)")] [ChatCommandHelp(Command, "Sets resets of a player. Usage: /setresets (resets) (optional:character)", null)] public class SetResetsChatCommandPlugIn : ChatCommandPlugInBase, IDisabledByDefault { @@ -32,7 +33,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments var configuration = player.GameContext.FeaturePlugIns.GetPlugIn()?.Configuration; if (configuration is null) { - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.ResetSystemInactive)).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.ResetSystemInactive)).ConfigureAwait(false); return; } @@ -43,7 +44,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments if (targetPlayer?.SelectedCharacter is null || !targetPlayer.SelectedCharacter.Name.Equals(characterName, StringComparison.OrdinalIgnoreCase)) { - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), characterName).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), characterName).ConfigureAwait(false); return; } } @@ -57,7 +58,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments { if (arguments is null || arguments.Resets < 0) { - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.InvalidResetsAmount)).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.InvalidResetsAmount)).ConfigureAwait(false); return; } } @@ -65,13 +66,13 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments { if (arguments is null || arguments.Resets < 0 || arguments.Resets > configuration.ResetLimit) { - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.InvalidResetsWithLimits), configuration.ResetLimit).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.InvalidResetsWithLimits), configuration.ResetLimit).ConfigureAwait(false); return; } } targetPlayer.Attributes![Stats.Resets] = checked(arguments.Resets); - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.SetResetsResult), arguments.Resets).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.SetResetsResult), arguments.Resets).ConfigureAwait(false); } /// diff --git a/src/GameLogic/PlugIns/ChatCommands/SetStatChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/SetStatChatCommandPlugIn.cs index c526228a4..1342a6914 100644 --- a/src/GameLogic/PlugIns/ChatCommands/SetStatChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/SetStatChatCommandPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin which handles the command to add stat points. /// [Guid("D074E8AB-9D6E-49A4-956F-1F4818188AF1")] -[PlugIn("Set Stat chat command", "Set stat points. Usage: /set (ene|agi|vit|str|cmd) (amount) (optional:character)")] +[PlugIn] +[Display(Name = "Set Stat chat command", Description = "Set stat points. Usage: /set (ene|agi|vit|str|cmd) (amount) (optional:character)")] [ChatCommandHelp(Command, "Set stat points. Usage: /set (ene|agi|vit|str|cmd) (amount) (optional:character)", typeof(Arguments), MinimumStatus)] public class SetStatChatCommandPlugIn : ChatCommandPlugInBase, IDisabledByDefault { @@ -31,44 +32,44 @@ public class SetStatChatCommandPlugIn : ChatCommandPlugInBase protected override async ValueTask DoHandleCommandAsync(Player player, Arguments arguments) { - if (arguments is null) + if (arguments is null) { - return; - } - - var targetPlayer = player; - if (arguments.CharacterName is { } characterName) - { - targetPlayer = player.GameContext.GetPlayerByCharacterName(characterName); - if (targetPlayer?.SelectedCharacter is null || - !targetPlayer.SelectedCharacter.Name.Equals(characterName, StringComparison.OrdinalIgnoreCase)) + return; + } + + var targetPlayer = player; + if (arguments.CharacterName is { } characterName) + { + targetPlayer = player.GameContext.GetPlayerByCharacterName(characterName); + if (targetPlayer?.SelectedCharacter is null || + !targetPlayer.SelectedCharacter.Name.Equals(characterName, StringComparison.OrdinalIgnoreCase)) { - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), characterName).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), characterName).ConfigureAwait(false); return; } - } - - if (targetPlayer.SelectedCharacter is not { } selectedCharacter) - { - return; - } - - var attribute = this.GetAttribute(selectedCharacter, arguments.StatType); - if (attribute.MaximumValue is null && arguments.Amount < 0) - { - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.InvalidStatValue), arguments.StatType).ConfigureAwait(false); - return; } - - if (attribute.MaximumValue < 0 || arguments.Amount > attribute.MaximumValue) + + if (targetPlayer.SelectedCharacter is not { } selectedCharacter) { - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.InvalidStatValueRange), arguments.StatType, attribute.MaximumValue).ConfigureAwait(false); - return; + return; } - - targetPlayer.Attributes![attribute] = arguments.Amount; - await targetPlayer.InvokeViewPlugInAsync(p => p.UpdateCharacterBaseStatsAsync()).ConfigureAwait(false); - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.SetStatResult), arguments.StatType, arguments.Amount, targetPlayer.SelectedCharacter.Name).ConfigureAwait(false); + + var attribute = this.GetAttribute(selectedCharacter, arguments.StatType); + if (attribute.MaximumValue is null && arguments.Amount < 0) + { + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.InvalidStatValue), arguments.StatType).ConfigureAwait(false); + return; + } + + if (attribute.MaximumValue < 0 || arguments.Amount > attribute.MaximumValue) + { + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.InvalidStatValueRange), arguments.StatType, attribute.MaximumValue).ConfigureAwait(false); + return; + } + + targetPlayer.Attributes![attribute] = arguments.Amount; + await targetPlayer.InvokeViewPlugInAsync(p => p.UpdateCharacterBaseStatsAsync()).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.SetStatResult), arguments.StatType, arguments.Amount, targetPlayer.SelectedCharacter.Name).ConfigureAwait(false); } private AttributeDefinition GetAttribute(Character selectedCharacter, string? statType) diff --git a/src/GameLogic/PlugIns/ChatCommands/ShowFireworksEffectChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/ShowFireworksEffectChatCommandPlugIn.cs index 73725b922..e7cc2a1c3 100644 --- a/src/GameLogic/PlugIns/ChatCommands/ShowFireworksEffectChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/ShowFireworksEffectChatCommandPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin which handles fireworks effect commands. /// [Guid("658F7F9D-B8FF-4D52-A835-5B3D658B6B9F")] -[PlugIn("Show fireworks effect chat command", "Handles the chat command '/fireworks '. Shows an fireworks effect at the specified coordinates.")] +[PlugIn] +[Display(Name = "Show fireworks effect chat command", Description = "Handles the chat command '/fireworks '. Shows an fireworks effect at the specified coordinates.")] [ChatCommandHelp(Command, "Shows an fireworks effect at the specified coordinates.", typeof(CoordinatesCommandArgs), CharacterStatus.GameMaster)] public class ShowFireworksEffectChatCommandPlugIn : ChatCommandPlugInBase { diff --git a/src/GameLogic/PlugIns/ChatCommands/ShowNpcIdsChatCommand.cs b/src/GameLogic/PlugIns/ChatCommands/ShowNpcIdsChatCommand.cs index d568866fa..4b653c59b 100644 --- a/src/GameLogic/PlugIns/ChatCommands/ShowNpcIdsChatCommand.cs +++ b/src/GameLogic/PlugIns/ChatCommands/ShowNpcIdsChatCommand.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// Chat command to request the ids of all NPCs in the range of the player. /// [Guid("498D0205-388F-410A-A7C7-49069A64D3A9")] -[PlugIn("Show NPC ids chat command", "Handles the chat command '/showids'.")] +[PlugIn] +[Display(Name = "Show NPC ids chat command", Description = "Handles the chat command '/showids'.")] [ChatCommandHelp(Command, "Shows the IDs of all NPCs in the view range of the game master.", CharacterStatus.GameMaster)] internal sealed class ShowNpcIdsChatCommand : IChatCommandPlugIn { diff --git a/src/GameLogic/PlugIns/ChatCommands/ShowXmasFireworksEffectChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/ShowXmasFireworksEffectChatCommandPlugIn.cs index 51ef355b9..9f818232b 100644 --- a/src/GameLogic/PlugIns/ChatCommands/ShowXmasFireworksEffectChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/ShowXmasFireworksEffectChatCommandPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin which handles xmas fireworks effect commands. /// [Guid("0E23E4CE-6E7B-4F29-92D8-04A1335EC722")] -[PlugIn("Show xmas fireworks effect chat command", "Handles the chat command '/xmasfireworks '. Shows an christmas fireworks effect at the specified coordinates.")] +[PlugIn] +[Display(Name = "Show xmas fireworks effect chat command", Description = "Handles the chat command '/xmasfireworks '. Shows an christmas fireworks effect at the specified coordinates.")] [ChatCommandHelp(Command, "Shows an christmas fireworks effect at the specified coordinates.", typeof(CoordinatesCommandArgs), CharacterStatus.GameMaster)] public class ShowXmasFireworksEffectChatCommandPlugIn : ChatCommandPlugInBase { diff --git a/src/GameLogic/PlugIns/ChatCommands/SkinChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/SkinChatCommandPlugIn.cs index 712114ce6..8a878fbe8 100644 --- a/src/GameLogic/PlugIns/ChatCommands/SkinChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/SkinChatCommandPlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin which handles skin commands. /// [Guid("4735CC2C-9E5D-457A-92CB-9D765F74FDFB")] -[PlugIn("Skin chat command", "Handles the chat command '/skin '. Applies a monster skin to the game masters character.")] +[PlugIn] +[Display(Name = "Skin chat command", Description = "Handles the chat command '/skin '. Applies a monster skin to the game masters character.")] [ChatCommandHelp(Command, "Applies a monster skin to the game masters character.", typeof(SkinChatCommandArgs), CharacterStatus.GameMaster)] public class SkinChatCommandPlugIn : ChatCommandPlugInBase { diff --git a/src/GameLogic/PlugIns/ChatCommands/StartBloodCastleEventChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/StartBloodCastleEventChatCommandPlugIn.cs index 1cf0b5110..3b9fc2b66 100644 --- a/src/GameLogic/PlugIns/ChatCommands/StartBloodCastleEventChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/StartBloodCastleEventChatCommandPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin which handles the startds command. /// [Guid("7177533A-F147-407E-97B0-C4D8E1AC1AF4")] -[PlugIn(nameof(StartBloodCastleEventChatCommandPlugIn), "Handles the chat command '/startbc'. Starts the blood castle event at the next possible time.")] +[PlugIn] +[Display(Name = nameof(StartBloodCastleEventChatCommandPlugIn), Description = "Handles the chat command '/startbc'. Starts the blood castle event at the next possible time.")] [ChatCommandHelp(Command, "Starts the blood castle event at the next possible time.", CharacterStatus.GameMaster)] public class StartBloodCastleEventChatCommandPlugIn : IChatCommandPlugIn { diff --git a/src/GameLogic/PlugIns/ChatCommands/StartChaosCastleEventChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/StartChaosCastleEventChatCommandPlugIn.cs index c4135da0e..dd176759f 100644 --- a/src/GameLogic/PlugIns/ChatCommands/StartChaosCastleEventChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/StartChaosCastleEventChatCommandPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin which handles the startcc command. /// [Guid("A990270E-B9C6-4445-BBA9-56367A90D31D")] -[PlugIn(nameof(StartChaosCastleEventChatCommandPlugIn), "Handles the chat command '/startcc'. Starts the chaos castle event at the next possible time.")] +[PlugIn] +[Display(Name = nameof(StartChaosCastleEventChatCommandPlugIn), Description = "Handles the chat command '/startcc'. Starts the chaos castle event at the next possible time.")] [ChatCommandHelp(Command, "Starts the chaos castle event at the next possible time.", CharacterStatus.GameMaster)] public class StartChaosCastleEventChatCommandPlugIn : IChatCommandPlugIn { diff --git a/src/GameLogic/PlugIns/ChatCommands/StartDevilSquareEventChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/StartDevilSquareEventChatCommandPlugIn.cs index afb06406f..3900954a1 100644 --- a/src/GameLogic/PlugIns/ChatCommands/StartDevilSquareEventChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/StartDevilSquareEventChatCommandPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin which handles the startds command. /// [Guid("3684DC79-D81E-4033-AB2C-537334CF0BB6")] -[PlugIn(nameof(StartDevilSquareEventChatCommandPlugIn), "Handles the chat command '/startds'. Starts the devil square event at the next possible time.")] +[PlugIn] +[Display(Name = nameof(StartDevilSquareEventChatCommandPlugIn), Description = "Handles the chat command '/startds'. Starts the devil square event at the next possible time.")] [ChatCommandHelp(Command, "Starts the devil square event at the next possible time.", CharacterStatus.GameMaster)] public class StartDevilSquareEventChatCommandPlugIn : IChatCommandPlugIn { diff --git a/src/GameLogic/PlugIns/ChatCommands/TeleportChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/TeleportChatCommandPlugIn.cs index cb97459f9..828fb5a65 100644 --- a/src/GameLogic/PlugIns/ChatCommands/TeleportChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/TeleportChatCommandPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin which handles teleport commands. /// [Guid("ABFE2440-E765-4F17-A588-BD9AE3799886")] -[PlugIn("Teleport chat command", "Handles the chat command '/teleport '. Teleports the game master to the specified coordinates.")] +[PlugIn] +[Display(Name = "Teleport chat command", Description = "Handles the chat command '/teleport '. Teleports the game master to the specified coordinates.")] [ChatCommandHelp(Command, "Teleports the game master to the specified coordinates.", typeof(CoordinatesCommandArgs), CharacterStatus.GameMaster)] public class TeleportChatCommandPlugIn : ChatCommandPlugInBase { diff --git a/src/GameLogic/PlugIns/ChatCommands/TraceChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/TraceChatCommandPlugIn.cs index 002c1bed0..635389199 100644 --- a/src/GameLogic/PlugIns/ChatCommands/TraceChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/TraceChatCommandPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin which handles trace commands. /// [Guid("F22C989B-A2A1-4991-B6C2-658337CC19CE")] -[PlugIn("Trace chat command", "Handles the chat command '/trace '. Moves the game master to the character's location.")] +[PlugIn] +[Display(Name = "Trace chat command", Description = "Handles the chat command '/trace '. Moves the game master to the character's location.")] [ChatCommandHelp(Command, "Moves the game master to the character's location.", typeof(TraceChatCommandArgs), CharacterStatus.GameMaster)] public class TraceChatCommandPlugIn : ChatCommandPlugInBase { diff --git a/src/GameLogic/PlugIns/ChatCommands/TrackChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/TrackChatCommandPlugIn.cs index e60bc8e69..6d89eabb1 100644 --- a/src/GameLogic/PlugIns/ChatCommands/TrackChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/TrackChatCommandPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin which handles track commands. /// [Guid("7F12326A-9B84-4A56-A013-8C485D7B2EF6")] -[PlugIn("Track chat command", "Handles the chat command '/track '. Moves the player to the game masters location.")] +[PlugIn] +[Display(Name = "Track chat command", Description = "Handles the chat command '/track '. Moves the player to the game masters location.")] [ChatCommandHelp(Command, "Moves the player to the game masters location.", typeof(TraceChatCommandArgs), CharacterStatus.GameMaster)] public class TrackChatCommandPlugIn : ChatCommandPlugInBase { diff --git a/src/GameLogic/PlugIns/ChatCommands/UnBanAccChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/UnBanAccChatCommandPlugIn.cs index 510ea454c..047f83919 100644 --- a/src/GameLogic/PlugIns/ChatCommands/UnBanAccChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/UnBanAccChatCommandPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin which handles banacc commands. /// [Guid("FCBC9CC0-3C8F-45E2-96DF-9C55BE30C5D9")] -[PlugIn("Unban Account command", "Handles the chat command '/unbanacc '. Unbans an account from the game.")] +[PlugIn] +[Display(Name = "Unban Account command", Description = "Handles the chat command '/unbanacc '. Unbans an account from the game.")] [ChatCommandHelp(Command, "Unbans an account from the game.", typeof(UnBanAccChatCommandArgs), CharacterStatus.GameMaster)] public class UnBanAccChatCommandPlugIn : ChatCommandPlugInBase { @@ -29,6 +30,6 @@ protected override async ValueTask DoHandleCommandAsync(Player gameMaster, UnBan { await this.ChangeAccountStateByLoginNameAsync(gameMaster, arguments.AccountName ?? string.Empty, AccountState.Normal).ConfigureAwait(false); - await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.UnbanAccountResult), this.Key, arguments.AccountName).ConfigureAwait(false); + await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.UnbanAccountResult), this.Key, arguments.AccountName).ConfigureAwait(false); } } \ No newline at end of file diff --git a/src/GameLogic/PlugIns/ChatCommands/UnBanCharChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/UnBanCharChatCommandPlugIn.cs index 8421b96f4..4b49347b2 100644 --- a/src/GameLogic/PlugIns/ChatCommands/UnBanCharChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/UnBanCharChatCommandPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin which handles unbanchar commands. /// [Guid("2830B01B-57A4-4925-AB6B-242C242B96C9")] -[PlugIn("Unban Character command", "Handles the chat command '/unbanchar '. Unbans the account of a character from the game.")] +[PlugIn] +[Display(Name = "Unban Character command", Description = "Handles the chat command '/unbanchar '. Unbans the account of a character from the game.")] [ChatCommandHelp(Command, "Unbans the account of a character from the game.", typeof(UnBanCharChatCommandArgs), CharacterStatus.GameMaster)] public class UnBanCharChatCommandPlugIn : ChatCommandPlugInBase { @@ -29,6 +30,6 @@ protected override async ValueTask DoHandleCommandAsync(Player gameMaster, BanCh { await this.ChangeAccountStateByCharacterNameAsync(gameMaster, arguments.CharacterName ?? string.Empty, AccountState.Normal).ConfigureAwait(false); - await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.UnbanAccountOfCharacterResult), this.Key, arguments.CharacterName).ConfigureAwait(false); + await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.UnbanAccountOfCharacterResult), this.Key, arguments.CharacterName).ConfigureAwait(false); } } \ No newline at end of file diff --git a/src/GameLogic/PlugIns/ChatCommands/UnHideChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/UnHideChatCommandPlugIn.cs index ea5757ab1..6548858b2 100644 --- a/src/GameLogic/PlugIns/ChatCommands/UnHideChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/UnHideChatCommandPlugIn.cs @@ -11,7 +11,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// A chat command plugin which handles unhide commands. /// [Guid("0F0ADAC6-88C7-4EC0-94A2-A289173DEDA7")] -[PlugIn("Hide command", "Handles the chat command '/unhide'. Unhides the own player from others.")] +[PlugIn] +[Display(Name = "Hide command", Description = "Handles the chat command '/unhide'. Unhides the own player from others.")] [ChatCommandHelp(Command, "Unhides the own player from others.", CharacterStatus.GameMaster)] public class UnHideChatCommandPlugIn : IChatCommandPlugIn { diff --git a/src/GameLogic/PlugIns/ChatCommands/WalkMonsterChatCommand.cs b/src/GameLogic/PlugIns/ChatCommands/WalkMonsterChatCommand.cs index 89e7a1d00..ff7e82d1e 100644 --- a/src/GameLogic/PlugIns/ChatCommands/WalkMonsterChatCommand.cs +++ b/src/GameLogic/PlugIns/ChatCommands/WalkMonsterChatCommand.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands; /// Chat command to let a monster walk to specific coordinates. /// [Guid("1852FED5-8184-431E-8C5F-5131356D348F")] -[PlugIn("Walk remote monster chat command", "Handles the chat command '/walkmonster '. Walks a previously created monster which can be remote controlled by the GM.")] +[PlugIn] +[Display(Name = "Walk remote monster chat command", Description = "Handles the chat command '/walkmonster '. Walks a previously created monster which can be remote controlled by the GM.")] [ChatCommandHelp(Command, "Walks a previously created monster which can be remote controlled by the game master.", typeof(MoveMonsterCommandArgs), CharacterStatus.GameMaster)] internal class WalkMonsterChatCommand : ChatCommandPlugInBase { @@ -31,7 +32,7 @@ protected override async ValueTask DoHandleCommandAsync(Player gameMaster, MoveM var monster = gameMaster.ObservingBuckets.SelectMany(b => b).OfType().FirstOrDefault(m => m.Id == arguments.Id); if (monster is null) { - await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.MonsterNotFoundById), arguments.Id).ConfigureAwait(false); + await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.MonsterNotFoundById), arguments.Id).ConfigureAwait(false); return; } diff --git a/src/GameLogic/PlugIns/GuildWarKillScorePlugIn.cs b/src/GameLogic/PlugIns/GuildWarKillScorePlugIn.cs index d9698df81..fb36dbd5d 100644 --- a/src/GameLogic/PlugIns/GuildWarKillScorePlugIn.cs +++ b/src/GameLogic/PlugIns/GuildWarKillScorePlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns; /// /// This plugin increases the score of the soccer result, if a kill occurred. /// -[PlugIn("Guild soccer kill score", "This plugin increases the score of the soccer result, if a kill occurred.")] +[PlugIn] +[Display(Name = "Guild soccer kill score", Description = "This plugin increases the score of the soccer result, if a kill occurred.")] [Guid("2D4E16CD-B7FF-4ED3-B4B1-4AABD04BAD71")] public class GuildWarKillScorePlugIn : IAttackableGotKilledPlugIn { diff --git a/src/GameLogic/PlugIns/InvasionEvents/GoldenInvasionPlugIn.cs b/src/GameLogic/PlugIns/InvasionEvents/GoldenInvasionPlugIn.cs index 3978433de..e2e1bcefa 100644 --- a/src/GameLogic/PlugIns/InvasionEvents/GoldenInvasionPlugIn.cs +++ b/src/GameLogic/PlugIns/InvasionEvents/GoldenInvasionPlugIn.cs @@ -10,7 +10,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.InvasionEvents; /// /// This plugin enables Golden Invasion feature. /// -[PlugIn(nameof(GoldenInvasionPlugIn), "Handle Golden Invasion event")] +[PlugIn] +[Display(Name = nameof(GoldenInvasionPlugIn), Description = "Handle Golden Invasion event")] [Guid("06D18A9E-2919-4C17-9DBC-6E4F7756495C")] public class GoldenInvasionPlugIn : BaseInvasionPlugIn, ISupportDefaultCustomConfiguration { diff --git a/src/GameLogic/PlugIns/InvasionEvents/RedDragonInvasionPlugIn.cs b/src/GameLogic/PlugIns/InvasionEvents/RedDragonInvasionPlugIn.cs index af225e623..4d1cb86f3 100644 --- a/src/GameLogic/PlugIns/InvasionEvents/RedDragonInvasionPlugIn.cs +++ b/src/GameLogic/PlugIns/InvasionEvents/RedDragonInvasionPlugIn.cs @@ -10,7 +10,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.InvasionEvents; /// /// This plugin enables Red Dragon Invasion feature. /// -[PlugIn(nameof(RedDragonInvasionPlugIn), "Handle red dragon invasion event")] +[PlugIn] +[Display(Name = nameof(RedDragonInvasionPlugIn), Description = "Handle red dragon invasion event")] [Guid("548A76CC-242C-441C-BC9D-6C22745A2D72")] public class RedDragonInvasionPlugIn : BaseInvasionPlugIn, ISupportDefaultCustomConfiguration { diff --git a/src/GameLogic/PlugIns/PeriodicSaveProgressPlugIn.cs b/src/GameLogic/PlugIns/PeriodicSaveProgressPlugIn.cs index 50d83d70b..0d010915c 100644 --- a/src/GameLogic/PlugIns/PeriodicSaveProgressPlugIn.cs +++ b/src/GameLogic/PlugIns/PeriodicSaveProgressPlugIn.cs @@ -10,7 +10,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns; /// /// Saves the progress of players periodically when their status is 'EnteredWorld'. /// -[PlugIn(nameof(PeriodicSaveProgressPlugIn), "Saves the progress of players periodically when their status is 'EnteredWorld'.")] +[PlugIn] +[Display(Name = nameof(PeriodicSaveProgressPlugIn), Description = "Saves the progress of players periodically when their status is 'EnteredWorld'.")] [Guid("CEBBD5BD-B0DF-4768-816D-AF8DF78888B2")] public class PeriodicSaveProgressPlugIn : IPeriodicTaskPlugIn, ISupportCustomConfiguration, ISupportDefaultCustomConfiguration { diff --git a/src/GameLogic/PlugIns/PeriodicTasks/BloodCastleStartPlugIn.cs b/src/GameLogic/PlugIns/PeriodicTasks/BloodCastleStartPlugIn.cs index 8c7d48be2..a8ab9f62b 100644 --- a/src/GameLogic/PlugIns/PeriodicTasks/BloodCastleStartPlugIn.cs +++ b/src/GameLogic/PlugIns/PeriodicTasks/BloodCastleStartPlugIn.cs @@ -11,7 +11,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.PeriodicTasks; /// /// This plugin enables the start of the blood castle. /// -[PlugIn(nameof(BloodCastleStartPlugIn), "Blood Castle event")] +[PlugIn] +[Display(Name = nameof(BloodCastleStartPlugIn), Description = "Blood Castle event")] [Guid("95E68C14-AD87-4B3C-AF46-45B8F1C3BC2A")] public sealed class BloodCastleStartPlugIn : MiniGameStartBasePlugIn { diff --git a/src/GameLogic/PlugIns/PeriodicTasks/ChaosCastleStartPlugIn.cs b/src/GameLogic/PlugIns/PeriodicTasks/ChaosCastleStartPlugIn.cs index 253374905..e4ea581c7 100644 --- a/src/GameLogic/PlugIns/PeriodicTasks/ChaosCastleStartPlugIn.cs +++ b/src/GameLogic/PlugIns/PeriodicTasks/ChaosCastleStartPlugIn.cs @@ -11,7 +11,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.PeriodicTasks; /// /// This plugin enables the start of the chaos castle. /// -[PlugIn(nameof(ChaosCastleStartPlugIn), "Chaos Castle event")] +[PlugIn] +[Display(Name = nameof(ChaosCastleStartPlugIn), Description = "Chaos Castle event")] [Guid("3AD96A70-ED24-4979-80B8-169E461E548F")] public sealed class ChaosCastleStartPlugIn : MiniGameStartBasePlugIn { diff --git a/src/GameLogic/PlugIns/PeriodicTasks/DevilSquareStartPlugIn.cs b/src/GameLogic/PlugIns/PeriodicTasks/DevilSquareStartPlugIn.cs index 2523725d8..97bba18c0 100644 --- a/src/GameLogic/PlugIns/PeriodicTasks/DevilSquareStartPlugIn.cs +++ b/src/GameLogic/PlugIns/PeriodicTasks/DevilSquareStartPlugIn.cs @@ -11,7 +11,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.PeriodicTasks; /// /// This plugin enables the start of the devil square. /// -[PlugIn(nameof(DevilSquareStartPlugIn), "Devil Square event")] +[PlugIn] +[Display(Name = nameof(DevilSquareStartPlugIn), Description = "Devil Square event")] [Guid("61C61A58-211E-4D6A-9EA1-D25E0C4A47C5")] public sealed class DevilSquareStartPlugIn : MiniGameStartBasePlugIn { diff --git a/src/GameLogic/PlugIns/PeriodicTasks/HappyHourPlugIn.cs b/src/GameLogic/PlugIns/PeriodicTasks/HappyHourPlugIn.cs index 4ecd074f6..c9293cb6a 100644 --- a/src/GameLogic/PlugIns/PeriodicTasks/HappyHourPlugIn.cs +++ b/src/GameLogic/PlugIns/PeriodicTasks/HappyHourPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.PeriodicTasks; /// /// This plugin enables Happy Hour feature. /// -[PlugIn(nameof(HappyHourPlugIn), "Handle Happy Hour event")] +[PlugIn] +[Display(Name = nameof(HappyHourPlugIn), Description = "Handle Happy Hour event")] [Guid("6542E452-9780-45B8-85AE-4036422E9A6E")] public class HappyHourPlugIn : PeriodicTaskBasePlugIn, ISupportDefaultCustomConfiguration, IPlayerStateChangedPlugIn { diff --git a/src/GameLogic/PlugIns/PlayerLosesExperienceAfterDeathPlugIn.cs b/src/GameLogic/PlugIns/PlayerLosesExperienceAfterDeathPlugIn.cs index 23caec0d6..95472947f 100644 --- a/src/GameLogic/PlugIns/PlayerLosesExperienceAfterDeathPlugIn.cs +++ b/src/GameLogic/PlugIns/PlayerLosesExperienceAfterDeathPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns; /// /// This plugin decreases the experience after the player has been killed by a monster. /// -[PlugIn("Player exp loss after death", "This plugin decreases the experience after the player has been killed by a monster.")] +[PlugIn] +[Display(Name = "Player exp loss after death", Description = "This plugin decreases the experience after the player has been killed by a monster.")] [Guid("CA9EACAC-1BD4-44BA-9187-C9F2CEF4E254")] public class PlayerLosesExperienceAfterDeathPlugIn : IAttackableGotKilledPlugIn, ISupportCustomConfiguration, ISupportDefaultCustomConfiguration { diff --git a/src/GameLogic/PlugIns/PlayerLosesMoneyAfterDeathPlugIn.cs b/src/GameLogic/PlugIns/PlayerLosesMoneyAfterDeathPlugIn.cs index 1f7abaa3c..9ead7e4d5 100644 --- a/src/GameLogic/PlugIns/PlayerLosesMoneyAfterDeathPlugIn.cs +++ b/src/GameLogic/PlugIns/PlayerLosesMoneyAfterDeathPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns; /// /// This plugin decreases the money after the player has been killed by a monster. /// -[PlugIn("Player money loss after death", "This plugin decreases the money (zen) after the player has been killed by a monster.")] +[PlugIn] +[Display(Name = "Player money loss after death", Description = "This plugin decreases the money (zen) after the player has been killed by a monster.")] [Guid("E3A4D8DD-C017-4A44-853B-569B1F12C350")] public class PlayerLosesMoneyAfterDeathPlugIn : IAttackableGotKilledPlugIn, ISupportCustomConfiguration, ISupportDefaultCustomConfiguration { diff --git a/src/GameLogic/PlugIns/QuestMonsterKillCountPlugIn.cs b/src/GameLogic/PlugIns/QuestMonsterKillCountPlugIn.cs index e71849bf5..e1632163c 100644 --- a/src/GameLogic/PlugIns/QuestMonsterKillCountPlugIn.cs +++ b/src/GameLogic/PlugIns/QuestMonsterKillCountPlugIn.cs @@ -4,7 +4,7 @@ namespace MUnique.OpenMU.GameLogic.PlugIns; -using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations; using System.Runtime.InteropServices; using MUnique.OpenMU.GameLogic.NPC; using MUnique.OpenMU.PlugIns; @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns; /// /// This plugin increases the monster kill count of the quest state of active quests. /// -[PlugIn("Count killed quest monsters", "This plugin increases the monster kill count of the quest state of active quests.")] +[PlugIn] +[Display(Name = "Count killed quest monsters", Description = "This plugin increases the monster kill count of the quest state of active quests.")] [Guid("416C2231-D7FE-414A-9321-26622E262EF5")] public class QuestMonsterKillCountPlugIn : IAttackableGotKilledPlugIn, ISupportCustomConfiguration, ISupportDefaultCustomConfiguration { @@ -62,8 +63,8 @@ public async ValueTask AttackableGotKilledAsync(IAttackable killed, IAttacker? k requirementState.KillCount, killRequirement.MinimumNumber); - // TODO: Localize - await player.ShowBlueMessageAsync(message).ConfigureAwait(false); + // TODO: Localize + await player.ShowBlueMessageAsync(message).ConfigureAwait(false); } } } diff --git a/src/GameLogic/PlugIns/SelfDefensePlugIn.cs b/src/GameLogic/PlugIns/SelfDefensePlugIn.cs index 3a7c7da51..564a185bd 100644 --- a/src/GameLogic/PlugIns/SelfDefensePlugIn.cs +++ b/src/GameLogic/PlugIns/SelfDefensePlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns; /// /// Updates the state of the active self defenses on every second and every hit. /// -[PlugIn(nameof(SelfDefensePlugIn), "Updates the state of the self defense system.")] +[PlugIn] +[Display(Name = nameof(SelfDefensePlugIn), Description = "Updates the state of the self defense system.")] [Guid("BA4753EA-4D2B-488C-BB6B-4A127E28630A")] public class SelfDefensePlugIn : IPeriodicTaskPlugIn, IAttackableGotHitPlugIn, ISupportCustomConfiguration, ISupportDefaultCustomConfiguration { diff --git a/src/GameLogic/PlugIns/ShowMessageToAllWhenPlayerEnteredWorldPlugIn.cs b/src/GameLogic/PlugIns/ShowMessageToAllWhenPlayerEnteredWorldPlugIn.cs index 5f11db353..8af42e88c 100644 --- a/src/GameLogic/PlugIns/ShowMessageToAllWhenPlayerEnteredWorldPlugIn.cs +++ b/src/GameLogic/PlugIns/ShowMessageToAllWhenPlayerEnteredWorldPlugIn.cs @@ -11,7 +11,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns; /// /// A plugin which shows a message to all players when a player enters the game. /// -[PlugIn(nameof(ShowMessageToAllWhenPlayerEnteredWorldPlugIn), "Shows a message to all players when a player enters the game.")] +[PlugIn] +[Display(Name = nameof(ShowMessageToAllWhenPlayerEnteredWorldPlugIn), Description = "Shows a message to all players when a player enters the game.")] [Guid("12784A17-1085-408E-99CE-5233FDA2B177")] public class ShowMessageToAllWhenPlayerEnteredWorldPlugIn : IPlayerStateChangedPlugIn { @@ -23,6 +24,6 @@ public async ValueTask PlayerStateChangedAsync(Player player, State previousStat return; } - await player.GameContext.ShowGlobalLocalizedMessageAsync(MessageType.BlueNormal, nameof(PlayerMessage.PlayerEnteredGameMessage), selectedCharacter.Name).ConfigureAwait(false); + await player.GameContext.ShowGlobalLocalizedMessageAsync(MessageType.BlueNormal, nameof(PlayerMessage.PlayerEnteredGameMessage), selectedCharacter.Name).ConfigureAwait(false); } } \ No newline at end of file diff --git a/src/GameLogic/PlugIns/SymbolOfKundunStackedPlugIn.cs b/src/GameLogic/PlugIns/SymbolOfKundunStackedPlugIn.cs index bb46c9402..061ce3578 100644 --- a/src/GameLogic/PlugIns/SymbolOfKundunStackedPlugIn.cs +++ b/src/GameLogic/PlugIns/SymbolOfKundunStackedPlugIn.cs @@ -10,7 +10,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns; /// /// This plugin transforms a stack of symbol of kundun into a lost map. /// -[PlugIn(nameof(SymbolOfKundunStackedPlugIn), "This plugin transforms a stack of symbol of kundun into a lost map.")] +[PlugIn] +[Display(Name = nameof(SymbolOfKundunStackedPlugIn), Description = "This plugin transforms a stack of symbol of kundun into a lost map.")] [Guid("F07A9CED-F43E-4824-9587-F5C3C3187A13")] public sealed class SymbolOfKundunStackedPlugIn : IItemStackedPlugIn { diff --git a/src/GameLogic/PlugIns/UnlockCharacterClass/UnlockDarkLordAtLevel250.cs b/src/GameLogic/PlugIns/UnlockCharacterClass/UnlockDarkLordAtLevel250.cs index f3426aa5f..19b66ac0d 100644 --- a/src/GameLogic/PlugIns/UnlockCharacterClass/UnlockDarkLordAtLevel250.cs +++ b/src/GameLogic/PlugIns/UnlockCharacterClass/UnlockDarkLordAtLevel250.cs @@ -10,7 +10,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.UnlockCharacterClass; /// /// Unlocks the Dark Lord character class as soon as the first character of an account reaches level 250. /// -[PlugIn(nameof(UnlockDarkLordAtLevel250), "Unlocks the Dark Lord character class as soon as the first character of an account reaches level 250.")] +[PlugIn] +[Display(Name = nameof(UnlockDarkLordAtLevel250), Description = "Unlocks the Dark Lord character class as soon as the first character of an account reaches level 250.")] [Guid("2DFFD75A-765D-4FA7-93DD-9890CA0F04F0")] public class UnlockDarkLordAtLevel250 : UnlockCharacterAtLevelBase { diff --git a/src/GameLogic/PlugIns/UnlockCharacterClass/UnlockMagicGladiatorAtLevel220.cs b/src/GameLogic/PlugIns/UnlockCharacterClass/UnlockMagicGladiatorAtLevel220.cs index 75123bbe7..e9758e6eb 100644 --- a/src/GameLogic/PlugIns/UnlockCharacterClass/UnlockMagicGladiatorAtLevel220.cs +++ b/src/GameLogic/PlugIns/UnlockCharacterClass/UnlockMagicGladiatorAtLevel220.cs @@ -10,7 +10,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.UnlockCharacterClass; /// /// Unlocks the Magic Gladiator character class as soon as the first character of an account reaches level 220. /// -[PlugIn(nameof(UnlockMagicGladiatorAtLevel220), "Unlocks the Magic Gladiator character class as soon as the first character of an account reaches level 220.")] +[PlugIn] +[Display(Name = nameof(UnlockMagicGladiatorAtLevel220), Description = "Unlocks the Magic Gladiator character class as soon as the first character of an account reaches level 220.")] [Guid("8C765FF3-B574-41C6-9151-ABC10D3FD959")] public class UnlockMagicGladiatorAtLevel220 : UnlockCharacterAtLevelBase { diff --git a/src/GameLogic/PlugIns/UnlockCharacterClass/UnlockRageFighterAtLevel150.cs b/src/GameLogic/PlugIns/UnlockCharacterClass/UnlockRageFighterAtLevel150.cs index e2a402f0d..cb14f6f3d 100644 --- a/src/GameLogic/PlugIns/UnlockCharacterClass/UnlockRageFighterAtLevel150.cs +++ b/src/GameLogic/PlugIns/UnlockCharacterClass/UnlockRageFighterAtLevel150.cs @@ -11,7 +11,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.UnlockCharacterClass; /// Unlocks the Rage Fighter character class as soon as the first character of an account reaches level 150. /// TODO: Add configuration for the level and change name; remove the "AtLevel150" suffix. /// -[PlugIn(nameof(UnlockRageFighterAtLevel150), "Unlocks the Rage Fighter character class as soon as the first character of an account reaches level 150.")] +[PlugIn] +[Display(Name = nameof(UnlockRageFighterAtLevel150), Description = "Unlocks the Rage Fighter character class as soon as the first character of an account reaches level 150.")] [Guid("2DFFD752-7652-4FA2-93D2-9890CA0F04F2")] public class UnlockRageFighterAtLevel150 : UnlockCharacterAtLevelBase { diff --git a/src/GameLogic/PlugIns/UnlockCharacterClass/UnlockSummonerAtLevel1.cs b/src/GameLogic/PlugIns/UnlockCharacterClass/UnlockSummonerAtLevel1.cs index 6b657ec34..07aaa6869 100644 --- a/src/GameLogic/PlugIns/UnlockCharacterClass/UnlockSummonerAtLevel1.cs +++ b/src/GameLogic/PlugIns/UnlockCharacterClass/UnlockSummonerAtLevel1.cs @@ -11,7 +11,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.UnlockCharacterClass; /// Unlocks the Summoner character class as soon as the first character of an account reaches level 1. /// TODO: Add configuration for the level and change name; remove the "AtLevel1" suffix. /// -[PlugIn(nameof(UnlockSummonerAtLevel1), "Unlocks the Summoner character class as soon as the first character of an account reaches level 1.")] +[PlugIn] +[Display(Name = nameof(UnlockSummonerAtLevel1), Description = "Unlocks the Summoner character class as soon as the first character of an account reaches level 1.")] [Guid("2DFFD751-7651-4FA1-93D1-9890CA0F04F1")] public class UnlockSummonerAtLevel1 : UnlockCharacterAtLevelBase { diff --git a/src/GameLogic/PlugIns/UpdateIsInSafezoneAfterPlayerMoved.cs b/src/GameLogic/PlugIns/UpdateIsInSafezoneAfterPlayerMoved.cs index bf3b2c52e..d62e0a705 100644 --- a/src/GameLogic/PlugIns/UpdateIsInSafezoneAfterPlayerMoved.cs +++ b/src/GameLogic/PlugIns/UpdateIsInSafezoneAfterPlayerMoved.cs @@ -11,7 +11,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns; /// /// Updates the . For example, this activates the automatic health and shield recover. /// -[PlugIn(nameof(UpdateIsInSafezoneAfterPlayerMoved), "Updates the attribute if a player is located in the safezone. For example, this activates the automatic health and shield recover.")] +[PlugIn] +[Display(Name = nameof(UpdateIsInSafezoneAfterPlayerMoved), Description = "Updates the attribute if a player is located in the safezone. For example, this activates the automatic health and shield recover.")] [Guid("396617CA-954A-45A1-A6DB-1AA65309A03D")] public class UpdateIsInSafezoneAfterPlayerMoved : IAttackableMovedPlugIn { diff --git a/src/GameLogic/PlugIns/WanderingMerchants/WanderingMerchantsPlugIn.cs b/src/GameLogic/PlugIns/WanderingMerchants/WanderingMerchantsPlugIn.cs index 27feae3c0..e332aeb41 100644 --- a/src/GameLogic/PlugIns/WanderingMerchants/WanderingMerchantsPlugIn.cs +++ b/src/GameLogic/PlugIns/WanderingMerchants/WanderingMerchantsPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.WanderingMerchants; /// /// This plugins spawns and moves the wandering merchants. /// -[PlugIn(nameof(WanderingMerchantsPlugIn), "This plugins spawns and moves the wandering merchants.")] +[PlugIn] +[Display(Name = nameof(WanderingMerchantsPlugIn), Description = "This plugins spawns and moves the wandering merchants.")] [Guid("8B2CD316-C4B0-452F-8C7D-CE696356D437")] public class WanderingMerchantsPlugIn : PeriodicTaskBasePlugIn, ISupportDefaultCustomConfiguration { diff --git a/src/GameLogic/PlugIns/WeatherUpdatePlugIn.cs b/src/GameLogic/PlugIns/WeatherUpdatePlugIn.cs index 48153bf7b..c66e9e966 100644 --- a/src/GameLogic/PlugIns/WeatherUpdatePlugIn.cs +++ b/src/GameLogic/PlugIns/WeatherUpdatePlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameLogic.PlugIns; /// /// Updates the state of the weather of each hosted map in a random way and notifies players which enter a map about the current weather. /// -[PlugIn(nameof(WeatherUpdatePlugIn), "Updates the state of the weather of each hosted map in a random way.")] +[PlugIn] +[Display(Name = nameof(WeatherUpdatePlugIn), Description = "Updates the state of the weather of each hosted map in a random way.")] [Guid("3E702A15-653A-48EF-899C-4CDB2239A90C")] public class WeatherUpdatePlugIn : IPeriodicTaskPlugIn, IObjectAddedToMapPlugIn { diff --git a/src/GameLogic/Resets/GatekeeperNpcPlugin.cs b/src/GameLogic/Resets/GatekeeperNpcPlugin.cs index 03e163a77..6bc98ca96 100644 --- a/src/GameLogic/Resets/GatekeeperNpcPlugin.cs +++ b/src/GameLogic/Resets/GatekeeperNpcPlugin.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameLogic.Resets; /// Handles the gatekeeper npc in the Barracks of Balgass. /// [Guid("1B7BCA14-3124-4550-94B4-3FFCEE1FD55A")] -[PlugIn(nameof(GatekeeperNpcPlugin), "Handle Gatekeeper NPC Request")] +[PlugIn] +[Display(Name = nameof(GatekeeperNpcPlugin), Description = "Handle Gatekeeper NPC Request")] public class GatekeeperNpcPlugin : IPlayerTalkToNpcPlugIn { /// diff --git a/src/GameLogic/Resets/ResetCharacterNpcPlugin.cs b/src/GameLogic/Resets/ResetCharacterNpcPlugin.cs index 0457b5881..dbd2ee058 100644 --- a/src/GameLogic/Resets/ResetCharacterNpcPlugin.cs +++ b/src/GameLogic/Resets/ResetCharacterNpcPlugin.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameLogic.Resets; /// Action to reset a character. /// [Guid("08953BE6-DABF-49CC-A500-FDB9DC2C4D80")] -[PlugIn(nameof(ResetCharacterNpcPlugin), "Handle Reset Character NPC Request")] +[PlugIn] +[Display(Name = nameof(ResetCharacterNpcPlugin), Description = "Handle Reset Character NPC Request")] public class ResetCharacterNpcPlugin : IPlayerTalkToNpcPlugIn { /// diff --git a/src/GameLogic/Resets/ResetChatCommandPlugIn.cs b/src/GameLogic/Resets/ResetChatCommandPlugIn.cs index 905436e29..82dc8bc92 100644 --- a/src/GameLogic/Resets/ResetChatCommandPlugIn.cs +++ b/src/GameLogic/Resets/ResetChatCommandPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameLogic.Resets; /// /// [Guid("90B35404-AADE-4F22-B5D2-4CD59B8BB4C8")] -[PlugIn("Reset chat command", "Handles the chat command '/reset'.")] +[PlugIn] +[Display(Name = "Reset chat command", Description = "Handles the chat command '/reset'.")] [ChatCommandHelp(Command, "Does a character reset, if available.", null)] public class ResetChatCommandPlugIn : IChatCommandPlugIn { diff --git a/src/GameLogic/Resets/ResetFeaturePlugIn.cs b/src/GameLogic/Resets/ResetFeaturePlugIn.cs index c899af266..81167dd2e 100644 --- a/src/GameLogic/Resets/ResetFeaturePlugIn.cs +++ b/src/GameLogic/Resets/ResetFeaturePlugIn.cs @@ -10,7 +10,8 @@ namespace MUnique.OpenMU.GameLogic.Resets; /// /// Feature plugin which provides the configuration for the reset feature. /// -[PlugIn("Reset Feature", "Provides configuration for the reset feature.")] +[PlugIn] +[Display(Name = "Reset Feature", Description = "Provides configuration for the reset feature.")] [Guid("6A9D585D-79D7-4674-B6EA-7E87392FA501")] public class ResetFeaturePlugIn : IFeaturePlugIn, ISupportCustomConfiguration, ISupportDefaultCustomConfiguration, IDisabledByDefault { diff --git a/src/GameServer/MessageHandler/AnimationHandlerPlugIn.cs b/src/GameServer/MessageHandler/AnimationHandlerPlugIn.cs index 70821e99c..502c9e05f 100644 --- a/src/GameServer/MessageHandler/AnimationHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/AnimationHandlerPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler; /// /// Handler for animation packets. /// -[PlugIn("AnimationHandlerPlugIn", "Handler for animation packets.")] +[PlugIn] +[Display(Name = "AnimationHandlerPlugIn", Description = "Handler for animation packets.")] [Guid("5cf7fa95-5ca2-4e14-bb08-4b64250a8ee8")] internal class AnimationHandlerPlugIn : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/AreaSkillAttackHandlerPlugIn.cs b/src/GameServer/MessageHandler/AreaSkillAttackHandlerPlugIn.cs index 3f9315d41..cf65f7f7c 100644 --- a/src/GameServer/MessageHandler/AreaSkillAttackHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/AreaSkillAttackHandlerPlugIn.cs @@ -16,7 +16,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler; /// /// Handler for area skill attack packets. /// -[PlugIn(nameof(AreaSkillAttackHandlerPlugIn), "Handler for area skill attack packets.")] +[PlugIn] +[Display(Name = nameof(AreaSkillAttackHandlerPlugIn), Description = "Handler for area skill attack packets.")] [Guid("9681bed4-70e8-4017-b27c-5eee164dd7b0")] [MinimumClient(1, 0, ClientLanguage.Invariant)] internal class AreaSkillAttackHandlerPlugIn : IPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/AreaSkillAttackHandlerPlugIn075.cs b/src/GameServer/MessageHandler/AreaSkillAttackHandlerPlugIn075.cs index 4bd435b5a..3a10efcd5 100644 --- a/src/GameServer/MessageHandler/AreaSkillAttackHandlerPlugIn075.cs +++ b/src/GameServer/MessageHandler/AreaSkillAttackHandlerPlugIn075.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler; /// /// Handler for area skill attack packets. /// -[PlugIn(nameof(AreaSkillAttackHandlerPlugIn075), "Handler for area skill attack packets for version 0.75")] +[PlugIn] +[Display(Name = nameof(AreaSkillAttackHandlerPlugIn075), Description = "Handler for area skill attack packets for version 0.75")] [Guid("A03821B8-2A8E-4A1D-A45D-C92C7621DC8A")] internal class AreaSkillAttackHandlerPlugIn075 : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/AreaSkillAttackHandlerPlugIn095.cs b/src/GameServer/MessageHandler/AreaSkillAttackHandlerPlugIn095.cs index 3da60c8ee..a720ee7f2 100644 --- a/src/GameServer/MessageHandler/AreaSkillAttackHandlerPlugIn095.cs +++ b/src/GameServer/MessageHandler/AreaSkillAttackHandlerPlugIn095.cs @@ -16,7 +16,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler; /// /// Handler for area skill attack packets. /// -[PlugIn(nameof(AreaSkillAttackHandlerPlugIn095), "Handler for area skill attack packets for version 0.95")] +[PlugIn] +[Display(Name = nameof(AreaSkillAttackHandlerPlugIn095), Description = "Handler for area skill attack packets for version 0.95")] [Guid("2C293304-713C-4D43-9C24-6A308DD9686C")] [MinimumClient(0, 95, ClientLanguage.Invariant)] internal class AreaSkillAttackHandlerPlugIn095 : IPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/AreaSkillHitHandlerPlugIn.cs b/src/GameServer/MessageHandler/AreaSkillHitHandlerPlugIn.cs index a8e4e1038..6613ebc54 100644 --- a/src/GameServer/MessageHandler/AreaSkillHitHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/AreaSkillHitHandlerPlugIn.cs @@ -16,7 +16,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler; /// /// Handler for area skill hit packets. /// -[PlugIn("AreaSkillHitHandlerPlugIn", "Handler for area skill hit packets.")] +[PlugIn] +[Display(Name = "AreaSkillHitHandlerPlugIn", Description = "Handler for area skill hit packets.")] [Guid("2f5848fd-a1bd-488b-84b3-fd88bdef5ac8")] [MinimumClient(1, 0, ClientLanguage.Invariant)] internal class AreaSkillHitHandlerPlugIn : IPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/AreaSkillHitHandlerPlugIn075.cs b/src/GameServer/MessageHandler/AreaSkillHitHandlerPlugIn075.cs index 9706c7a3d..8fe2cc2e8 100644 --- a/src/GameServer/MessageHandler/AreaSkillHitHandlerPlugIn075.cs +++ b/src/GameServer/MessageHandler/AreaSkillHitHandlerPlugIn075.cs @@ -16,7 +16,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler; /// /// TODO: It's usually required to perform a before, so this check has to be implemented. /// -[PlugIn(nameof(AreaSkillHitHandlerPlugIn075), "Handler for area skill hit packets.")] +[PlugIn] +[Display(Name = nameof(AreaSkillHitHandlerPlugIn075), Description = "Handler for area skill hit packets.")] [Guid("D08CA02F-C413-4527-B79C-87F3C4641B60")] internal class AreaSkillHitHandlerPlugIn075 : AreaSkillHitHandlerMultiTargetPlugInBase, IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/AreaSkillHitHandlerPlugIn095.cs b/src/GameServer/MessageHandler/AreaSkillHitHandlerPlugIn095.cs index 1d80c9149..df6566015 100644 --- a/src/GameServer/MessageHandler/AreaSkillHitHandlerPlugIn095.cs +++ b/src/GameServer/MessageHandler/AreaSkillHitHandlerPlugIn095.cs @@ -17,7 +17,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler; /// /// TODO: It's usually required to perform a before, so this check has to be implemented. /// -[PlugIn(nameof(AreaSkillHitHandlerPlugIn095), "Handler for area skill hit packets.")] +[PlugIn] +[Display(Name = nameof(AreaSkillHitHandlerPlugIn095), Description = "Handler for area skill hit packets.")] [Guid("71C2E116-D1B2-4F07-9A3B-41CEA1975108")] [MinimumClient(0, 95, ClientLanguage.Invariant)] internal class AreaSkillHitHandlerPlugIn095 : AreaSkillHitHandlerMultiTargetPlugInBase, IPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/Character/CharacterAddMasterPointPacketHandlerPlugIn.cs b/src/GameServer/MessageHandler/Character/CharacterAddMasterPointPacketHandlerPlugIn.cs index a6a7b03df..561db30d5 100644 --- a/src/GameServer/MessageHandler/Character/CharacterAddMasterPointPacketHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Character/CharacterAddMasterPointPacketHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Character; /// /// Sub packet handler for master skill point add requests. /// -[PlugIn("Character - Add Master Skill Points", "Packet handler for character master skill point adding (0xF3, 0x52 identifier).")] +[PlugIn] +[Display(Name = "Character - Add Master Skill Points", Description = "Packet handler for character master skill point adding (0xF3, 0x52 identifier).")] [Guid("9F39C1FB-26F7-460F-A21B-C4DFEA234E66")] [BelongsToGroup(CharacterGroupHandlerPlugIn.GroupKey)] internal class CharacterAddMasterPointPacketHandlerPlugIn : ISubPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/Character/CharacterClientReadyPacketHandlerPlugIn.cs b/src/GameServer/MessageHandler/Character/CharacterClientReadyPacketHandlerPlugIn.cs index 8de381c33..ed1b095b6 100644 --- a/src/GameServer/MessageHandler/Character/CharacterClientReadyPacketHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Character/CharacterClientReadyPacketHandlerPlugIn.cs @@ -11,7 +11,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Character; /// /// Sub packet handler for 'client ready' packets which are sent by the client after map changes. /// -[PlugIn("Character - Client ready", "Packet handler for 'client ready' packets (0xF3, 0x12 identifier) which are sent after map changes.")] +[PlugIn] +[Display(Name = "Character - Client ready", Description = "Packet handler for 'client ready' packets (0xF3, 0x12 identifier) which are sent after map changes.")] [Guid("8FB0AD6B-B3A6-4BF7-865B-EB4DF3C2A52F")] [BelongsToGroup(CharacterGroupHandlerPlugIn.GroupKey)] internal class CharacterClientReadyPacketHandlerPlugIn : ISubPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/Character/CharacterCreatePacketHandlerPlugIn.cs b/src/GameServer/MessageHandler/Character/CharacterCreatePacketHandlerPlugIn.cs index a292925be..2a468a3e6 100644 --- a/src/GameServer/MessageHandler/Character/CharacterCreatePacketHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Character/CharacterCreatePacketHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Character; /// /// Packet handler for character creation packets (0xF3, 0x01 identifier). /// -[PlugIn("Character - Create", "Packet handler for character creation packets (0xF3, 0x01 identifier).")] +[PlugIn] +[Display(Name = "Character - Create", Description = "Packet handler for character creation packets (0xF3, 0x01 identifier).")] [Guid("A26831DE-4D67-44CD-9434-12BDC4B07F47")] [BelongsToGroup(CharacterGroupHandlerPlugIn.GroupKey)] internal class CharacterCreatePacketHandlerPlugIn : ISubPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/Character/CharacterDeletePacketHandlerPlugIn.cs b/src/GameServer/MessageHandler/Character/CharacterDeletePacketHandlerPlugIn.cs index 2534654a6..98ee40cfc 100644 --- a/src/GameServer/MessageHandler/Character/CharacterDeletePacketHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Character/CharacterDeletePacketHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Character; /// /// Packet handler for character delete packets (0xF3, 0x02 identifier). /// -[PlugIn("Character - Delete", "Packet handler for character delete packets (0xF3, 0x02 identifier).")] +[PlugIn] +[Display(Name = "Character - Delete", Description = "Packet handler for character delete packets (0xF3, 0x02 identifier).")] [Guid("5391D003-E244-42E8-AF30-33CB0654B66A")] [BelongsToGroup(CharacterGroupHandlerPlugIn.GroupKey)] internal class CharacterDeletePacketHandlerPlugIn : ISubPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/Character/CharacterFocusPacketHandlerPlugIn.cs b/src/GameServer/MessageHandler/Character/CharacterFocusPacketHandlerPlugIn.cs index 6246bc3a3..8c9c37d26 100644 --- a/src/GameServer/MessageHandler/Character/CharacterFocusPacketHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Character/CharacterFocusPacketHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Character; /// /// Packet handler for character focus packets (0xF3, 0x15 identifier). /// -[PlugIn("Character - Focus", "Packet handler for character focus packets (0xF3, 0x15 identifier).")] +[PlugIn] +[Display(Name = "Character - Focus", Description = "Packet handler for character focus packets (0xF3, 0x15 identifier).")] [Guid("8687C77F-E26C-4510-AD85-E5F51305DE2A")] [BelongsToGroup(CharacterGroupHandlerPlugIn.GroupKey)] internal class CharacterFocusPacketHandlerPlugIn : ISubPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/Character/CharacterGroupHandlerPlugIn.cs b/src/GameServer/MessageHandler/Character/CharacterGroupHandlerPlugIn.cs index 52367d246..109ccfa7b 100644 --- a/src/GameServer/MessageHandler/Character/CharacterGroupHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Character/CharacterGroupHandlerPlugIn.cs @@ -11,7 +11,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Character; /// /// Packet handler for character packets (0xF3 identifier). /// -[PlugIn("Character Packet Handler", "Packet handler for character packets (0xF3 identifier).")] +[PlugIn] +[Display(Name = "Character Packet Handler", Description = "Packet handler for character packets (0xF3 identifier).")] [Guid("dce31462-c8a6-4d9a-a8b8-54a50cf16aff")] internal class CharacterGroupHandlerPlugIn : GroupPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/Character/CharacterKeyConfigurationPacketHandlerPlugIn.cs b/src/GameServer/MessageHandler/Character/CharacterKeyConfigurationPacketHandlerPlugIn.cs index adb4eda15..87c78542e 100644 --- a/src/GameServer/MessageHandler/Character/CharacterKeyConfigurationPacketHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Character/CharacterKeyConfigurationPacketHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Character; /// /// Packet handler for character key configuration packets (0xF3, 0x30 identifier). /// -[PlugIn("Character - Key Configuration", "Packet handler for character key configuration packets (0xF3, 0x30 identifier).")] +[PlugIn] +[Display(Name = "Character - Key Configuration", Description = "Packet handler for character key configuration packets (0xF3, 0x30 identifier).")] [Guid("91A6A9A8-5885-498E-A6BE-625F55A811A4")] [BelongsToGroup(CharacterGroupHandlerPlugIn.GroupKey)] internal class CharacterKeyConfigurationPacketHandlerPlugIn : ISubPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/Character/CharacterListRequestPacketHandlerPlugIn.cs b/src/GameServer/MessageHandler/Character/CharacterListRequestPacketHandlerPlugIn.cs index 3dae7c2cb..7fb39ef3c 100644 --- a/src/GameServer/MessageHandler/Character/CharacterListRequestPacketHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Character/CharacterListRequestPacketHandlerPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Character; /// /// Packet handler for character list request packets (0xF3, 0x00 identifier). /// -[PlugIn("Character - Request List", "Packet handler for character list request packets (0xF3, 0x00 identifier).")] +[PlugIn] +[Display(Name = "Character - Request List", Description = "Packet handler for character list request packets (0xF3, 0x00 identifier).")] [Guid("EBB70865-EF6B-4178-A84A-F94015900812")] [BelongsToGroup(CharacterGroupHandlerPlugIn.GroupKey)] internal class CharacterListRequestPacketHandlerPlugIn : ISubPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/Character/CharacterSelectPacketHandlerPlugIn.cs b/src/GameServer/MessageHandler/Character/CharacterSelectPacketHandlerPlugIn.cs index 3031e7936..d71fe6e2d 100644 --- a/src/GameServer/MessageHandler/Character/CharacterSelectPacketHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Character/CharacterSelectPacketHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Character; /// /// Packet handler for character select packets (0xF3, 0x03 identifier). /// -[PlugIn("Character - Select", "Packet handler for character select packets (0xF3, 0x03 identifier).")] +[PlugIn] +[Display(Name = "Character - Select", Description = "Packet handler for character select packets (0xF3, 0x03 identifier).")] [Guid("82638A51-6C8E-46DF-9B4D-BF976D49A4A6")] [BelongsToGroup(CharacterGroupHandlerPlugIn.GroupKey)] internal class CharacterSelectPacketHandlerPlugIn : ISubPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/Character/CharacterStatIncreasePacketHandlerPlugIn.cs b/src/GameServer/MessageHandler/Character/CharacterStatIncreasePacketHandlerPlugIn.cs index dff845ce4..30eed3b36 100644 --- a/src/GameServer/MessageHandler/Character/CharacterStatIncreasePacketHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Character/CharacterStatIncreasePacketHandlerPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Character; /// /// Packet handler for character stat increase packets (0xF3, 0x06 identifier). /// -[PlugIn("Character - Stat increase ", "Packet handler for character stat increase packets (0xF3, 0x06 identifier).")] +[PlugIn] +[Display(Name = "Character - Stat increase ", Description = "Packet handler for character stat increase packets (0xF3, 0x06 identifier).")] [Guid("5DC06689-B2DD-4CA2-8F93-97FB1198BA70")] [BelongsToGroup(CharacterGroupHandlerPlugIn.GroupKey)] internal class CharacterStatIncreasePacketHandlerPlugIn : ISubPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/CharacterMoveHandlerPlugIn.cs b/src/GameServer/MessageHandler/CharacterMoveHandlerPlugIn.cs index ebe214f67..c4ce290f2 100644 --- a/src/GameServer/MessageHandler/CharacterMoveHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/CharacterMoveHandlerPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler; /// /// Packet handler for move packets. /// -[PlugIn("Character move handler (ENG)", "Packet handler for walk packets.")] +[PlugIn] +[Display(Name = "Character move handler (ENG)", Description = "Packet handler for walk packets.")] [Guid("d3b04177-131f-4bf5-a228-1f10d22d54f2")] [MinimumClient(0, 97, ClientLanguage.English)] internal class CharacterMoveHandlerPlugIn : CharacterMoveBaseHandlerPlugIn diff --git a/src/GameServer/MessageHandler/CharacterMoveHandlerPlugIn075.cs b/src/GameServer/MessageHandler/CharacterMoveHandlerPlugIn075.cs index 7436e81b2..687b8d758 100644 --- a/src/GameServer/MessageHandler/CharacterMoveHandlerPlugIn075.cs +++ b/src/GameServer/MessageHandler/CharacterMoveHandlerPlugIn075.cs @@ -11,7 +11,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler; /// /// Packet handler for move packets. /// -[PlugIn("Character move handler (0.75)", "Packet handler for move packets, version 0.75.")] +[PlugIn] +[Display(Name = "Character move handler (0.75)", Description = "Packet handler for move packets, version 0.75.")] [Guid("C1F633E1-3A15-45C6-9235-7B78520D3CC5")] [MinimumClient(0, 75, ClientLanguage.Invariant)] [MaximumClient(0, 89, ClientLanguage.Invariant)] diff --git a/src/GameServer/MessageHandler/CharacterWalkHandlerPlugIn.cs b/src/GameServer/MessageHandler/CharacterWalkHandlerPlugIn.cs index 351231243..c96b0bd43 100644 --- a/src/GameServer/MessageHandler/CharacterWalkHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/CharacterWalkHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler; /// /// Packet handler for walk packets. /// -[PlugIn("Character walk handler", "Packet handler for walk packets.")] +[PlugIn] +[Display(Name = "Character walk handler", Description = "Packet handler for walk packets.")] [Guid("19056DEB-4321-4D25-8615-EE49A453DF03")] [MinimumClient(1, 0, ClientLanguage.Invariant)] internal class CharacterWalkHandlerPlugIn : CharacterWalkBaseHandlerPlugIn diff --git a/src/GameServer/MessageHandler/CharacterWalkHandlerPlugIn075.cs b/src/GameServer/MessageHandler/CharacterWalkHandlerPlugIn075.cs index ffac172c0..4832d0a6a 100644 --- a/src/GameServer/MessageHandler/CharacterWalkHandlerPlugIn075.cs +++ b/src/GameServer/MessageHandler/CharacterWalkHandlerPlugIn075.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler; /// /// Packet handler for walk packets. /// -[PlugIn("Character walk handler", "Packet handler for walk packets.")] +[PlugIn] +[Display(Name = "Character walk handler", Description = "Packet handler for walk packets.")] [Guid("9FD41038-39D9-4D3D-A1DD-A87DB6388248")] [MinimumClient(0, 75, ClientLanguage.Invariant)] internal class CharacterWalkHandlerPlugIn075 : CharacterWalkBaseHandlerPlugIn diff --git a/src/GameServer/MessageHandler/ChatMessageHandlerPlugIn.cs b/src/GameServer/MessageHandler/ChatMessageHandlerPlugIn.cs index 2268cb308..980f0b062 100644 --- a/src/GameServer/MessageHandler/ChatMessageHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/ChatMessageHandlerPlugIn.cs @@ -11,7 +11,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler; /// /// Packet handler for chat messages. /// -[PlugIn("Chat Message Handler", "Packet handler for chat messages.")] +[PlugIn] +[Display(Name = "Chat Message Handler", Description = "Packet handler for chat messages.")] [Guid("EDECCEC6-9DC7-499F-8658-EAF94498BDEE")] internal class ChatMessageHandlerPlugIn : ChatMessageBaseHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/CloseNpcDialogHandlerPlugIn.cs b/src/GameServer/MessageHandler/CloseNpcDialogHandlerPlugIn.cs index 72f00bb77..8bd1bccda 100644 --- a/src/GameServer/MessageHandler/CloseNpcDialogHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/CloseNpcDialogHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler; /// /// Packet handler for close npc packets. /// -[PlugIn("CloseNpcDialogHandlerPlugIn", "Packet handler for close npc packets.")] +[PlugIn] +[Display(Name = "CloseNpcDialogHandlerPlugIn", Description = "Packet handler for close npc packets.")] [Guid("ecb920e3-eca7-4f40-a453-bdee67e1dabf")] internal class CloseNpcDialogHandlerPlugIn : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/CraftingDialogCloseRequestHandlerPlugIn.cs b/src/GameServer/MessageHandler/CraftingDialogCloseRequestHandlerPlugIn.cs index 513c9b82a..073d25ea0 100644 --- a/src/GameServer/MessageHandler/CraftingDialogCloseRequestHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/CraftingDialogCloseRequestHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler; /// /// Handler for chaos mix packets. /// -[PlugIn(nameof(CraftingDialogCloseRequestHandlerPlugIn), "Handler for packets which should close the crafting dialog (Chaos Machine).")] +[PlugIn] +[Display(Name = nameof(CraftingDialogCloseRequestHandlerPlugIn), Description = "Handler for packets which should close the crafting dialog (Chaos Machine).")] [Guid("1857513c-d09c-4e03-8bf4-f4ead19ea60f")] internal class CraftingDialogCloseRequestHandlerPlugIn : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/Duel/DuelChannelJoinRequestHandlerPlugIn.cs b/src/GameServer/MessageHandler/Duel/DuelChannelJoinRequestHandlerPlugIn.cs index ddaaee03e..991039caf 100644 --- a/src/GameServer/MessageHandler/Duel/DuelChannelJoinRequestHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Duel/DuelChannelJoinRequestHandlerPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Duel; /// /// Handler for duel channel join request packets (new duel system), which is sent by a spectator. /// -[PlugIn(nameof(DuelChannelJoinRequestHandlerPlugIn), "Handler for duel channel join request packets (new duel system), which is sent by a spectator.")] +[PlugIn] +[Display(Name = nameof(DuelChannelJoinRequestHandlerPlugIn), Description = "Handler for duel channel join request packets (new duel system), which is sent by a spectator.")] [Guid("6A4DB859-A06E-4AA9-9E85-AAC712265492")] [MinimumClient(4, 0, ClientLanguage.Invariant)] [BelongsToGroup(DuelGroupHandlerPlugIn.GroupKey)] diff --git a/src/GameServer/MessageHandler/Duel/DuelChannelQuitRequestHandlerPlugIn.cs b/src/GameServer/MessageHandler/Duel/DuelChannelQuitRequestHandlerPlugIn.cs index aa862a8ed..bf2c92ebd 100644 --- a/src/GameServer/MessageHandler/Duel/DuelChannelQuitRequestHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Duel/DuelChannelQuitRequestHandlerPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Duel; /// /// Handler for duel channel quit request packets (new duel system), which is sent by a spectator. /// -[PlugIn(nameof(DuelChannelQuitRequestHandlerPlugIn), "Handler for duel channel quit request packets (new duel system), which is sent by a spectator.")] +[PlugIn] +[Display(Name = nameof(DuelChannelQuitRequestHandlerPlugIn), Description = "Handler for duel channel quit request packets (new duel system), which is sent by a spectator.")] [Guid("47E7FBBD-F5FE-41D1-8086-934D4DE86828")] [MinimumClient(4, 0, ClientLanguage.Invariant)] [BelongsToGroup(DuelGroupHandlerPlugIn.GroupKey)] diff --git a/src/GameServer/MessageHandler/Duel/DuelGroupHandlerPlugIn.cs b/src/GameServer/MessageHandler/Duel/DuelGroupHandlerPlugIn.cs index 8a59bb2c9..b6860dada 100644 --- a/src/GameServer/MessageHandler/Duel/DuelGroupHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Duel/DuelGroupHandlerPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Duel; /// /// Packet handler for duel start packets (0xAA identifier). /// -[PlugIn(nameof(DuelGroupHandlerPlugIn), "Packet handler for duel packets (new system).")] +[PlugIn] +[Display(Name = nameof(DuelGroupHandlerPlugIn), Description = "Packet handler for duel packets (new system).")] [Guid("88A8E1DB-C3EC-45A0-98F9-E9DA6F17373C")] [MinimumClient(4, 0, ClientLanguage.Invariant)] internal class DuelGroupHandlerPlugIn : GroupPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/Duel/DuelStartRequestHandlerPlugIn.cs b/src/GameServer/MessageHandler/Duel/DuelStartRequestHandlerPlugIn.cs index 906017495..f5c41fc7d 100644 --- a/src/GameServer/MessageHandler/Duel/DuelStartRequestHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Duel/DuelStartRequestHandlerPlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Duel; /// /// Handler for duel start request packets (new duel system). /// -[PlugIn(nameof(DuelStartRequestHandlerPlugIn), "Handler for duel start request packets (new duel system).")] +[PlugIn] +[Display(Name = nameof(DuelStartRequestHandlerPlugIn), Description = "Handler for duel start request packets (new duel system).")] [Guid("300D44EF-3AFD-43C3-9817-AE9B023C25CC")] [MinimumClient(4, 0, ClientLanguage.Invariant)] [BelongsToGroup(DuelGroupHandlerPlugIn.GroupKey)] diff --git a/src/GameServer/MessageHandler/Duel/DuelStartResponseHandlerPlugIn.cs b/src/GameServer/MessageHandler/Duel/DuelStartResponseHandlerPlugIn.cs index c0091ea39..a432beade 100644 --- a/src/GameServer/MessageHandler/Duel/DuelStartResponseHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Duel/DuelStartResponseHandlerPlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Duel; /// /// Handler for duel start response packets (new duel system). /// -[PlugIn(nameof(DuelStartResponseHandlerPlugIn), "Handler for duel start response packets (new duel system).")] +[PlugIn] +[Display(Name = nameof(DuelStartResponseHandlerPlugIn), Description = "Handler for duel start response packets (new duel system).")] [Guid("C2A7FD08-3F93-467E-AE8B-13F97B7F7888")] [MinimumClient(4, 0, ClientLanguage.Invariant)] [BelongsToGroup(DuelGroupHandlerPlugIn.GroupKey)] diff --git a/src/GameServer/MessageHandler/Duel/DuelStopResponseHandlerPlugIn.cs b/src/GameServer/MessageHandler/Duel/DuelStopResponseHandlerPlugIn.cs index 4d1cd84d2..2a645cf06 100644 --- a/src/GameServer/MessageHandler/Duel/DuelStopResponseHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Duel/DuelStopResponseHandlerPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Duel; /// /// Handler for duel stop request packets (new duel system). /// -[PlugIn(nameof(DuelStopResponseHandlerPlugIn), "Handler for duel stop request packets (new duel system).")] +[PlugIn] +[Display(Name = nameof(DuelStopResponseHandlerPlugIn), Description = "Handler for duel stop request packets (new duel system).")] [Guid("98787A41-4729-4DC8-A00F-B06CC7207598")] [MinimumClient(4, 0, ClientLanguage.Invariant)] [BelongsToGroup(DuelGroupHandlerPlugIn.GroupKey)] diff --git a/src/GameServer/MessageHandler/EnterOnGatekeeperHandlerPlugIn.cs b/src/GameServer/MessageHandler/EnterOnGatekeeperHandlerPlugIn.cs index 06ae4cb5d..48e588f26 100644 --- a/src/GameServer/MessageHandler/EnterOnGatekeeperHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/EnterOnGatekeeperHandlerPlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler; /// Handler for packets. /// Called when: A player is running the quest "Into the 'Darkness' Zone" (nr. 6), talking to the gatekeeper npc in 'Barracks of Balgass'. /// -[PlugIn(nameof(EnterOnGatekeeperHandlerPlugIn), "Handler for EnterOnGatekeeperRequest packets.")] +[PlugIn] +[Display(Name = nameof(EnterOnGatekeeperHandlerPlugIn), Description = "Handler for EnterOnGatekeeperRequest packets.")] [Guid("9133CB87-6776-48B8-987B-93806531B60C")] [MinimumClient(3, 0, ClientLanguage.Invariant)] [BelongsToGroup(NpcActionGroupHandlerPlugIn.GroupKey)] diff --git a/src/GameServer/MessageHandler/EnterOnWerewolfHandlerPlugIn.cs b/src/GameServer/MessageHandler/EnterOnWerewolfHandlerPlugIn.cs index 2ef2511a7..68dd2c82f 100644 --- a/src/GameServer/MessageHandler/EnterOnWerewolfHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/EnterOnWerewolfHandlerPlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler; /// Handler for packets. /// Called when: A player is running the quest "Infiltrate The Barracks of Balgass" (nr. 5), talking to the Werewolf npc in Crywolf. /// -[PlugIn(nameof(EnterOnWerewolfHandlerPlugIn), "Handler for EnterOnWerewolfRequest packets.")] +[PlugIn] +[Display(Name = nameof(EnterOnWerewolfHandlerPlugIn), Description = "Handler for EnterOnWerewolfRequest packets.")] [Guid("3ECA37DE-2D8E-4617-8A44-B1A616B7C74C")] [MinimumClient(3, 0, ClientLanguage.Invariant)] [BelongsToGroup(NpcActionGroupHandlerPlugIn.GroupKey)] diff --git a/src/GameServer/MessageHandler/Guild/CancelGuildCreationHandlerPlugIn.cs b/src/GameServer/MessageHandler/Guild/CancelGuildCreationHandlerPlugIn.cs index f1a9d41ce..f755f83fd 100644 --- a/src/GameServer/MessageHandler/Guild/CancelGuildCreationHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Guild/CancelGuildCreationHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Guild; /// /// Handler for guild master answer packets. /// -[PlugIn(nameof(CancelGuildCreationHandlerPlugIn), "Handler for CancelGuildCreation packets.")] +[PlugIn] +[Display(Name = nameof(CancelGuildCreationHandlerPlugIn), Description = "Handler for CancelGuildCreation packets.")] [Guid("CDB87F7F-24FC-42E1-B375-9EAAEAAC0F8C")] internal class CancelGuildCreationHandlerPlugIn : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/Guild/GuildCreateHandlerPlugIn.cs b/src/GameServer/MessageHandler/Guild/GuildCreateHandlerPlugIn.cs index 60bca18ae..312d53a51 100644 --- a/src/GameServer/MessageHandler/Guild/GuildCreateHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Guild/GuildCreateHandlerPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Guild; /// /// Handler for guild create packets. /// -[PlugIn(nameof(GuildCreateHandlerPlugIn), "Handler for guild create packets.")] +[PlugIn] +[Display(Name = nameof(GuildCreateHandlerPlugIn), Description = "Handler for guild create packets.")] [Guid("0aae71c1-72df-47d6-af88-cddc5d5c7311")] [MinimumClient(1, 0, ClientLanguage.Invariant)] internal class GuildCreateHandlerPlugIn : IPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/Guild/GuildCreateHandlerPlugIn075.cs b/src/GameServer/MessageHandler/Guild/GuildCreateHandlerPlugIn075.cs index e47381a79..94a666dfe 100644 --- a/src/GameServer/MessageHandler/Guild/GuildCreateHandlerPlugIn075.cs +++ b/src/GameServer/MessageHandler/Guild/GuildCreateHandlerPlugIn075.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Guild; /// /// Handler for guild create packets for version 0.75. /// -[PlugIn(nameof(GuildCreateHandlerPlugIn075), "Handler for guild create packets.")] +[PlugIn] +[Display(Name = nameof(GuildCreateHandlerPlugIn075), Description = "Handler for guild create packets.")] [Guid("6605E425-F1D5-44AA-864D-EA42B25BB17F")] internal class GuildCreateHandlerPlugIn075 : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/Guild/GuildInfoRequestHandlerPlugIn.cs b/src/GameServer/MessageHandler/Guild/GuildInfoRequestHandlerPlugIn.cs index 3d70eb5bb..0e4003e21 100644 --- a/src/GameServer/MessageHandler/Guild/GuildInfoRequestHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Guild/GuildInfoRequestHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Guild; /// /// Handler for guild info request packets. /// -[PlugIn("GuildInfoRequestHandlerPlugIn", "Handler for guild info request packets.")] +[PlugIn] +[Display(Name = "GuildInfoRequestHandlerPlugIn", Description = "Handler for guild info request packets.")] [Guid("cfea6fcb-0cf4-4c11-8730-3d25ec08b6b0")] internal class GuildInfoRequestHandlerPlugIn : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/Guild/GuildKickPlayerHandlerPlugIn.cs b/src/GameServer/MessageHandler/Guild/GuildKickPlayerHandlerPlugIn.cs index 08c9f179c..195a6036e 100644 --- a/src/GameServer/MessageHandler/Guild/GuildKickPlayerHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Guild/GuildKickPlayerHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Guild; /// /// Handler for guild player kick packets. /// -[PlugIn("GuildKickPlayerHandlerPlugIn", "Handler for guild player kick packets.")] +[PlugIn] +[Display(Name = "GuildKickPlayerHandlerPlugIn", Description = "Handler for guild player kick packets.")] [Guid("ddc7e221-c3a9-47c3-881e-dc59beecc03e")] internal class GuildKickPlayerHandlerPlugIn : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/Guild/GuildListRequestHandlerPlugIn.cs b/src/GameServer/MessageHandler/Guild/GuildListRequestHandlerPlugIn.cs index cd340e482..7fe3107e8 100644 --- a/src/GameServer/MessageHandler/Guild/GuildListRequestHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Guild/GuildListRequestHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Guild; /// /// Handler for guild list request packets. /// -[PlugIn("GuildListRequestHandlerPlugIn", "Handler for guild list request packets.")] +[PlugIn] +[Display(Name = "GuildListRequestHandlerPlugIn", Description = "Handler for guild list request packets.")] [Guid("cf021a55-8ac7-45e4-a1c2-b61eadea9099")] internal class GuildListRequestHandlerPlugIn : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/Guild/GuildMasterAnswerHandlerPlugIn.cs b/src/GameServer/MessageHandler/Guild/GuildMasterAnswerHandlerPlugIn.cs index f87e1d778..efaae53fb 100644 --- a/src/GameServer/MessageHandler/Guild/GuildMasterAnswerHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Guild/GuildMasterAnswerHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Guild; /// /// Handler for guild master answer packets. /// -[PlugIn("GuildMasterAnswerHandlerPlugIn", "Handler for guild master answer packets.")] +[PlugIn] +[Display(Name = "GuildMasterAnswerHandlerPlugIn", Description = "Handler for guild master answer packets.")] [Guid("3715c03e-9c77-4e43-9f6b-c1db3a2c3233")] internal class GuildMasterAnswerHandlerPlugIn : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/Guild/GuildRequestAnswerHandlerPlugIn.cs b/src/GameServer/MessageHandler/Guild/GuildRequestAnswerHandlerPlugIn.cs index 3eb4f31d0..72867c70e 100644 --- a/src/GameServer/MessageHandler/Guild/GuildRequestAnswerHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Guild/GuildRequestAnswerHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Guild; /// /// Handler for guild request answer packets. /// -[PlugIn("GuildRequestAnswerHandlerPlugIn", "Handler for guild request answer packets.")] +[PlugIn] +[Display(Name = "GuildRequestAnswerHandlerPlugIn", Description = "Handler for guild request answer packets.")] [Guid("30828257-ec3a-4b99-981d-ec105fc5e82e")] internal class GuildRequestAnswerHandlerPlugIn : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/Guild/GuildRequestHandlerPlugIn.cs b/src/GameServer/MessageHandler/Guild/GuildRequestHandlerPlugIn.cs index 4af3bbc57..7bc0da2d8 100644 --- a/src/GameServer/MessageHandler/Guild/GuildRequestHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Guild/GuildRequestHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Guild; /// /// Handler for guild requests. /// -[PlugIn("GuildRequestHandlerPlugIn", "Handler for guild requests.")] +[PlugIn] +[Display(Name = "GuildRequestHandlerPlugIn", Description = "Handler for guild requests.")] [Guid("733b8b1d-7e39-4c5a-b134-d1aac2e33216")] internal class GuildRequestHandlerPlugIn : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/Guild/GuildWarResponseHandlerPlugIn.cs b/src/GameServer/MessageHandler/Guild/GuildWarResponseHandlerPlugIn.cs index 4ef832d30..20483e31d 100644 --- a/src/GameServer/MessageHandler/Guild/GuildWarResponseHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Guild/GuildWarResponseHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Guild; /// /// Handler for guild master answer packets. /// -[PlugIn(nameof(GuildWarResponseHandlerPlugIn), "Handler for guild war response packets.")] +[PlugIn] +[Display(Name = nameof(GuildWarResponseHandlerPlugIn), Description = "Handler for guild war response packets.")] [Guid("50A96257-CD60-420F-A051-9022804241C0")] internal class GuildWarResponseHandlerPlugIn : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/HitHandlerPlugIn.cs b/src/GameServer/MessageHandler/HitHandlerPlugIn.cs index bf8a98b9e..6021f5a82 100644 --- a/src/GameServer/MessageHandler/HitHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/HitHandlerPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler; /// /// Handler for hit packets. /// -[PlugIn("HitHandlerPlugIn", "Handler for hit packets.")] +[PlugIn] +[Display(Name = "HitHandlerPlugIn", Description = "Handler for hit packets.")] [Guid("698b8db9-472a-42dd-bdfe-f6b4ba45595e")] [MinimumClient(1, 0, ClientLanguage.English)] internal class HitHandlerPlugIn : HitHandlerPlugInBase diff --git a/src/GameServer/MessageHandler/HitHandlerPlugIn075.cs b/src/GameServer/MessageHandler/HitHandlerPlugIn075.cs index f59d947fe..353e5e779 100644 --- a/src/GameServer/MessageHandler/HitHandlerPlugIn075.cs +++ b/src/GameServer/MessageHandler/HitHandlerPlugIn075.cs @@ -10,7 +10,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler; /// /// Handler for hit packets for version 0.75. /// -[PlugIn("HitHandlerPlugIn 0.75", "Handler for hit packets.")] +[PlugIn] +[Display(Name = "HitHandlerPlugIn 0.75", Description = "Handler for hit packets.")] [Guid("8C904AEB-1A8C-456D-9BC1-8CE44B8E3794")] internal class HitHandlerPlugIn075 : HitHandlerPlugInBase { diff --git a/src/GameServer/MessageHandler/Items/BuyNpcItemHandlerPlugIn.cs b/src/GameServer/MessageHandler/Items/BuyNpcItemHandlerPlugIn.cs index daf7c5b6f..f53f8a5bc 100644 --- a/src/GameServer/MessageHandler/Items/BuyNpcItemHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Items/BuyNpcItemHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Items; /// /// Handler for npc item buy requests. /// -[PlugIn("BuyNpcItemHandlerPlugIn", "Handler for npc item buy requests.")] +[PlugIn] +[Display(Name = "BuyNpcItemHandlerPlugIn", Description = "Handler for npc item buy requests.")] [Guid("7c7a0944-341b-4cdf-a9b2-010c0c95fa41")] internal class BuyNpcItemHandlerPlugIn : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/Items/ChaosMixHandlerPlugIn.cs b/src/GameServer/MessageHandler/Items/ChaosMixHandlerPlugIn.cs index c6ad0db67..732c5dc34 100644 --- a/src/GameServer/MessageHandler/Items/ChaosMixHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Items/ChaosMixHandlerPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Items; /// /// Handler for chaos mix packets. /// -[PlugIn(nameof(ChaosMixHandlerPlugIn), "Handler for chaos mix packets.")] +[PlugIn] +[Display(Name = nameof(ChaosMixHandlerPlugIn), Description = "Handler for chaos mix packets.")] [Guid("0693e102-0adc-41e4-b0d4-ce22687b6dbb")] internal class ChaosMixHandlerPlugIn : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/Items/ConsumeItemHandlerPlugIn.cs b/src/GameServer/MessageHandler/Items/ConsumeItemHandlerPlugIn.cs index 4bf8d6fba..25055ddbc 100644 --- a/src/GameServer/MessageHandler/Items/ConsumeItemHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Items/ConsumeItemHandlerPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Items; /// /// Handler for item consume packets. /// -[PlugIn(nameof(ConsumeItemHandlerPlugIn), "Handler for item consume packets.")] +[PlugIn] +[Display(Name = nameof(ConsumeItemHandlerPlugIn), Description = "Handler for item consume packets.")] [Guid("53992288-0d11-49df-98a3-2912b7616558")] [MinimumClient(5, 0, ClientLanguage.Invariant)] internal class ConsumeItemHandlerPlugIn : IPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/Items/ConsumeItemHandlerPlugIn075.cs b/src/GameServer/MessageHandler/Items/ConsumeItemHandlerPlugIn075.cs index b3aa9d151..28f4c5381 100644 --- a/src/GameServer/MessageHandler/Items/ConsumeItemHandlerPlugIn075.cs +++ b/src/GameServer/MessageHandler/Items/ConsumeItemHandlerPlugIn075.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Items; /// /// Handler for item consume packets. /// -[PlugIn(nameof(ConsumeItemHandlerPlugIn075), "Handler for item consume packets of version 0.75")] +[PlugIn] +[Display(Name = nameof(ConsumeItemHandlerPlugIn075), Description = "Handler for item consume packets of version 0.75")] [Guid("04F05526-C88A-4E3A-A872-B9103524AD38")] internal class ConsumeItemHandlerPlugIn075 : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/Items/DropItemHandlerPlugIn.cs b/src/GameServer/MessageHandler/Items/DropItemHandlerPlugIn.cs index 76f37cc3c..5164904d3 100644 --- a/src/GameServer/MessageHandler/Items/DropItemHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Items/DropItemHandlerPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Items; /// /// Handler for drop item packets. /// -[PlugIn("DropItemHandlerPlugIn", "Handler for drop item packets.")] +[PlugIn] +[Display(Name = "DropItemHandlerPlugIn", Description = "Handler for drop item packets.")] [Guid("b79bc453-74a0-4eea-8bc3-014d737aaa88")] internal class DropItemHandlerPlugIn : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/Items/ItemMoveExtendedHandlerPlugIn.cs b/src/GameServer/MessageHandler/Items/ItemMoveExtendedHandlerPlugIn.cs index 5c779ae2b..69ad02504 100644 --- a/src/GameServer/MessageHandler/Items/ItemMoveExtendedHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Items/ItemMoveExtendedHandlerPlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Items; /// /// Packet handler for extended item move packets. /// -[PlugIn(nameof(ItemMoveExtendedHandlerPlugIn), "Packet handler for extended item move packets.")] +[PlugIn] +[Display(Name = nameof(ItemMoveExtendedHandlerPlugIn), Description = "Packet handler for extended item move packets.")] [Guid("F68AFB2B-CEE0-420E-89F2-30694045ED46")] [MinimumClient(106, 3, ClientLanguage.Invariant)] internal class ItemMoveExtendedHandlerPlugIn : IPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/Items/ItemMoveHandlerPlugIn.cs b/src/GameServer/MessageHandler/Items/ItemMoveHandlerPlugIn.cs index 8b8dfd6e4..5f177b49e 100644 --- a/src/GameServer/MessageHandler/Items/ItemMoveHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Items/ItemMoveHandlerPlugIn.cs @@ -16,7 +16,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Items; /// /// Handler for item move packets. /// -[PlugIn("ItemMoveHandlerPlugIn", "Handler for item move packets.")] +[PlugIn] +[Display(Name = "ItemMoveHandlerPlugIn", Description = "Handler for item move packets.")] [Guid("c499c596-7711-4971-bc83-7abd9e6b5553")] internal class ItemMoveHandlerPlugIn : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/Items/ItemRepairHandlerPlugIn.cs b/src/GameServer/MessageHandler/Items/ItemRepairHandlerPlugIn.cs index 71ba6bc26..894cda83f 100644 --- a/src/GameServer/MessageHandler/Items/ItemRepairHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Items/ItemRepairHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Items; /// /// Handler for item repair packets. /// -[PlugIn("ItemRepairHandlerPlugIn", "Handler for item repair packets.")] +[PlugIn] +[Display(Name = "ItemRepairHandlerPlugIn", Description = "Handler for item repair packets.")] [Guid("85b4a195-c90c-47f8-bae2-833b5d2ef398")] internal class ItemRepairHandlerPlugIn : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/Items/JewelMixHandlerPlugIn.cs b/src/GameServer/MessageHandler/Items/JewelMixHandlerPlugIn.cs index ef5108d7a..fe6fc9c0b 100644 --- a/src/GameServer/MessageHandler/Items/JewelMixHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Items/JewelMixHandlerPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Items; /// /// Handler for jewel mix packets. /// -[PlugIn("JewelMixHandlerPlugIn", "Handler for jewel mix packets.")] +[PlugIn] +[Display(Name = "JewelMixHandlerPlugIn", Description = "Handler for jewel mix packets.")] [Guid("d6067475-a910-488d-8450-9310ae394c47")] internal class JewelMixHandlerPlugIn : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/Items/PickupItemHandlerPlugIn.cs b/src/GameServer/MessageHandler/Items/PickupItemHandlerPlugIn.cs index 6f9ee8753..f6f3e7b97 100644 --- a/src/GameServer/MessageHandler/Items/PickupItemHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Items/PickupItemHandlerPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Items; /// /// Handler for item pickup packets. /// -[PlugIn("PickupItemHandlerPlugIn", "Handler for item pickup packets.")] +[PlugIn] +[Display(Name = "PickupItemHandlerPlugIn", Description = "Handler for item pickup packets.")] [Guid("8bcb9d85-95ae-4611-ae64-e9cc801ec647")] [MinimumClient(0, 97, ClientLanguage.Invariant)] internal class PickupItemHandlerPlugIn : IPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/Items/PickupItemHandlerPlugIn075.cs b/src/GameServer/MessageHandler/Items/PickupItemHandlerPlugIn075.cs index 145043ebd..7ffbbead6 100644 --- a/src/GameServer/MessageHandler/Items/PickupItemHandlerPlugIn075.cs +++ b/src/GameServer/MessageHandler/Items/PickupItemHandlerPlugIn075.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Items; /// /// Handler for item pickup packets for client version 0.75. /// -[PlugIn("PickupItemHandlerPlugIn 0.75", "Handler for item pickup packets for version 0.75.")] +[PlugIn] +[Display(Name = "PickupItemHandlerPlugIn 0.75", Description = "Handler for item pickup packets for version 0.75.")] [Guid("185512C3-F5B7-489F-A1C1-DF07146560A4")] [MinimumClient(0, 75, ClientLanguage.Invariant)] internal class PickupItemHandlerPlugIn075 : IPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/Items/SellItemToNpcHandlerPlugIn.cs b/src/GameServer/MessageHandler/Items/SellItemToNpcHandlerPlugIn.cs index 46216d804..61bda2155 100644 --- a/src/GameServer/MessageHandler/Items/SellItemToNpcHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Items/SellItemToNpcHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Items; /// /// Handler for item sale to npc packets. /// -[PlugIn("SellItemToNpcHandlerPlugIn", "Handler for item sale to npc packets.")] +[PlugIn] +[Display(Name = "SellItemToNpcHandlerPlugIn", Description = "Handler for item sale to npc packets.")] [Guid("8bbf8737-8731-4975-baa8-e14f77451b85")] internal class SellItemToNpcHandlerPlugIn : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/Login/LogInHandlerPlugIn.cs b/src/GameServer/MessageHandler/Login/LogInHandlerPlugIn.cs index 70c769d52..faa5d504f 100644 --- a/src/GameServer/MessageHandler/Login/LogInHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Login/LogInHandlerPlugIn.cs @@ -19,7 +19,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Login; /// /// Packet handler for login packets. /// -[PlugIn("Login", "Packet handler for login packets.")] +[PlugIn] +[Display(Name = "Login", Description = "Packet handler for login packets.")] [Guid("4A816FE5-809B-4D42-AF9F-1929FABD3295")] [BelongsToGroup(LogInOutGroup.GroupKey)] public class LogInHandlerPlugIn : ISubPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/Login/LogInOutGroup.cs b/src/GameServer/MessageHandler/Login/LogInOutGroup.cs index 76adae063..93c0baf11 100644 --- a/src/GameServer/MessageHandler/Login/LogInOutGroup.cs +++ b/src/GameServer/MessageHandler/Login/LogInOutGroup.cs @@ -11,7 +11,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Login; /// /// Packet group handler for log in and out packets (0xF1). /// -[PlugIn("Log In & Out Group", "Packet group handler for log in and out packets (0xF1).")] +[PlugIn] +[Display(Name = "Log In & Out Group", Description = "Packet group handler for log in and out packets (0xF1).")] [Guid("8590fe8b-2f75-4189-8972-ed8f63b8bf22")] internal class LogInOutGroup : GroupPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/Login/LogOutByCheatDetectionHandlerPlugIn.cs b/src/GameServer/MessageHandler/Login/LogOutByCheatDetectionHandlerPlugIn.cs index bec72121e..a6b3b7fc1 100644 --- a/src/GameServer/MessageHandler/Login/LogOutByCheatDetectionHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Login/LogOutByCheatDetectionHandlerPlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Login; /// /// Handler for logout by cheat packets. /// -[PlugIn("Logout by cheat handler", "Handler for logout (by cheat) packets.")] +[PlugIn] +[Display(Name = "Logout by cheat handler", Description = "Handler for logout (by cheat) packets.")] [Guid("AE611B1E-3E3D-4189-B39C-79696D27BFBD")] [BelongsToGroup(LogInOutGroup.GroupKey)] public class LogOutByCheatDetectionHandlerPlugIn : ISubPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/Login/LogOutHandlerPlugIn.cs b/src/GameServer/MessageHandler/Login/LogOutHandlerPlugIn.cs index 177b68f09..55e679783 100644 --- a/src/GameServer/MessageHandler/Login/LogOutHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Login/LogOutHandlerPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Login; /// /// Handler for logout packets. /// -[PlugIn("Logout handler", "Handler for logout packets.")] +[PlugIn] +[Display(Name = "Logout handler", Description = "Handler for logout packets.")] [Guid("84108668-70A0-42F6-AA80-B43757F12836")] [BelongsToGroup(LogInOutGroup.GroupKey)] public class LogOutHandlerPlugIn : ISubPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/Messenger/AddFriendHandlerPlugIn.cs b/src/GameServer/MessageHandler/Messenger/AddFriendHandlerPlugIn.cs index 39fee271b..f97f9425f 100644 --- a/src/GameServer/MessageHandler/Messenger/AddFriendHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Messenger/AddFriendHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Messenger; /// /// Handler for add friend packets. /// -[PlugIn("AddFriendHandlerPlugIn", "Handler for add friend packets.")] +[PlugIn] +[Display(Name = "AddFriendHandlerPlugIn", Description = "Handler for add friend packets.")] [Guid("302870db-59cc-4cf8-b5ed-b0efa9f6ccbc")] internal class AddFriendHandlerPlugIn : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/Messenger/ChangeOnlineStateHandlerPlugIn.cs b/src/GameServer/MessageHandler/Messenger/ChangeOnlineStateHandlerPlugIn.cs index f7ee34c0d..d57f825df 100644 --- a/src/GameServer/MessageHandler/Messenger/ChangeOnlineStateHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Messenger/ChangeOnlineStateHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Messenger; /// /// Handler for online state change packets. /// -[PlugIn("ChangeOnlineStateHandlerPlugIn", "Handler for online state change packets.")] +[PlugIn] +[Display(Name = "ChangeOnlineStateHandlerPlugIn", Description = "Handler for online state change packets.")] [Guid("ff1d0b4e-4748-4ee0-b68e-f42b700c0f63")] internal class ChangeOnlineStateHandlerPlugIn : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/Messenger/ChatRequestHandlerPlugIn.cs b/src/GameServer/MessageHandler/Messenger/ChatRequestHandlerPlugIn.cs index 906c9a10f..305285eda 100644 --- a/src/GameServer/MessageHandler/Messenger/ChatRequestHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Messenger/ChatRequestHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Messenger; /// /// Handler for chat request packets. /// -[PlugIn("ChatRequestHandlerPlugIn", "Handler for chat request packets.")] +[PlugIn] +[Display(Name = "ChatRequestHandlerPlugIn", Description = "Handler for chat request packets.")] [Guid("acf9263f-ba71-4d84-b8f8-84e494eb4462")] internal class ChatRequestHandlerPlugIn : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/Messenger/ChatRoomInvitationRequestPlugIn.cs b/src/GameServer/MessageHandler/Messenger/ChatRoomInvitationRequestPlugIn.cs index 7271b971e..0d4a0f765 100644 --- a/src/GameServer/MessageHandler/Messenger/ChatRoomInvitationRequestPlugIn.cs +++ b/src/GameServer/MessageHandler/Messenger/ChatRoomInvitationRequestPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Messenger; /// Packet handler which handles chat room invitation requests, /// where a player invites additional players to an existing chat room. /// -[PlugIn("ChatRoomInvitationRequestPlugIn", "Packet handler which handles chat room invitation requests, where a player invites additional players to an existing chat room.")] +[PlugIn] +[Display(Name = "ChatRoomInvitationRequestPlugIn", Description = "Packet handler which handles chat room invitation requests, where a player invites additional players to an existing chat room.")] [Guid("fc779867-7d2d-4409-83b4-b6616bb9234e")] public class ChatRoomInvitationRequestPlugIn : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/Messenger/DeleteFriendHandlerPlugIn.cs b/src/GameServer/MessageHandler/Messenger/DeleteFriendHandlerPlugIn.cs index dc17b2df9..2e8f12697 100644 --- a/src/GameServer/MessageHandler/Messenger/DeleteFriendHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Messenger/DeleteFriendHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Messenger; /// /// Handler for delete friend packets. /// -[PlugIn("DeleteFriendHandlerPlugIn", "Handler for delete friend packets.")] +[PlugIn] +[Display(Name = "DeleteFriendHandlerPlugIn", Description = "Handler for delete friend packets.")] [Guid("82d21573-64bd-439e-9368-8fc227475942")] internal class DeleteFriendHandlerPlugIn : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/Messenger/FriendAddResponseHandlerPlugIn.cs b/src/GameServer/MessageHandler/Messenger/FriendAddResponseHandlerPlugIn.cs index b3ac8412b..5fbe21f37 100644 --- a/src/GameServer/MessageHandler/Messenger/FriendAddResponseHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Messenger/FriendAddResponseHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Messenger; /// /// Handler for friend add response packets. /// -[PlugIn("FriendAddResponseHandlerPlugIn", "Handler for friend add response packets.")] +[PlugIn] +[Display(Name = "FriendAddResponseHandlerPlugIn", Description = "Handler for friend add response packets.")] [Guid("171b8f75-3927-4325-b694-54130365e4a2")] internal class FriendAddResponseHandlerPlugIn : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/Messenger/LetterDeleteHandlerPlugIn.cs b/src/GameServer/MessageHandler/Messenger/LetterDeleteHandlerPlugIn.cs index 4d7a6e06b..d7c1fe7ee 100644 --- a/src/GameServer/MessageHandler/Messenger/LetterDeleteHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Messenger/LetterDeleteHandlerPlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Messenger; /// /// Handler for letter delete packets. /// -[PlugIn("LetterDeleteHandlerPlugIn", "Handler for letter delete packets.")] +[PlugIn] +[Display(Name = "LetterDeleteHandlerPlugIn", Description = "Handler for letter delete packets.")] [Guid("3334483b-2de2-47ff-8d74-7407d3ddf15f")] internal class LetterDeleteHandlerPlugIn : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/Messenger/LetterReadRequestHandlerPlugIn.cs b/src/GameServer/MessageHandler/Messenger/LetterReadRequestHandlerPlugIn.cs index d6cee75d9..d6cbf0711 100644 --- a/src/GameServer/MessageHandler/Messenger/LetterReadRequestHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Messenger/LetterReadRequestHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Messenger; /// /// Handler for letter read request packets. /// -[PlugIn("LetterReadRequestHandlerPlugIn", "Handler for letter read request packets.")] +[PlugIn] +[Display(Name = "LetterReadRequestHandlerPlugIn", Description = "Handler for letter read request packets.")] [Guid("056ffd3b-567b-4787-9d07-2c9d8a5a7175")] internal class LetterReadRequestHandlerPlugIn : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/Messenger/LetterSendHandlerPlugIn.cs b/src/GameServer/MessageHandler/Messenger/LetterSendHandlerPlugIn.cs index ca73962f9..30995d469 100644 --- a/src/GameServer/MessageHandler/Messenger/LetterSendHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Messenger/LetterSendHandlerPlugIn.cs @@ -16,7 +16,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Messenger; /// /// Handler for letter send packets. /// -[PlugIn("LetterSendHandlerPlugIn", "Handler for letter send packets.")] +[PlugIn] +[Display(Name = "LetterSendHandlerPlugIn", Description = "Handler for letter send packets.")] [Guid("6d10d34d-bd20-4dcf-99eb-569d38ef1c1b")] internal class LetterSendHandlerPlugIn : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/MiniGames/BloodCastleEnterHandlerPlugIn.cs b/src/GameServer/MessageHandler/MiniGames/BloodCastleEnterHandlerPlugIn.cs index cf252dfff..3608703f6 100644 --- a/src/GameServer/MessageHandler/MiniGames/BloodCastleEnterHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/MiniGames/BloodCastleEnterHandlerPlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.MiniGames; /// /// Handler for blood castle enter request packets. /// -[PlugIn(nameof(BloodCastleEnterHandlerPlugIn), "Handler for blood castle enter request packets.")] +[PlugIn] +[Display(Name = nameof(BloodCastleEnterHandlerPlugIn), Description = "Handler for blood castle enter request packets.")] [Guid("999D6CC6-7B5C-4D0A-89E5-DFC1A1E482FA")] internal class BloodCastleEnterHandlerPlugIn : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/MiniGames/ChaosCastleEnterHandlerPlugIn.cs b/src/GameServer/MessageHandler/MiniGames/ChaosCastleEnterHandlerPlugIn.cs index 6eb7d6858..f34d3d2dc 100644 --- a/src/GameServer/MessageHandler/MiniGames/ChaosCastleEnterHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/MiniGames/ChaosCastleEnterHandlerPlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.MiniGames; /// /// Handler for chaos castle enter request packets. /// -[PlugIn(nameof(ChaosCastleEnterHandlerPlugIn), "Handler for chaos castle enter request packets.")] +[PlugIn] +[Display(Name = nameof(ChaosCastleEnterHandlerPlugIn), Description = "Handler for chaos castle enter request packets.")] [Guid("D4F0076F-86D2-4712-B9FD-6B1C58B71969")] internal class ChaosCastleEnterHandlerPlugIn : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/MiniGames/DevilSquareEnterHandlerPlugIn.cs b/src/GameServer/MessageHandler/MiniGames/DevilSquareEnterHandlerPlugIn.cs index 3ccf410ae..1faabf14f 100644 --- a/src/GameServer/MessageHandler/MiniGames/DevilSquareEnterHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/MiniGames/DevilSquareEnterHandlerPlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.MiniGames; /// /// Handler for devil square enter request packets. /// -[PlugIn(nameof(DevilSquareEnterHandlerPlugIn), "Handler for devil square enter packets.")] +[PlugIn] +[Display(Name = nameof(DevilSquareEnterHandlerPlugIn), Description = "Handler for devil square enter packets.")] [Guid("550FFF1B-E31C-44BA-8CC9-100D5649CC87")] internal class DevilSquareEnterHandlerPlugIn : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/MiniGames/MiniGameOpeningStateRequestHandlerPlugIn.cs b/src/GameServer/MessageHandler/MiniGames/MiniGameOpeningStateRequestHandlerPlugIn.cs index 8924f4d07..301a7eef8 100644 --- a/src/GameServer/MessageHandler/MiniGames/MiniGameOpeningStateRequestHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/MiniGames/MiniGameOpeningStateRequestHandlerPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.MiniGames; /// /// Handler for mini game opening state request packets. /// -[PlugIn(nameof(MiniGameOpeningStateRequestHandlerPlugIn), "Handler for mini game opening state request packets.")] +[PlugIn] +[Display(Name = nameof(MiniGameOpeningStateRequestHandlerPlugIn), Description = "Handler for mini game opening state request packets.")] [Guid("15BAE3E6-4654-425A-8809-FA53A4C54D09")] internal class MiniGameOpeningStateRequestHandlerPlugIn : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/MuHelper/MuHelperGroupHandler.cs b/src/GameServer/MessageHandler/MuHelper/MuHelperGroupHandler.cs index b2f210029..eb284f409 100644 --- a/src/GameServer/MessageHandler/MuHelper/MuHelperGroupHandler.cs +++ b/src/GameServer/MessageHandler/MuHelper/MuHelperGroupHandler.cs @@ -11,7 +11,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.MuHelper; /// /// Packet handler for mu helper packets (0xBF identifier). /// -[PlugIn(nameof(MuHelperGroupHandler), "Group packet handler for mu helper packets (0xBF identifier).")] +[PlugIn] +[Display(Name = nameof(MuHelperGroupHandler), Description = "Group packet handler for mu helper packets (0xBF identifier).")] [Guid("F92D5B35-02C9-4C95-9A29-B4E4323B63A2")] internal class MuHelperGroupHandler : GroupPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/MuHelper/MuHelperSaveDataRequestHandlerPlugin.cs b/src/GameServer/MessageHandler/MuHelper/MuHelperSaveDataRequestHandlerPlugin.cs index d8670bf10..2386c64c6 100644 --- a/src/GameServer/MessageHandler/MuHelper/MuHelperSaveDataRequestHandlerPlugin.cs +++ b/src/GameServer/MessageHandler/MuHelper/MuHelperSaveDataRequestHandlerPlugin.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.MuHelper; /// /// Packet handler for mu helper data save packets (0xAE identifier). /// -[PlugIn(nameof(MuHelperSaveDataRequestHandlerPlugin), "Handler for mu bot data save request.")] +[PlugIn] +[Display(Name = nameof(MuHelperSaveDataRequestHandlerPlugin), Description = "Handler for mu bot data save request.")] [Guid("493B12F2-5115-4587-B0CF-B1E4F9B77249")] public class MuHelperSaveDataRequestHandlerPlugin : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/MuHelper/MuHelperStatusChangeRequestHandlerPlugIn.cs b/src/GameServer/MessageHandler/MuHelper/MuHelperStatusChangeRequestHandlerPlugIn.cs index 0a1951f0d..e8fdbffc4 100644 --- a/src/GameServer/MessageHandler/MuHelper/MuHelperStatusChangeRequestHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/MuHelper/MuHelperStatusChangeRequestHandlerPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.MuHelper; /// /// Handler for MU Helper use requests. /// -[PlugIn(nameof(MuHelperStatusChangeRequestHandlerPlugIn), "Handler for MU Helper status change requests.")] +[PlugIn] +[Display(Name = nameof(MuHelperStatusChangeRequestHandlerPlugIn), Description = "Handler for MU Helper status change requests.")] [Guid("91B5040E-44B6-41FC-A0AB-A881770B2A16")] [BelongsToGroup(MuHelperGroupHandler.GroupKey)] public class MuHelperStatusChangeRequestHandlerPlugIn : ISubPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/NpcActionGroupHandlerPlugIn.cs b/src/GameServer/MessageHandler/NpcActionGroupHandlerPlugIn.cs index 7b9e3fa3c..90e880213 100644 --- a/src/GameServer/MessageHandler/NpcActionGroupHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/NpcActionGroupHandlerPlugIn.cs @@ -11,7 +11,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler; /// /// Packet handler for character packets (0xF3 identifier). /// -[PlugIn("NPC Action Packet Handler", "Packet handler for npc action packets (0xD0 identifier).")] +[PlugIn] +[Display(Name = "NPC Action Packet Handler", Description = "Packet handler for npc action packets (0xD0 identifier).")] [Guid("519874CB-734D-4061-9FCF-96B833250436")] internal class NpcActionGroupHandlerPlugIn : GroupPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/Party/PartyKickHandlerPlugIn.cs b/src/GameServer/MessageHandler/Party/PartyKickHandlerPlugIn.cs index e49c208b8..5b6bd1344 100644 --- a/src/GameServer/MessageHandler/Party/PartyKickHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Party/PartyKickHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Party; /// /// Handler for party kick packets. /// -[PlugIn("PartyKickHandlerPlugIn", "Handler for party kick packets.")] +[PlugIn] +[Display(Name = "PartyKickHandlerPlugIn", Description = "Handler for party kick packets.")] [Guid("26d0fef9-8171-4098-87ae-030054163509")] internal class PartyKickHandlerPlugIn : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/Party/PartyListRequestHandlerPlugIn.cs b/src/GameServer/MessageHandler/Party/PartyListRequestHandlerPlugIn.cs index 8be283c96..e677c4659 100644 --- a/src/GameServer/MessageHandler/Party/PartyListRequestHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Party/PartyListRequestHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Party; /// /// Handler for party list request packets. /// -[PlugIn("PartyListRequestHandlerPlugIn", "Handler for party list request packets.")] +[PlugIn] +[Display(Name = "PartyListRequestHandlerPlugIn", Description = "Handler for party list request packets.")] [Guid("2650e346-69ef-4a9e-82ba-5f0b9591a548")] internal class PartyListRequestHandlerPlugIn : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/Party/PartyRequestHandlerPlugIn.cs b/src/GameServer/MessageHandler/Party/PartyRequestHandlerPlugIn.cs index cd55c1096..a284ffe71 100644 --- a/src/GameServer/MessageHandler/Party/PartyRequestHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Party/PartyRequestHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Party; /// /// Handler for party request packets. /// -[PlugIn("PartyRequestHandlerPlugIn", "Handler for party request packets.")] +[PlugIn] +[Display(Name = "PartyRequestHandlerPlugIn", Description = "Handler for party request packets.")] [Guid("759d5b1a-a2f9-4de8-a03e-023a4810111d")] internal class PartyRequestHandlerPlugIn : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/Party/PartyResponseHandlerPlugIn.cs b/src/GameServer/MessageHandler/Party/PartyResponseHandlerPlugIn.cs index 894ffe7a9..761ad989e 100644 --- a/src/GameServer/MessageHandler/Party/PartyResponseHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Party/PartyResponseHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Party; /// /// Handler for party response packets. /// -[PlugIn("PartyResponseHandlerPlugIn", "Handler for party response packets.")] +[PlugIn] +[Display(Name = "PartyResponseHandlerPlugIn", Description = "Handler for party response packets.")] [Guid("bd1e7c33-a80e-439f-b8e2-b2c22a68126b")] internal class PartyResponseHandlerPlugIn : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/Pet/PetCommandRequestHandlerPlugIn.cs b/src/GameServer/MessageHandler/Pet/PetCommandRequestHandlerPlugIn.cs index 7557ddc07..db6fa4411 100644 --- a/src/GameServer/MessageHandler/Pet/PetCommandRequestHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Pet/PetCommandRequestHandlerPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Pet; /// /// Handler for pet command request packets. /// -[PlugIn(nameof(PetCommandRequestHandlerPlugIn), "Handler for pet command request packets.")] +[PlugIn] +[Display(Name = nameof(PetCommandRequestHandlerPlugIn), Description = "Handler for pet command request packets.")] [Guid("9C084343-72D2-4517-9267-4A270CB53146")] [MinimumClient(0, 97, ClientLanguage.Invariant)] internal class PetCommandRequestHandlerPlugIn : IPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/Pet/PetInfoRequestHandlerPlugIn.cs b/src/GameServer/MessageHandler/Pet/PetInfoRequestHandlerPlugIn.cs index c785c7b11..507867cae 100644 --- a/src/GameServer/MessageHandler/Pet/PetInfoRequestHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Pet/PetInfoRequestHandlerPlugIn.cs @@ -16,7 +16,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Pet; /// /// Handler for pet info request packets. /// -[PlugIn(nameof(PetInfoRequestHandlerPlugIn), "Handler for pet info request packets.")] +[PlugIn] +[Display(Name = nameof(PetInfoRequestHandlerPlugIn), Description = "Handler for pet info request packets.")] [Guid("DA535FF5-A23D-4C36-877F-73D1D811F146")] [MinimumClient(0, 97, ClientLanguage.Invariant)] internal class PetInfoRequestHandlerPlugIn : IPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/PlayerShop/PlayerShopBuyRequestPacketHandlerPlugIn.cs b/src/GameServer/MessageHandler/PlayerShop/PlayerShopBuyRequestPacketHandlerPlugIn.cs index 1a7dc66e7..f80d4101b 100644 --- a/src/GameServer/MessageHandler/PlayerShop/PlayerShopBuyRequestPacketHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/PlayerShop/PlayerShopBuyRequestPacketHandlerPlugIn.cs @@ -17,7 +17,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.PlayerShop; /// /// Packet handler which handles buy requests to a player shop (3F 06). /// -[PlugIn("Player Shop - Buy request", "Packet handler which handles buy requests to a player shop (3F 06).")] +[PlugIn] +[Display(Name = "Player Shop - Buy request", Description = "Packet handler which handles buy requests to a player shop (3F 06).")] [Guid("F5B72F91-9651-433D-AC23-5898B950A09B")] [BelongsToGroup(StoreHandlerGroupPlugIn.GroupKey)] internal class PlayerShopBuyRequestPacketHandlerPlugIn : ISubPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/PlayerShop/PlayerShopClosePacketHandlerPlugIn.cs b/src/GameServer/MessageHandler/PlayerShop/PlayerShopClosePacketHandlerPlugIn.cs index 659d01943..caa69d9b8 100644 --- a/src/GameServer/MessageHandler/PlayerShop/PlayerShopClosePacketHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/PlayerShop/PlayerShopClosePacketHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.PlayerShop; /// /// Packet handler which opens the player shop (3F 03). /// -[PlugIn("Player Shop - Close", "Packet handler which opens the player shop (3F 03).")] +[PlugIn] +[Display(Name = "Player Shop - Close", Description = "Packet handler which opens the player shop (3F 03).")] [Guid("3DD40F3A-37FA-4694-80FB-BF71B454D98E")] [BelongsToGroup(StoreHandlerGroupPlugIn.GroupKey)] internal class PlayerShopClosePacketHandlerPlugIn : ISubPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/PlayerShop/PlayerShopOpenPacketHandlerPlugIn.cs b/src/GameServer/MessageHandler/PlayerShop/PlayerShopOpenPacketHandlerPlugIn.cs index abecfb9da..8da62b34c 100644 --- a/src/GameServer/MessageHandler/PlayerShop/PlayerShopOpenPacketHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/PlayerShop/PlayerShopOpenPacketHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.PlayerShop; /// /// Packet handler which opens the player shop (3F 02). /// -[PlugIn("Player Shop - Open", "Packet handler which opens the player shop (3F 02).")] +[PlugIn] +[Display(Name = "Player Shop - Open", Description = "Packet handler which opens the player shop (3F 02).")] [Guid("6997E1D3-B722-40AE-8F71-A65BB4377529")] [BelongsToGroup(StoreHandlerGroupPlugIn.GroupKey)] internal class PlayerShopOpenPacketHandlerPlugIn : ISubPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/PlayerShop/PlayerShopRequestItemListPacketHandlerPlugIn.cs b/src/GameServer/MessageHandler/PlayerShop/PlayerShopRequestItemListPacketHandlerPlugIn.cs index 656411561..70e7cf5a8 100644 --- a/src/GameServer/MessageHandler/PlayerShop/PlayerShopRequestItemListPacketHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/PlayerShop/PlayerShopRequestItemListPacketHandlerPlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.PlayerShop; /// /// Packet handler which handles requests for the item list of another player (3F 05). /// -[PlugIn("Player Shop - Request Item List", "Packet handler which handles requests for the item list of another player (3F 05).")] +[PlugIn] +[Display(Name = "Player Shop - Request Item List", Description = "Packet handler which handles requests for the item list of another player (3F 05).")] [Guid("5A87AD36-1778-4CA4-AE08-B7BC12135C1B")] [BelongsToGroup(StoreHandlerGroupPlugIn.GroupKey)] internal class PlayerShopRequestItemListPacketHandlerPlugIn : ISubPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/PlayerShop/PlayerShopSetItemPricePacketHandlerPlugIn.cs b/src/GameServer/MessageHandler/PlayerShop/PlayerShopSetItemPricePacketHandlerPlugIn.cs index 49a9114c0..ff9b74f87 100644 --- a/src/GameServer/MessageHandler/PlayerShop/PlayerShopSetItemPricePacketHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/PlayerShop/PlayerShopSetItemPricePacketHandlerPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.PlayerShop; /// /// Packet handler which sets prices for an item in the player shop (3F 01). /// -[PlugIn("Player Shop - Set Price", "Packet handler which sets prices for an item in the player shop (3F 01).")] +[PlugIn] +[Display(Name = "Player Shop - Set Price", Description = "Packet handler which sets prices for an item in the player shop (3F 01).")] [Guid("0E78ADBD-4B3D-4D3E-B5B1-34FA66BFC854")] [BelongsToGroup(StoreHandlerGroupPlugIn.GroupKey)] internal class PlayerShopSetItemPricePacketHandlerPlugIn : ISubPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/PlayerShop/StoreHandlerGroupPlugIn.cs b/src/GameServer/MessageHandler/PlayerShop/StoreHandlerGroupPlugIn.cs index d2dabaa5a..26442785d 100644 --- a/src/GameServer/MessageHandler/PlayerShop/StoreHandlerGroupPlugIn.cs +++ b/src/GameServer/MessageHandler/PlayerShop/StoreHandlerGroupPlugIn.cs @@ -11,7 +11,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.PlayerShop; /// /// Handler for player store related packets. /// -[PlugIn("StoreHandlerGroupPlugIn", "Handler for player store related packets.")] +[PlugIn] +[Display(Name = "StoreHandlerGroupPlugIn", Description = "Handler for player store related packets.")] [Guid("8C6DBAB0-FED6-4F4C-9924-6243FEB4E1F2")] internal class StoreHandlerGroupPlugIn : GroupPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/Quests/ActiveQuestListRequestHandlerPlugIn.cs b/src/GameServer/MessageHandler/Quests/ActiveQuestListRequestHandlerPlugIn.cs index f47fdaea0..264c4ef32 100644 --- a/src/GameServer/MessageHandler/Quests/ActiveQuestListRequestHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Quests/ActiveQuestListRequestHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Quests; /// /// Packet handler for the list of active quests request packets (0xF6, 0x1A identifier). /// -[PlugIn("Quest - Request active quests list", "Packet handler for character focus packets (0xF3, 0x15 identifier).")] +[PlugIn] +[Display(Name = "Quest - Request active quests list", Description = "Packet handler for character focus packets (0xF3, 0x15 identifier).")] [Guid("521ED931-BDB0-422E-8E8A-3CCB1BEB639C")] [BelongsToGroup(QuestGroupHandlerPlugIn.GroupKey)] internal class ActiveQuestListRequestHandlerPlugIn : ISubPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/Quests/AvailableQuestsRequestHandlerPlugIn.cs b/src/GameServer/MessageHandler/Quests/AvailableQuestsRequestHandlerPlugIn.cs index ba1ef8aca..a1dcf33d5 100644 --- a/src/GameServer/MessageHandler/Quests/AvailableQuestsRequestHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Quests/AvailableQuestsRequestHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Quests; /// /// Packet handler for available quest request packets (0xF6, 0x30 identifier). /// -[PlugIn("Quest - Request available quests", "Packet handler for available quest request packets (0xF6, 0x30 identifier)")] +[PlugIn] +[Display(Name = "Quest - Request available quests", Description = "Packet handler for available quest request packets (0xF6, 0x30 identifier)")] [Guid("12722085-06FE-4D03-848E-89180C017CDB")] [BelongsToGroup(QuestGroupHandlerPlugIn.GroupKey)] public class AvailableQuestsRequestHandlerPlugIn : ISubPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/Quests/BuffRequestHandlerPlugIn.cs b/src/GameServer/MessageHandler/Quests/BuffRequestHandlerPlugIn.cs index 4854dc148..0ab70d81e 100644 --- a/src/GameServer/MessageHandler/Quests/BuffRequestHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Quests/BuffRequestHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Quests; /// /// Packet handler for (elf soldier) buff request packets (0xF6, 0x31 identifier). /// -[PlugIn("Quest - Request available quests", "Packet handler for (elf soldier) buff request packets (0xF6, 0x31 identifier)")] +[PlugIn] +[Display(Name = "Quest - Request available quests", Description = "Packet handler for (elf soldier) buff request packets (0xF6, 0x31 identifier)")] [Guid("98F31A99-33CE-46FF-98BF-B66EF509C277")] [BelongsToGroup(QuestGroupHandlerPlugIn.GroupKey)] public class BuffRequestHandlerPlugIn : ISubPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/Quests/EventQuestStateRequestHandlerPlugIn.cs b/src/GameServer/MessageHandler/Quests/EventQuestStateRequestHandlerPlugIn.cs index dd3de6389..957b0f126 100644 --- a/src/GameServer/MessageHandler/Quests/EventQuestStateRequestHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Quests/EventQuestStateRequestHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Quests; /// /// Packet handler for event quest state request packets (0xF6, 0x21 identifier). /// -[PlugIn("Quest - Event quest state request", "Packet handler for event quest state request packets (0xF6, 0x21 identifier)")] +[PlugIn] +[Display(Name = "Quest - Event quest state request", Description = "Packet handler for event quest state request packets (0xF6, 0x21 identifier)")] [Guid("907FFFF8-0CF2-4DCD-931F-8AA17FE2EF3D")] [BelongsToGroup(QuestGroupHandlerPlugIn.GroupKey)] public class EventQuestStateRequestHandlerPlugIn : ISubPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/Quests/QuestCancelRequestHandlerPlugIn.cs b/src/GameServer/MessageHandler/Quests/QuestCancelRequestHandlerPlugIn.cs index 11eb9ac87..f6778e21e 100644 --- a/src/GameServer/MessageHandler/Quests/QuestCancelRequestHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Quests/QuestCancelRequestHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Quests; /// /// Packet handler for quest cancel request packets (0xF6, 0x0F identifier). /// -[PlugIn("Quest - Cancel Request", "Packet handler for quest cancel request packets (0xF6, 0x0F identifier)")] +[PlugIn] +[Display(Name = "Quest - Cancel Request", Description = "Packet handler for quest cancel request packets (0xF6, 0x0F identifier)")] [Guid("996E33ED-14B7-4165-9E6C-AE583974D0B7")] [BelongsToGroup(QuestGroupHandlerPlugIn.GroupKey)] public class QuestCancelRequestHandlerPlugIn : ISubPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/Quests/QuestClientActionHandlerPlugIn.cs b/src/GameServer/MessageHandler/Quests/QuestClientActionHandlerPlugIn.cs index 6953ca74c..fa1e9739b 100644 --- a/src/GameServer/MessageHandler/Quests/QuestClientActionHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Quests/QuestClientActionHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Quests; /// /// Packet handler for quest client action packets (0xF6, 0x10 identifier). /// -[PlugIn("Quest - Client Action", "Packet handler for quest client action packets (0xF6, 0x10 identifier)")] +[PlugIn] +[Display(Name = "Quest - Client Action", Description = "Packet handler for quest client action packets (0xF6, 0x10 identifier)")] [Guid("02F632AB-17E4-4B73-90DA-92FD5310B3CF")] [BelongsToGroup(QuestGroupHandlerPlugIn.GroupKey)] public class QuestClientActionHandlerPlugIn : ISubPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/Quests/QuestCompletionRequestHandlerPlugIn.cs b/src/GameServer/MessageHandler/Quests/QuestCompletionRequestHandlerPlugIn.cs index df2a39fea..153ae6684 100644 --- a/src/GameServer/MessageHandler/Quests/QuestCompletionRequestHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Quests/QuestCompletionRequestHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Quests; /// /// Packet handler for quest completion request packets (0xF6, 0x0D identifier). /// -[PlugIn("Quest - Completion Request", "Packet handler for quest completion request packets (0xF6, 0x0D identifier)")] +[PlugIn] +[Display(Name = "Quest - Completion Request", Description = "Packet handler for quest completion request packets (0xF6, 0x0D identifier)")] [Guid("CB8A33FA-0060-43E2-92F7-BE4BC23FE0B8")] [BelongsToGroup(QuestGroupHandlerPlugIn.GroupKey)] public class QuestCompletionRequestHandlerPlugIn : ISubPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/Quests/QuestGroupHandlerPlugIn.cs b/src/GameServer/MessageHandler/Quests/QuestGroupHandlerPlugIn.cs index 0d6b3efef..10185a554 100644 --- a/src/GameServer/MessageHandler/Quests/QuestGroupHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Quests/QuestGroupHandlerPlugIn.cs @@ -11,7 +11,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Quests; /// /// Packet handler for quest packets (0xF6 identifier). /// -[PlugIn("Quest Packet Handler", "Packet handler for quest packets (0xF6 identifier).")] +[PlugIn] +[Display(Name = "Quest Packet Handler", Description = "Packet handler for quest packets (0xF6 identifier).")] [Guid("2641F83A-42D3-42B0-BD2F-63AD0E3A380F")] internal class QuestGroupHandlerPlugIn : GroupPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/Quests/QuestProceedRequestHandlerPlugIn.cs b/src/GameServer/MessageHandler/Quests/QuestProceedRequestHandlerPlugIn.cs index 503d6d751..db75428d2 100644 --- a/src/GameServer/MessageHandler/Quests/QuestProceedRequestHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Quests/QuestProceedRequestHandlerPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Quests; /// /// Packet handler for quest start proceed packets (0xF6, 0x0B identifier). /// -[PlugIn("Quest - Proceed Request", "Packet handler for quest proceed request packets (0xF6, 0x0B identifier)")] +[PlugIn] +[Display(Name = "Quest - Proceed Request", Description = "Packet handler for quest proceed request packets (0xF6, 0x0B identifier)")] [Guid("D3773016-F156-4481-B080-A8C087444B78")] [BelongsToGroup(QuestGroupHandlerPlugIn.GroupKey)] public class QuestProceedRequestHandlerPlugIn : ISubPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/Quests/QuestSelectRequestHandlerPlugIn.cs b/src/GameServer/MessageHandler/Quests/QuestSelectRequestHandlerPlugIn.cs index 22505ebc0..9353c9121 100644 --- a/src/GameServer/MessageHandler/Quests/QuestSelectRequestHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Quests/QuestSelectRequestHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Quests; /// /// Packet handler for quest select request packets (0xF6, 0x0A identifier). /// -[PlugIn("Quest - Select Request", "Packet handler for quest select request packets (0xF6, 0x0A identifier)")] +[PlugIn] +[Display(Name = "Quest - Select Request", Description = "Packet handler for quest select request packets (0xF6, 0x0A identifier)")] [Guid("EF771EB5-9BC6-4DF3-BB0E-EADAB4295292")] [BelongsToGroup(QuestGroupHandlerPlugIn.GroupKey)] public class QuestSelectRequestHandlerPlugIn : ISubPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/Quests/QuestStateListLegacyRequestHandlerPlugIn.cs b/src/GameServer/MessageHandler/Quests/QuestStateListLegacyRequestHandlerPlugIn.cs index d9d5251f4..787f708a6 100644 --- a/src/GameServer/MessageHandler/Quests/QuestStateListLegacyRequestHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Quests/QuestStateListLegacyRequestHandlerPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Quests; /// /// Packet handler for the quest state list request for the legacy quest system (0xA0 identifier). /// -[PlugIn("Quest state list request (legacy)", "Packet handler for the quest state list request for the legacy quest system (0xA0 identifier)")] +[PlugIn] +[Display(Name = "Quest state list request (legacy)", Description = "Packet handler for the quest state list request for the legacy quest system (0xA0 identifier)")] [Guid("C886C499-2DF4-48CE-BE8D-C1D6484C7C3D")] [MinimumClient(0, 90, ClientLanguage.Invariant)] public class QuestStateListLegacyRequestHandlerPlugIn : IPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/Quests/QuestStateRequestHandlerPlugIn.cs b/src/GameServer/MessageHandler/Quests/QuestStateRequestHandlerPlugIn.cs index eafa6a681..725d538b9 100644 --- a/src/GameServer/MessageHandler/Quests/QuestStateRequestHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Quests/QuestStateRequestHandlerPlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Quests; /// /// Packet handler for quest state request packets (0xF6, 0x1B identifier). /// -[PlugIn("Quest - Request quest state", "Packet handler for quest state request packets (0xF6, 0x1B identifier)")] +[PlugIn] +[Display(Name = "Quest - Request quest state", Description = "Packet handler for quest state request packets (0xF6, 0x1B identifier)")] [Guid("AEA553A5-06A7-43D6-9A59-7C64AAC768C7")] [BelongsToGroup(QuestGroupHandlerPlugIn.GroupKey)] internal class QuestStateRequestHandlerPlugIn : ISubPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/Quests/QuestStateSetLegacyRequestHandlerPlugIn.cs b/src/GameServer/MessageHandler/Quests/QuestStateSetLegacyRequestHandlerPlugIn.cs index 578cca069..ddcbffba5 100644 --- a/src/GameServer/MessageHandler/Quests/QuestStateSetLegacyRequestHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Quests/QuestStateSetLegacyRequestHandlerPlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Quests; /// /// Packet handler for the quest state set request for the legacy quest system (0xA2 identifier). /// -[PlugIn("Quest state set request (legacy)", "Packet handler for the quest state set request for the legacy quest system (0xA2 identifier).")] +[PlugIn] +[Display(Name = "Quest state set request (legacy)", Description = "Packet handler for the quest state set request for the legacy quest system (0xA2 identifier).")] [Guid("3D8D1510-E92C-4D0E-9282-1A932B1B8195")] public class QuestStateSetLegacyRequestHandlerPlugIn : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/RageSkillAttackHandlerPlugIn.cs b/src/GameServer/MessageHandler/RageSkillAttackHandlerPlugIn.cs index 14c95db54..c3de09d4f 100644 --- a/src/GameServer/MessageHandler/RageSkillAttackHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/RageSkillAttackHandlerPlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler; /// /// Handler for rage fighter area skill attack packets (beast uppercut, chain drive, dark side). /// -[PlugIn(nameof(RageSkillAttackHandlerPlugIn), "Handler for rage fighter area skill attack packets (dark side).")] +[PlugIn] +[Display(Name = nameof(RageSkillAttackHandlerPlugIn), Description = "Handler for rage fighter area skill attack packets (dark side).")] [Guid("D09ED5FB-DB6F-4707-A740-144CF2BA5D92")] [MinimumClient(6, 0, ClientLanguage.Invariant)] internal class RageSkillAttackHandlerPlugIn : IPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/RageSkillAttackRequestHandlerPlugIn.cs b/src/GameServer/MessageHandler/RageSkillAttackRequestHandlerPlugIn.cs index 2db6dd001..c47b1c6f6 100644 --- a/src/GameServer/MessageHandler/RageSkillAttackRequestHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/RageSkillAttackRequestHandlerPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler; /// /// Handler for rage fighter area skill attack packets (dark side). /// -[PlugIn(nameof(RageSkillAttackRequestHandlerPlugIn), "Handler for rage fighter area skill attack packets (dark side).")] +[PlugIn] +[Display(Name = nameof(RageSkillAttackRequestHandlerPlugIn), Description = "Handler for rage fighter area skill attack packets (dark side).")] [Guid("A88920A7-BADA-40C0-ADF1-C1ACFE4345B3")] [MinimumClient(6, 0, ClientLanguage.Invariant)] internal class RageSkillAttackRequestHandlerPlugIn : IPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/TalkNpcHandlerPlugIn.cs b/src/GameServer/MessageHandler/TalkNpcHandlerPlugIn.cs index de8e79f47..75a56c472 100644 --- a/src/GameServer/MessageHandler/TalkNpcHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/TalkNpcHandlerPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler; /// /// Handler for talk npc request packets. /// -[PlugIn(nameof(TalkNpcHandlerPlugIn), "Handler for talk npc request packets.")] +[PlugIn] +[Display(Name = nameof(TalkNpcHandlerPlugIn), Description = "Handler for talk npc request packets.")] [Guid("b196fd5e-706d-41a2-ba07-72a3b184151d")] [MinimumClient(1, 0, ClientLanguage.Invariant)] internal class TalkNpcHandlerPlugIn : TalkNpcHandlerPlugInBase diff --git a/src/GameServer/MessageHandler/TalkNpcHandlerPlugIn075.cs b/src/GameServer/MessageHandler/TalkNpcHandlerPlugIn075.cs index 9faa43a53..5ddc91c80 100644 --- a/src/GameServer/MessageHandler/TalkNpcHandlerPlugIn075.cs +++ b/src/GameServer/MessageHandler/TalkNpcHandlerPlugIn075.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler; /// /// Handler for talk npc request packets. /// -[PlugIn(nameof(TalkNpcHandlerPlugIn075), "Handler for talk npc request packets.")] +[PlugIn] +[Display(Name = nameof(TalkNpcHandlerPlugIn075), Description = "Handler for talk npc request packets.")] [Guid("61732821-5881-41C1-931D-88CFE2A075FE")] [MaximumClient(0, 99, ClientLanguage.Invariant)] internal class TalkNpcHandlerPlugIn075 : TalkNpcHandlerPlugInBase diff --git a/src/GameServer/MessageHandler/TargetedSkillHandlerPlugIn.cs b/src/GameServer/MessageHandler/TargetedSkillHandlerPlugIn.cs index 4cba3175d..1c4a33c4a 100644 --- a/src/GameServer/MessageHandler/TargetedSkillHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/TargetedSkillHandlerPlugIn.cs @@ -16,7 +16,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler; /// /// Implements the targeted skill packet handler. /// -[PlugIn("TargetedSkillHandlerPlugIn", "Handler for targeted skill packets.")] +[PlugIn] +[Display(Name = "TargetedSkillHandlerPlugIn", Description = "Handler for targeted skill packets.")] [Guid("5b07d03c-509c-4aec-972c-a99db77561f2")] [MinimumClient(3, 0, ClientLanguage.Invariant)] internal class TargetedSkillHandlerPlugIn : IPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/TargetedSkillHandlerPlugIn075.cs b/src/GameServer/MessageHandler/TargetedSkillHandlerPlugIn075.cs index 6fd26d5f3..4475a2920 100644 --- a/src/GameServer/MessageHandler/TargetedSkillHandlerPlugIn075.cs +++ b/src/GameServer/MessageHandler/TargetedSkillHandlerPlugIn075.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler; /// /// Handler for targeted skill packets of version 0.75. /// -[PlugIn(nameof(TargetedSkillHandlerPlugIn075), "Handler for targeted skill packets for version 0.75")] +[PlugIn] +[Display(Name = nameof(TargetedSkillHandlerPlugIn075), Description = "Handler for targeted skill packets for version 0.75")] [Guid("83D2ABC0-6491-409A-8525-941794C54660")] internal class TargetedSkillHandlerPlugIn075 : TargetedSkillHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/TargetedSkillHandlerPlugIn095.cs b/src/GameServer/MessageHandler/TargetedSkillHandlerPlugIn095.cs index c02701aac..d222ccb01 100644 --- a/src/GameServer/MessageHandler/TargetedSkillHandlerPlugIn095.cs +++ b/src/GameServer/MessageHandler/TargetedSkillHandlerPlugIn095.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler; /// Handler for targeted skill packets until season 2. /// In these versions, the skill identifiers were only 1 byte big. After that, the master skill tree required more skills to be added than fit into it. /// -[PlugIn(nameof(TargetedSkillHandlerPlugIn095), "Handler for targeted skill packets for version 0.95.")] +[PlugIn] +[Display(Name = nameof(TargetedSkillHandlerPlugIn095), Description = "Handler for targeted skill packets for version 0.95.")] [Guid("B879F514-D8CF-4ADB-BC43-405B806A856A")] [MinimumClient(0, 95, ClientLanguage.Invariant)] internal class TargetedSkillHandlerPlugIn095 : TargetedSkillHandlerPlugIn diff --git a/src/GameServer/MessageHandler/TeleportTargetHandlerPlugIn.cs b/src/GameServer/MessageHandler/TeleportTargetHandlerPlugIn.cs index 169e394b8..d208724cb 100644 --- a/src/GameServer/MessageHandler/TeleportTargetHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/TeleportTargetHandlerPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler; /// /// Handler for teleport target packets (teleport ally skill). /// -[PlugIn(nameof(TeleportTargetHandlerPlugIn), "Handler for target teleport packets of the teleport ally skill.")] +[PlugIn] +[Display(Name = nameof(TeleportTargetHandlerPlugIn), Description = "Handler for target teleport packets of the teleport ally skill.")] [Guid("279881F9-0AE9-4EDA-8EB1-34D99D3243CC")] internal class TeleportTargetHandlerPlugIn : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/Trade/TradeAcceptHandlerPlugIn.cs b/src/GameServer/MessageHandler/Trade/TradeAcceptHandlerPlugIn.cs index 769e79296..500a85d1d 100644 --- a/src/GameServer/MessageHandler/Trade/TradeAcceptHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Trade/TradeAcceptHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Trade; /// /// Packet Handler which is called when a trade request gets answered by the player. /// -[PlugIn("TradeAcceptHandlerPlugIn", "Packet Handler which is called when a trade request gets answered by the player.")] +[PlugIn] +[Display(Name = "TradeAcceptHandlerPlugIn", Description = "Packet Handler which is called when a trade request gets answered by the player.")] [Guid("79014c54-17a3-4e5e-85be-3e9c6051dbef")] internal class TradeAcceptHandlerPlugIn : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/Trade/TradeButtonHandlerPlugIn.cs b/src/GameServer/MessageHandler/Trade/TradeButtonHandlerPlugIn.cs index d85253ce6..1cd244c0e 100644 --- a/src/GameServer/MessageHandler/Trade/TradeButtonHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Trade/TradeButtonHandlerPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Trade; /// /// Handles the trade button packets. /// -[PlugIn("TradeButtonHandlerPlugIn", "Handles the trade button packets.")] +[PlugIn] +[Display(Name = "TradeButtonHandlerPlugIn", Description = "Handles the trade button packets.")] [Guid("4e70bdec-c890-4e7d-93a9-1801f821f322")] internal class TradeButtonHandlerPlugIn : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/Trade/TradeCancelHandlerPlugIn.cs b/src/GameServer/MessageHandler/Trade/TradeCancelHandlerPlugIn.cs index 74c7c8014..bb1678a4c 100644 --- a/src/GameServer/MessageHandler/Trade/TradeCancelHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Trade/TradeCancelHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Trade; /// /// Handles the trade cancel packets. /// -[PlugIn("TradeCancelHandlerPlugIn", "Handles the trade cancel packets.")] +[PlugIn] +[Display(Name = "TradeCancelHandlerPlugIn", Description = "Handles the trade cancel packets.")] [Guid("13c7ba03-0ec2-4f41-bc0a-30fb9a035240")] internal class TradeCancelHandlerPlugIn : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/Trade/TradeMoneyHandlerPlugIn.cs b/src/GameServer/MessageHandler/Trade/TradeMoneyHandlerPlugIn.cs index 4d02fe2f5..634b249cb 100644 --- a/src/GameServer/MessageHandler/Trade/TradeMoneyHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Trade/TradeMoneyHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Trade; /// /// Handles the trade money packets. /// -[PlugIn("TradeMoneyHandlerPlugIn", "Handles the trade money packets.")] +[PlugIn] +[Display(Name = "TradeMoneyHandlerPlugIn", Description = "Handles the trade money packets.")] [Guid("3c18f0ca-4ad8-4e07-a111-0acbe81256ca")] internal class TradeMoneyHandlerPlugIn : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/Trade/TradeRequestHandlerPlugIn.cs b/src/GameServer/MessageHandler/Trade/TradeRequestHandlerPlugIn.cs index 19b5552f9..33f83c87c 100644 --- a/src/GameServer/MessageHandler/Trade/TradeRequestHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Trade/TradeRequestHandlerPlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Trade; /// /// Handles the trade request packets. /// -[PlugIn("TradeRequestHandlerPlugIn", "Handles the trade request packets.")] +[PlugIn] +[Display(Name = "TradeRequestHandlerPlugIn", Description = "Handles the trade request packets.")] [Guid("f2b8c4c0-2e9d-4f1f-8c42-76b0312e4021")] internal class TradeRequestHandlerPlugIn : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/Vault/RemoveVaultPinPlugIn.cs b/src/GameServer/MessageHandler/Vault/RemoveVaultPinPlugIn.cs index cad84c8a0..afb013804 100644 --- a/src/GameServer/MessageHandler/Vault/RemoveVaultPinPlugIn.cs +++ b/src/GameServer/MessageHandler/Vault/RemoveVaultPinPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Vault; /// /// Packet handler for vault pin remove packets (0x83, 0x02 identifier). /// -[PlugIn("Vault Lock - Remove Pin", "Packet handler for vault pin remove packets (0x83, 0x02 identifier).")] +[PlugIn] +[Display(Name = "Vault Lock - Remove Pin", Description = "Packet handler for vault pin remove packets (0x83, 0x02 identifier).")] [Guid("55ED4BC4-516F-490E-A065-B0150F2BD939")] [BelongsToGroup(VaultLockGroupPlugIn.GroupKey)] internal class RemoveVaultPinPlugIn : ISubPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/Vault/SetVaultPinPlugIn.cs b/src/GameServer/MessageHandler/Vault/SetVaultPinPlugIn.cs index 355a6e29c..501cbfa5d 100644 --- a/src/GameServer/MessageHandler/Vault/SetVaultPinPlugIn.cs +++ b/src/GameServer/MessageHandler/Vault/SetVaultPinPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Vault; /// /// Packet handler for vault pin set packets (0x83, 0x01 identifier). /// -[PlugIn("Vault Lock - Set Pin", "Packet handler for vault pin set packets (0x83, 0x01 identifier).")] +[PlugIn] +[Display(Name = "Vault Lock - Set Pin", Description = "Packet handler for vault pin set packets (0x83, 0x01 identifier).")] [Guid("A4C4CD69-6E28-4088-B533-CD63589D3CCA")] [BelongsToGroup(VaultLockGroupPlugIn.GroupKey)] internal class SetVaultPinPlugIn : ISubPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/Vault/UnlockVaultPlugIn.cs b/src/GameServer/MessageHandler/Vault/UnlockVaultPlugIn.cs index 293b10284..0bb08d55c 100644 --- a/src/GameServer/MessageHandler/Vault/UnlockVaultPlugIn.cs +++ b/src/GameServer/MessageHandler/Vault/UnlockVaultPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Vault; /// /// Packet handler for vault unlock packets (0x83, 0x00 identifier). /// -[PlugIn("Vault Lock - Unlock", "Packet handler for vault unlock packets (0x83, 0x00 identifier).")] +[PlugIn] +[Display(Name = "Vault Lock - Unlock", Description = "Packet handler for vault unlock packets (0x83, 0x00 identifier).")] [Guid("B035454B-8858-4F30-94CC-EFAAF868FEFE")] [BelongsToGroup(VaultLockGroupPlugIn.GroupKey)] internal class UnlockVaultPlugIn : ISubPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/Vault/VaultCloseHandlerPlugIn.cs b/src/GameServer/MessageHandler/Vault/VaultCloseHandlerPlugIn.cs index f9a05fd9c..1cf3deac4 100644 --- a/src/GameServer/MessageHandler/Vault/VaultCloseHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Vault/VaultCloseHandlerPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Vault; /// /// Handler for warehouse close packets. /// -[PlugIn(nameof(VaultCloseHandlerPlugIn), "Handler for warehouse close packets.")] +[PlugIn] +[Display(Name = nameof(VaultCloseHandlerPlugIn), Description = "Handler for warehouse close packets.")] [Guid("7859931f-3341-4bd7-91ad-1b0b03f11198")] internal class VaultCloseHandlerPlugIn : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/Vault/VaultLockGroupPlugIn.cs b/src/GameServer/MessageHandler/Vault/VaultLockGroupPlugIn.cs index 3def649e2..06af2d7df 100644 --- a/src/GameServer/MessageHandler/Vault/VaultLockGroupPlugIn.cs +++ b/src/GameServer/MessageHandler/Vault/VaultLockGroupPlugIn.cs @@ -11,7 +11,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Vault; /// /// Packet handler for vault lock packets (0x83 identifier). /// -[PlugIn("Vault Lock Packet Handler", "Packet handler for vault lock packets (0x83 identifier).")] +[PlugIn] +[Display(Name = "Vault Lock Packet Handler", Description = "Packet handler for vault lock packets (0x83 identifier).")] [Guid("751B3608-D9D9-45F1-BEF1-7B42AE851ABB")] internal class VaultLockGroupPlugIn : GroupPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/Vault/VaultMoneyHandlerPlugIn.cs b/src/GameServer/MessageHandler/Vault/VaultMoneyHandlerPlugIn.cs index 0e53c994b..45c26b04d 100644 --- a/src/GameServer/MessageHandler/Vault/VaultMoneyHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/Vault/VaultMoneyHandlerPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Vault; /// /// Handler for warehouse money packets. /// -[PlugIn(nameof(VaultMoneyHandlerPlugIn), "Handler for warehouse money packets.")] +[PlugIn] +[Display(Name = nameof(VaultMoneyHandlerPlugIn), Description = "Handler for warehouse money packets.")] [Guid("e365f3f2-55c8-4890-9f6b-26fd39822b71")] internal class VaultMoneyHandlerPlugIn : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/WarpGateHandler075PlugIn.cs b/src/GameServer/MessageHandler/WarpGateHandler075PlugIn.cs index e076b6604..119a5cfad 100644 --- a/src/GameServer/MessageHandler/WarpGateHandler075PlugIn.cs +++ b/src/GameServer/MessageHandler/WarpGateHandler075PlugIn.cs @@ -16,7 +16,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler; /// Handler for warp gate packets. /// This one is called when a player has entered a gate area, and sends a gate enter request. /// -[PlugIn(nameof(WarpGateHandler075PlugIn), "Handler for warp gate packets.")] +[PlugIn] +[Display(Name = nameof(WarpGateHandler075PlugIn), Description = "Handler for warp gate packets.")] [Guid("264CFC8C-30D1-4536-97FD-6811A9544997")] internal class WarpGateHandler075PlugIn : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/WarpGateHandlerPlugIn.cs b/src/GameServer/MessageHandler/WarpGateHandlerPlugIn.cs index 688f249cf..7a8756344 100644 --- a/src/GameServer/MessageHandler/WarpGateHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/WarpGateHandlerPlugIn.cs @@ -17,7 +17,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler; /// Handler for warp gate packets. /// This one is called when a player has entered a gate area, and sends a gate enter request. /// -[PlugIn(nameof(WarpGateHandlerPlugIn), "Handler for warp gate packets.")] +[PlugIn] +[Display(Name = nameof(WarpGateHandlerPlugIn), Description = "Handler for warp gate packets.")] [Guid("d8f56da4-774b-42af-96ac-12a10ea0187b")] [MinimumClient(1, 0, ClientLanguage.Invariant)] internal class WarpGateHandlerPlugIn : IPacketHandlerPlugIn diff --git a/src/GameServer/MessageHandler/WarpHandlerPlugIn.cs b/src/GameServer/MessageHandler/WarpHandlerPlugIn.cs index e4e83b3be..24b04ec89 100644 --- a/src/GameServer/MessageHandler/WarpHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/WarpHandlerPlugIn.cs @@ -16,7 +16,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler; /// Handler for warp request packets. /// This one is called when a player uses the warp list. /// -[PlugIn("WarpHandlerPlugIn", "Handler for warp request packets.")] +[PlugIn] +[Display(Name = "WarpHandlerPlugIn", Description = "Handler for warp request packets.")] [Guid("3d261a26-4357-4367-b999-703ea936f4e9")] internal class WarpHandlerPlugIn : IPacketHandlerPlugIn { diff --git a/src/GameServer/MessageHandler/WhisperedChatMessageHandlerPlugIn.cs b/src/GameServer/MessageHandler/WhisperedChatMessageHandlerPlugIn.cs index 29403ebea..226e08b6a 100644 --- a/src/GameServer/MessageHandler/WhisperedChatMessageHandlerPlugIn.cs +++ b/src/GameServer/MessageHandler/WhisperedChatMessageHandlerPlugIn.cs @@ -11,7 +11,8 @@ namespace MUnique.OpenMU.GameServer.MessageHandler; /// /// Packet handler for whispered chat messages. /// -[PlugIn("Whisper Message Handler", "Packet handler for whispered chat messages.")] +[PlugIn] +[Display(Name = "Whisper Message Handler", Description = "Packet handler for whispered chat messages.")] [Guid("A81C652C-4DAE-477F-A7D0-328924B8A3FC")] internal class WhisperedChatMessageHandlerPlugIn : ChatMessageBaseHandlerPlugIn { diff --git a/src/GameServer/RemoteView/AppearanceSerializer.cs b/src/GameServer/RemoteView/AppearanceSerializer.cs index 761bf23b7..c4d989d59 100644 --- a/src/GameServer/RemoteView/AppearanceSerializer.cs +++ b/src/GameServer/RemoteView/AppearanceSerializer.cs @@ -16,7 +16,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView; /// Default serializer for the appearance of a player. /// [Guid("54847CAF-7827-48FB-BF53-AF458A694FAF")] -[PlugIn("Default appearance serializer", "Default serializer for the appearance of a player. It will most likely only work correctly in season 6.")] +[PlugIn] +[Display(Name = "Default appearance serializer", Description = "Default serializer for the appearance of a player. It will most likely only work correctly in season 6.")] [MinimumClient(5, 0, ClientLanguage.Invariant)] public class AppearanceSerializer : IAppearanceSerializer { diff --git a/src/GameServer/RemoteView/AppearanceSerializer075.cs b/src/GameServer/RemoteView/AppearanceSerializer075.cs index 033de4434..e145876f0 100644 --- a/src/GameServer/RemoteView/AppearanceSerializer075.cs +++ b/src/GameServer/RemoteView/AppearanceSerializer075.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView; /// Serializer for the appearance of a player, compatible with the client of version 0.75. /// [Guid("D20EEBFA-12C1-4A86-B202-63121EB2A95B")] -[PlugIn("Appearance Serializer 0.75", "Serializer for the appearance of a player, compatible with the client of version 0.75.")] +[PlugIn] +[Display(Name = "Appearance Serializer 0.75", Description = "Serializer for the appearance of a player, compatible with the client of version 0.75.")] [MinimumClient(0, 75, ClientLanguage.Invariant)] public class AppearanceSerializer075 : IAppearanceSerializer { diff --git a/src/GameServer/RemoteView/AppearanceSerializer095.cs b/src/GameServer/RemoteView/AppearanceSerializer095.cs index baa1d622c..9bb6a076c 100644 --- a/src/GameServer/RemoteView/AppearanceSerializer095.cs +++ b/src/GameServer/RemoteView/AppearanceSerializer095.cs @@ -16,7 +16,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView; /// Serializer for the appearance of a player, compatible with the client of version 0.95. /// [Guid("99616318-38BC-4C0A-A818-29D821B78DE2")] -[PlugIn(nameof(AppearanceSerializer095), "Serializer for the appearance of a player, compatible with the client of version 0.95")] +[PlugIn] +[Display(Name = nameof(AppearanceSerializer095), Description = "Serializer for the appearance of a player, compatible with the client of version 0.95")] [MinimumClient(0, 95, ClientLanguage.Invariant)] public class AppearanceSerializer095 : IAppearanceSerializer { diff --git a/src/GameServer/RemoteView/AppearanceSerializerExtended.cs b/src/GameServer/RemoteView/AppearanceSerializerExtended.cs index 23cd45eec..3aa7adb59 100644 --- a/src/GameServer/RemoteView/AppearanceSerializerExtended.cs +++ b/src/GameServer/RemoteView/AppearanceSerializerExtended.cs @@ -16,7 +16,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView; /// Extended serializer for the appearance of a player. /// [Guid("A17EDFF7-236B-4EC9-899A-A6FC8BBA840C")] -[PlugIn("Extended appearance serializer", "Extended serializer for the appearance of a player.")] +[PlugIn] +[Display(Name = "Extended appearance serializer", Description = "Extended serializer for the appearance of a player.")] [MinimumClient(106, 3, ClientLanguage.Invariant)] public class AppearanceSerializerExtended : IAppearanceSerializer { diff --git a/src/GameServer/RemoteView/Character/AddExperienceExtendedPlugIn.cs b/src/GameServer/RemoteView/Character/AddExperienceExtendedPlugIn.cs index 6d71c7602..b5e434d69 100644 --- a/src/GameServer/RemoteView/Character/AddExperienceExtendedPlugIn.cs +++ b/src/GameServer/RemoteView/Character/AddExperienceExtendedPlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Character; /// /// The extended implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(AddExperienceExtendedPlugIn), "The extended implementation of the IAddExperiencePlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(AddExperienceExtendedPlugIn), Description = "The extended implementation of the IAddExperiencePlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("2C5AAEF1-47C9-498F-B3C1-D0F1B9AF0496")] [MinimumClient(106, 3, ClientLanguage.Invariant)] public class AddExperienceExtendedPlugIn : IAddExperiencePlugIn diff --git a/src/GameServer/RemoteView/Character/AddExperiencePlugIn.cs b/src/GameServer/RemoteView/Character/AddExperiencePlugIn.cs index a8c78782f..8099ac26b 100644 --- a/src/GameServer/RemoteView/Character/AddExperiencePlugIn.cs +++ b/src/GameServer/RemoteView/Character/AddExperiencePlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Character; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("AddExperiencePlugIn", "The default implementation of the IAddExperiencePlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "AddExperiencePlugIn", Description = "The default implementation of the IAddExperiencePlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("cc400edd-3540-4727-9b23-8c0ded4f0b00")] public class AddExperiencePlugIn : IAddExperiencePlugIn { diff --git a/src/GameServer/RemoteView/Character/ApplyKeyConfigurationPlugIn.cs b/src/GameServer/RemoteView/Character/ApplyKeyConfigurationPlugIn.cs index d547bc562..27b0d2187 100644 --- a/src/GameServer/RemoteView/Character/ApplyKeyConfigurationPlugIn.cs +++ b/src/GameServer/RemoteView/Character/ApplyKeyConfigurationPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Character; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("ApplyKeyConfigurationPlugIn", "The default implementation of the IUpdateVaultMoneyPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "ApplyKeyConfigurationPlugIn", Description = "The default implementation of the IUpdateVaultMoneyPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("6DFF0BF8-2E35-4C1D-9778-3406FCFB4716")] public class ApplyKeyConfigurationPlugIn : IApplyKeyConfigurationPlugIn { diff --git a/src/GameServer/RemoteView/Character/CharacterFocusedPlugIn.cs b/src/GameServer/RemoteView/Character/CharacterFocusedPlugIn.cs index e4596d1fb..ed0986f05 100644 --- a/src/GameServer/RemoteView/Character/CharacterFocusedPlugIn.cs +++ b/src/GameServer/RemoteView/Character/CharacterFocusedPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Character; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("CharacterFocusedPlugIn", "The default implementation of the ICharacterFocusedPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "CharacterFocusedPlugIn", Description = "The default implementation of the ICharacterFocusedPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("f6fa0149-3a2c-41c2-aeb1-94b647641ffb")] public class CharacterFocusedPlugIn : ICharacterFocusedPlugIn { diff --git a/src/GameServer/RemoteView/Character/FruitConsumptionResultPlugIn.cs b/src/GameServer/RemoteView/Character/FruitConsumptionResultPlugIn.cs index 4a2f7dbf7..f5e582fd1 100644 --- a/src/GameServer/RemoteView/Character/FruitConsumptionResultPlugIn.cs +++ b/src/GameServer/RemoteView/Character/FruitConsumptionResultPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Character; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("CharacterFocusedPlugIn", "The default implementation of the IFruitConsumptionResponsePlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "CharacterFocusedPlugIn", Description = "The default implementation of the IFruitConsumptionResponsePlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("0B4D7CA8-181B-4AB5-9522-C826F6311CD8")] public class FruitConsumptionResultPlugIn : IFruitConsumptionResponsePlugIn { diff --git a/src/GameServer/RemoteView/Character/MasterSkillLevelChangedPlugIn.cs b/src/GameServer/RemoteView/Character/MasterSkillLevelChangedPlugIn.cs index 469947c89..15d27bd27 100644 --- a/src/GameServer/RemoteView/Character/MasterSkillLevelChangedPlugIn.cs +++ b/src/GameServer/RemoteView/Character/MasterSkillLevelChangedPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Character; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("MasterSkillLevelChangedPlugIn", "The default implementation of the IMasterSkillLevelChangedPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "MasterSkillLevelChangedPlugIn", Description = "The default implementation of the IMasterSkillLevelChangedPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("0eba687e-c7af-421e-8e1e-921fcf31c027")] public class MasterSkillLevelChangedPlugIn : IMasterSkillLevelChangedPlugIn { diff --git a/src/GameServer/RemoteView/Character/ShowCharacterCreationFailedPlugIn.cs b/src/GameServer/RemoteView/Character/ShowCharacterCreationFailedPlugIn.cs index 59e86fbe8..7d52e8401 100644 --- a/src/GameServer/RemoteView/Character/ShowCharacterCreationFailedPlugIn.cs +++ b/src/GameServer/RemoteView/Character/ShowCharacterCreationFailedPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Character; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("ShowCharacterCreationFailedPlugIn", "The default implementation of the IShowCharacterCreationFailedPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "ShowCharacterCreationFailedPlugIn", Description = "The default implementation of the IShowCharacterCreationFailedPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("8fe59675-8625-4837-9872-e8d9c73471cd")] public class ShowCharacterCreationFailedPlugIn : IShowCharacterCreationFailedPlugIn { diff --git a/src/GameServer/RemoteView/Character/ShowCharacterDeleteResponsePlugIn.cs b/src/GameServer/RemoteView/Character/ShowCharacterDeleteResponsePlugIn.cs index 76dc144ef..a2a724bdd 100644 --- a/src/GameServer/RemoteView/Character/ShowCharacterDeleteResponsePlugIn.cs +++ b/src/GameServer/RemoteView/Character/ShowCharacterDeleteResponsePlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Character; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("ShowCharacterDeleteResponsePlugIn", "The default implementation of the IShowCharacterDeleteResponsePlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "ShowCharacterDeleteResponsePlugIn", Description = "The default implementation of the IShowCharacterDeleteResponsePlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("303af9ef-4f7d-4e07-9976-a0241311e50d")] public class ShowCharacterDeleteResponsePlugIn : IShowCharacterDeleteResponsePlugIn { diff --git a/src/GameServer/RemoteView/Character/ShowCharacterListExtendedPlugIn.cs b/src/GameServer/RemoteView/Character/ShowCharacterListExtendedPlugIn.cs index 1bbf9d045..c3587f723 100644 --- a/src/GameServer/RemoteView/Character/ShowCharacterListExtendedPlugIn.cs +++ b/src/GameServer/RemoteView/Character/ShowCharacterListExtendedPlugIn.cs @@ -18,7 +18,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Character; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(ShowCharacterListExtendedPlugIn), "The extended implementation of the IShowCharacterListPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(ShowCharacterListExtendedPlugIn), Description = "The extended implementation of the IShowCharacterListPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("DDDEED0A-9421-4A9B-9ED8-0691B7051666")] [MinimumClient(106, 3, ClientLanguage.Invariant)] public class ShowCharacterListExtendedPlugIn : IShowCharacterListPlugIn diff --git a/src/GameServer/RemoteView/Character/ShowCharacterListPlugIn.cs b/src/GameServer/RemoteView/Character/ShowCharacterListPlugIn.cs index 2e6b6239e..71d5f4ad6 100644 --- a/src/GameServer/RemoteView/Character/ShowCharacterListPlugIn.cs +++ b/src/GameServer/RemoteView/Character/ShowCharacterListPlugIn.cs @@ -18,7 +18,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Character; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("ShowCharacterListPlugIn", "The default implementation of the IShowCharacterListPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "ShowCharacterListPlugIn", Description = "The default implementation of the IShowCharacterListPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("9563dd2c-85cc-4b23-aa95-9d1a18582032")] [MinimumClient(5, 0, ClientLanguage.Invariant)] public class ShowCharacterListPlugIn : IShowCharacterListPlugIn diff --git a/src/GameServer/RemoteView/Character/ShowCharacterListPlugIn075.cs b/src/GameServer/RemoteView/Character/ShowCharacterListPlugIn075.cs index ccf65a2aa..cfdf6033d 100644 --- a/src/GameServer/RemoteView/Character/ShowCharacterListPlugIn075.cs +++ b/src/GameServer/RemoteView/Character/ShowCharacterListPlugIn075.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Character; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("ShowCharacterListPlugIn v0.75", "The implementation of the IShowCharacterListPlugIn which is forwarding everything to the game client with specific data packets for version 0.75.")] +[PlugIn] +[Display(Name = "ShowCharacterListPlugIn v0.75", Description = "The implementation of the IShowCharacterListPlugIn which is forwarding everything to the game client with specific data packets for version 0.75.")] [Guid("650A3478-729E-4995-ADAF-BDEB829A92E5")] [MinimumClient(0, 75, ClientLanguage.Invariant)] public class ShowCharacterListPlugIn075 : IShowCharacterListPlugIn diff --git a/src/GameServer/RemoteView/Character/ShowCharacterListPlugIn095.cs b/src/GameServer/RemoteView/Character/ShowCharacterListPlugIn095.cs index 531771173..0db63e7bf 100644 --- a/src/GameServer/RemoteView/Character/ShowCharacterListPlugIn095.cs +++ b/src/GameServer/RemoteView/Character/ShowCharacterListPlugIn095.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Character; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(ShowCharacterListPlugIn095), "The implementation of the IShowCharacterListPlugIn which is forwarding everything to the game client with specific data packets for version 0.75.")] +[PlugIn] +[Display(Name = nameof(ShowCharacterListPlugIn095), Description = "The implementation of the IShowCharacterListPlugIn which is forwarding everything to the game client with specific data packets for version 0.75.")] [Guid("004E97F5-5817-45F5-BB0E-D4F78007768C")] [MinimumClient(0, 95, ClientLanguage.Invariant)] public class ShowCharacterListPlugIn095 : IShowCharacterListPlugIn diff --git a/src/GameServer/RemoteView/Character/ShowCreatedCharacterPlugIn.cs b/src/GameServer/RemoteView/Character/ShowCreatedCharacterPlugIn.cs index 2c84ab9db..ce5a58029 100644 --- a/src/GameServer/RemoteView/Character/ShowCreatedCharacterPlugIn.cs +++ b/src/GameServer/RemoteView/Character/ShowCreatedCharacterPlugIn.cs @@ -16,7 +16,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Character; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("ShowCreatedCharacterPlugIn", "The default implementation of the IShowCreatedCharacterPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "ShowCreatedCharacterPlugIn", Description = "The default implementation of the IShowCreatedCharacterPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("f5494592-ff7b-4f7f-b0c1-bd242a69fb8f")] public class ShowCreatedCharacterPlugIn : IShowCreatedCharacterPlugIn { diff --git a/src/GameServer/RemoteView/Character/ShowDialogPlugIn.cs b/src/GameServer/RemoteView/Character/ShowDialogPlugIn.cs index 55c021460..e0c809289 100644 --- a/src/GameServer/RemoteView/Character/ShowDialogPlugIn.cs +++ b/src/GameServer/RemoteView/Character/ShowDialogPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Character; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("ShowDialogPlugIn", "The default implementation of the IShowDialogPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "ShowDialogPlugIn", Description = "The default implementation of the IShowDialogPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("DCAB5737-2B44-408F-A14D-C0FD3B5F6516")] public class ShowDialogPlugIn : IShowDialogPlugIn { diff --git a/src/GameServer/RemoteView/Character/ShowEffectPlugIn.cs b/src/GameServer/RemoteView/Character/ShowEffectPlugIn.cs index c2b55fe1d..4bbd14b89 100644 --- a/src/GameServer/RemoteView/Character/ShowEffectPlugIn.cs +++ b/src/GameServer/RemoteView/Character/ShowEffectPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Character; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("ShowEffectPlugIn", "The default implementation of the IShowEffectPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "ShowEffectPlugIn", Description = "The default implementation of the IShowEffectPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("EC433D54-F9CE-40FD-8848-F3515DDD43CF")] public class ShowEffectPlugIn : IShowEffectPlugIn { diff --git a/src/GameServer/RemoteView/Character/ShowItemDropEffectPlugIn.cs b/src/GameServer/RemoteView/Character/ShowItemDropEffectPlugIn.cs index ea5ed1dbd..8e80b6d37 100644 --- a/src/GameServer/RemoteView/Character/ShowItemDropEffectPlugIn.cs +++ b/src/GameServer/RemoteView/Character/ShowItemDropEffectPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Character; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(ShowItemDropEffectPlugIn), "The default implementation of the ShowItemDropEffectPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(ShowItemDropEffectPlugIn), Description = "The default implementation of the ShowItemDropEffectPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("AA949D5E-0CC6-424E-8412-DE12EA294E33")] public class ShowItemDropEffectPlugIn : IShowItemDropEffectPlugIn { diff --git a/src/GameServer/RemoteView/Character/SkillListViewPlugIn.cs b/src/GameServer/RemoteView/Character/SkillListViewPlugIn.cs index 2b01cfafa..63db82470 100644 --- a/src/GameServer/RemoteView/Character/SkillListViewPlugIn.cs +++ b/src/GameServer/RemoteView/Character/SkillListViewPlugIn.cs @@ -16,7 +16,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Character; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("SkillListViewPlugIn", "The default implementation of the ISkillListViewPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "SkillListViewPlugIn", Description = "The default implementation of the ISkillListViewPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("E67BB791-5BE7-4CC8-B2C9-38E86158A356")] [MinimumClient(3, 0, ClientLanguage.Invariant)] public class SkillListViewPlugIn : ISkillListViewPlugIn diff --git a/src/GameServer/RemoteView/Character/SkillListViewPlugIn075.cs b/src/GameServer/RemoteView/Character/SkillListViewPlugIn075.cs index d984c5658..51879b66a 100644 --- a/src/GameServer/RemoteView/Character/SkillListViewPlugIn075.cs +++ b/src/GameServer/RemoteView/Character/SkillListViewPlugIn075.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Character; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(SkillListViewPlugIn075), "The implementation of the ISkillListViewPlugIn for version 0.75 which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(SkillListViewPlugIn075), Description = "The implementation of the ISkillListViewPlugIn for version 0.75 which is forwarding everything to the game client with specific data packets.")] [Guid("D83A0CD8-AFEB-4782-8523-AF6D093D14CB")] public class SkillListViewPlugIn075 : SkillListViewPlugIn { diff --git a/src/GameServer/RemoteView/Character/SkillListViewPlugIn095.cs b/src/GameServer/RemoteView/Character/SkillListViewPlugIn095.cs index ee9180d0d..f62d24554 100644 --- a/src/GameServer/RemoteView/Character/SkillListViewPlugIn095.cs +++ b/src/GameServer/RemoteView/Character/SkillListViewPlugIn095.cs @@ -17,7 +17,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Character; /// /// Version 0.97d seems to be compatible to this implementation. This may be true until the end of season 2, but we're not sure. /// -[PlugIn(nameof(SkillListViewPlugIn095), "The implementation of the ISkillListViewPlugIn for version 0.95 which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(SkillListViewPlugIn095), Description = "The implementation of the ISkillListViewPlugIn for version 0.95 which is forwarding everything to the game client with specific data packets.")] [Guid("60126898-8668-4774-B879-0F211CDD3617")] [MinimumClient(0, 95, ClientLanguage.Invariant)] public class SkillListViewPlugIn095 : SkillListViewPlugIn075 diff --git a/src/GameServer/RemoteView/Character/StatIncreaseResultExtendedPlugIn.cs b/src/GameServer/RemoteView/Character/StatIncreaseResultExtendedPlugIn.cs index d315fba8f..250573d78 100644 --- a/src/GameServer/RemoteView/Character/StatIncreaseResultExtendedPlugIn.cs +++ b/src/GameServer/RemoteView/Character/StatIncreaseResultExtendedPlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Character; /// /// The extended implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("StatIncreaseResultPlugIn", "The extended implementation of the IStatIncreaseResultPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "StatIncreaseResultPlugIn", Description = "The extended implementation of the IStatIncreaseResultPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("4B9AEFF1-B139-45F9-9277-0FBDA7A3C020")] [MinimumClient(106, 3, ClientLanguage.Invariant)] public class StatIncreaseResultExtendedPlugIn : IStatIncreaseResultPlugIn diff --git a/src/GameServer/RemoteView/Character/StatIncreaseResultPlugIn.cs b/src/GameServer/RemoteView/Character/StatIncreaseResultPlugIn.cs index d8eb4473b..5dc29d644 100644 --- a/src/GameServer/RemoteView/Character/StatIncreaseResultPlugIn.cs +++ b/src/GameServer/RemoteView/Character/StatIncreaseResultPlugIn.cs @@ -17,7 +17,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Character; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("StatIncreaseResultPlugIn", "The default implementation of the IStatIncreaseResultPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "StatIncreaseResultPlugIn", Description = "The default implementation of the IStatIncreaseResultPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("ce603b3c-cf25-426f-9cb9-5cc367843de8")] public class StatIncreaseResultPlugIn : IStatIncreaseResultPlugIn { diff --git a/src/GameServer/RemoteView/Character/UpdateCharacterBaseStatsExtendedPlugIn.cs b/src/GameServer/RemoteView/Character/UpdateCharacterBaseStatsExtendedPlugIn.cs index d44f90636..e2b833128 100644 --- a/src/GameServer/RemoteView/Character/UpdateCharacterBaseStatsExtendedPlugIn.cs +++ b/src/GameServer/RemoteView/Character/UpdateCharacterBaseStatsExtendedPlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Character; /// /// The extended implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(UpdateCharacterBaseStatsExtendedPlugIn), "The extended implementation of the IUpdateCharacterBaseStatsPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(UpdateCharacterBaseStatsExtendedPlugIn), Description = "The extended implementation of the IUpdateCharacterBaseStatsPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("851C4579-FB3D-454C-A238-217542E8E6B9")] [MinimumClient(106, 3, ClientLanguage.Invariant)] public class UpdateCharacterBaseStatsExtendedPlugIn : IUpdateCharacterBaseStatsPlugIn diff --git a/src/GameServer/RemoteView/Character/UpdateCharacterHeroStatePlugIn.cs b/src/GameServer/RemoteView/Character/UpdateCharacterHeroStatePlugIn.cs index 506efa064..91314f0c9 100644 --- a/src/GameServer/RemoteView/Character/UpdateCharacterHeroStatePlugIn.cs +++ b/src/GameServer/RemoteView/Character/UpdateCharacterHeroStatePlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Character; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("UpdateCharacterHeroStatePlugIn", "The default implementation of the IUpdateCharacterHeroStatePlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "UpdateCharacterHeroStatePlugIn", Description = "The default implementation of the IUpdateCharacterHeroStatePlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("d1ce36d6-cbdd-4bcb-99c7-c7495d8597d9")] public class UpdateCharacterHeroStatePlugIn : IUpdateCharacterHeroStatePlugIn { diff --git a/src/GameServer/RemoteView/Character/UpdateCharacterStatsExtendedPlugIn.cs b/src/GameServer/RemoteView/Character/UpdateCharacterStatsExtendedPlugIn.cs index 64ba409a0..84f64c991 100644 --- a/src/GameServer/RemoteView/Character/UpdateCharacterStatsExtendedPlugIn.cs +++ b/src/GameServer/RemoteView/Character/UpdateCharacterStatsExtendedPlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Character; /// /// The extended implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(UpdateCharacterStatsExtendedPlugIn), "The extended implementation of the IUpdateCharacterStatsPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(UpdateCharacterStatsExtendedPlugIn), Description = "The extended implementation of the IUpdateCharacterStatsPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("851C4579-FB3D-454C-A238-217542E8E6B8")] [MinimumClient(106, 3, ClientLanguage.Invariant)] public class UpdateCharacterStatsExtendedPlugIn : IUpdateCharacterStatsPlugIn diff --git a/src/GameServer/RemoteView/Character/UpdateCharacterStatsPlugIn.cs b/src/GameServer/RemoteView/Character/UpdateCharacterStatsPlugIn.cs index 655e919e8..84ae1c02c 100644 --- a/src/GameServer/RemoteView/Character/UpdateCharacterStatsPlugIn.cs +++ b/src/GameServer/RemoteView/Character/UpdateCharacterStatsPlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Character; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("UpdateCharacterStatsPlugIn", "The default implementation of the IUpdateCharacterStatsPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "UpdateCharacterStatsPlugIn", Description = "The default implementation of the IUpdateCharacterStatsPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("6eb967c2-b5a2-4510-9d88-5eccc963a6ea")] [MinimumClient(5, 0, ClientLanguage.Invariant)] public class UpdateCharacterStatsPlugIn : IUpdateCharacterStatsPlugIn diff --git a/src/GameServer/RemoteView/Character/UpdateCharacterStatsPlugIn075.cs b/src/GameServer/RemoteView/Character/UpdateCharacterStatsPlugIn075.cs index 9faf9cc28..a22281d38 100644 --- a/src/GameServer/RemoteView/Character/UpdateCharacterStatsPlugIn075.cs +++ b/src/GameServer/RemoteView/Character/UpdateCharacterStatsPlugIn075.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Character; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("UpdateCharacterStatsPlugIn 0.75", "The default implementation of the IUpdateCharacterStatsPlugIn which is forwarding everything to the game client with specific data packets for version 0.75.")] +[PlugIn] +[Display(Name = "UpdateCharacterStatsPlugIn 0.75", Description = "The default implementation of the IUpdateCharacterStatsPlugIn which is forwarding everything to the game client with specific data packets for version 0.75.")] [Guid("C180561D-E055-41CA-817C-44E7A985937C")] [MinimumClient(0, 75, ClientLanguage.Invariant)] public class UpdateCharacterStatsPlugIn075 : IUpdateCharacterStatsPlugIn diff --git a/src/GameServer/RemoteView/Character/UpdateCharacterStatsPlugIn097.cs b/src/GameServer/RemoteView/Character/UpdateCharacterStatsPlugIn097.cs index 1c907e812..2ce472a98 100644 --- a/src/GameServer/RemoteView/Character/UpdateCharacterStatsPlugIn097.cs +++ b/src/GameServer/RemoteView/Character/UpdateCharacterStatsPlugIn097.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Character; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(UpdateCharacterStatsPlugIn097), "The default implementation of the IUpdateCharacterStatsPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(UpdateCharacterStatsPlugIn097), Description = "The default implementation of the IUpdateCharacterStatsPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("8ACD9D6B-6FA7-42C3-8C07-E137655CB92F")] [MinimumClient(0, 97, ClientLanguage.Invariant)] public class UpdateCharacterStatsPlugIn097 : IUpdateCharacterStatsPlugIn diff --git a/src/GameServer/RemoteView/Character/UpdateLevelExtendedPlugIn.cs b/src/GameServer/RemoteView/Character/UpdateLevelExtendedPlugIn.cs index e75e26126..fc68fd427 100644 --- a/src/GameServer/RemoteView/Character/UpdateLevelExtendedPlugIn.cs +++ b/src/GameServer/RemoteView/Character/UpdateLevelExtendedPlugIn.cs @@ -17,7 +17,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Character; /// /// The extended implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(UpdateLevelExtendedPlugIn), "The extended implementation of the IUpdateLevelPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(UpdateLevelExtendedPlugIn), Description = "The extended implementation of the IUpdateLevelPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("6F358202-6678-4417-9537-D8739AEF78C2")] [MinimumClient(106, 3, ClientLanguage.Invariant)] public class UpdateLevelExtendedPlugIn : IUpdateLevelPlugIn diff --git a/src/GameServer/RemoteView/Character/UpdateLevelPlugIn.cs b/src/GameServer/RemoteView/Character/UpdateLevelPlugIn.cs index 846553fcb..8cf1d4922 100644 --- a/src/GameServer/RemoteView/Character/UpdateLevelPlugIn.cs +++ b/src/GameServer/RemoteView/Character/UpdateLevelPlugIn.cs @@ -16,7 +16,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Character; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("UpdateLevelPlugIn", "The default implementation of the IUpdateLevelPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "UpdateLevelPlugIn", Description = "The default implementation of the IUpdateLevelPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("1ff3709e-d99b-4c00-b926-efce281b3997")] public class UpdateLevelPlugIn : IUpdateLevelPlugIn { diff --git a/src/GameServer/RemoteView/Character/UpdateMasterSkillsPlugIn.cs b/src/GameServer/RemoteView/Character/UpdateMasterSkillsPlugIn.cs index 86c675442..1e7628991 100644 --- a/src/GameServer/RemoteView/Character/UpdateMasterSkillsPlugIn.cs +++ b/src/GameServer/RemoteView/Character/UpdateMasterSkillsPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Character; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("UpdateMasterSkillsPlugIn", "The default implementation of the IUpdateMasterSkillsPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "UpdateMasterSkillsPlugIn", Description = "The default implementation of the IUpdateMasterSkillsPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("72942fe8-925d-43b0-a908-b814b2baa1f3")] public class UpdateMasterSkillsPlugIn : IUpdateMasterSkillsPlugIn { diff --git a/src/GameServer/RemoteView/Character/UpdateMasterStatsExtendedPlugIn.cs b/src/GameServer/RemoteView/Character/UpdateMasterStatsExtendedPlugIn.cs index f208797ed..8faa9d050 100644 --- a/src/GameServer/RemoteView/Character/UpdateMasterStatsExtendedPlugIn.cs +++ b/src/GameServer/RemoteView/Character/UpdateMasterStatsExtendedPlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Character; /// /// The extended implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(UpdateMasterStatsExtendedPlugIn), "The extended implementation of the IUpdateMasterStatsPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(UpdateMasterStatsExtendedPlugIn), Description = "The extended implementation of the IUpdateMasterStatsPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("EF19E11B-AE26-44F0-AB3E-5ADD5CDEBC56")] [MinimumClient(106, 3, ClientLanguage.Invariant)] public class UpdateMasterStatsExtendedPlugIn : IUpdateMasterStatsPlugIn diff --git a/src/GameServer/RemoteView/Character/UpdateMasterStatsPlugIn.cs b/src/GameServer/RemoteView/Character/UpdateMasterStatsPlugIn.cs index 364ad4599..1c347f946 100644 --- a/src/GameServer/RemoteView/Character/UpdateMasterStatsPlugIn.cs +++ b/src/GameServer/RemoteView/Character/UpdateMasterStatsPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Character; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("UpdateMasterStatsPlugIn", "The default implementation of the IUpdateMasterStatsPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "UpdateMasterStatsPlugIn", Description = "The default implementation of the IUpdateMasterStatsPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("41b27ec2-5bc6-4acf-b395-ddf9e81a3611")] public class UpdateMasterStatsPlugIn : IUpdateMasterStatsPlugIn { diff --git a/src/GameServer/RemoteView/Character/UpdateStatsExtendedPlugIn.cs b/src/GameServer/RemoteView/Character/UpdateStatsExtendedPlugIn.cs index acf506406..2d3351100 100644 --- a/src/GameServer/RemoteView/Character/UpdateStatsExtendedPlugIn.cs +++ b/src/GameServer/RemoteView/Character/UpdateStatsExtendedPlugIn.cs @@ -16,7 +16,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Character; /// /// The extended implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(UpdateStatsExtendedPlugIn), "The extended implementation of the IUpdateStatsPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(UpdateStatsExtendedPlugIn), Description = "The extended implementation of the IUpdateStatsPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("E9A1CCBE-416F-41BA-8E74-74CBEB7042DD")] [MinimumClient(106, 3, ClientLanguage.Invariant)] public class UpdateStatsExtendedPlugIn : UpdateStatsBasePlugIn diff --git a/src/GameServer/RemoteView/Character/UpdateStatsPlugIn.cs b/src/GameServer/RemoteView/Character/UpdateStatsPlugIn.cs index 954025cba..b30a9ce9a 100644 --- a/src/GameServer/RemoteView/Character/UpdateStatsPlugIn.cs +++ b/src/GameServer/RemoteView/Character/UpdateStatsPlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Character; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(UpdateStatsPlugIn), "The default implementation of the IUpdateStatsPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(UpdateStatsPlugIn), Description = "The default implementation of the IUpdateStatsPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("2A8BFB0C-2AFF-4A52-B390-5A68D5C5F26A")] public class UpdateStatsPlugIn : UpdateStatsBasePlugIn { diff --git a/src/GameServer/RemoteView/ChatViewPlugIn.cs b/src/GameServer/RemoteView/ChatViewPlugIn.cs index 15e47ebb4..df48d2cc2 100644 --- a/src/GameServer/RemoteView/ChatViewPlugIn.cs +++ b/src/GameServer/RemoteView/ChatViewPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView; /// /// The default implementation of the chat view which is forwarding everything to the game client which specific data packets. /// -[PlugIn("Chat View PlugIn", "View Plugin to send chat messages to the player")] +[PlugIn] +[Display(Name = "Chat View PlugIn", Description = "View Plugin to send chat messages to the player")] [Guid("F0B5BAD4-B97C-49F1-84E0-25EDC796B0E4")] public class ChatViewPlugIn : IChatViewPlugIn { diff --git a/src/GameServer/RemoteView/ConsumeSpecialItemPlugIn.cs b/src/GameServer/RemoteView/ConsumeSpecialItemPlugIn.cs index 2cacedbc7..b3a885e64 100644 --- a/src/GameServer/RemoteView/ConsumeSpecialItemPlugIn.cs +++ b/src/GameServer/RemoteView/ConsumeSpecialItemPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(ConsumeSpecialItemPlugIn), "The default implementation of the IConsumeSpecialItemPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(ConsumeSpecialItemPlugIn), Description = "The default implementation of the IConsumeSpecialItemPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("a31546d8-bf79-43dd-872c-52f24ea9bca9")] public class ConsumeSpecialItemPlugIn : IConsumeSpecialItemPlugIn { diff --git a/src/GameServer/RemoteView/Duel/DuelEndedPlugIn.cs b/src/GameServer/RemoteView/Duel/DuelEndedPlugIn.cs index 63bda0222..f10f1bfbe 100644 --- a/src/GameServer/RemoteView/Duel/DuelEndedPlugIn.cs +++ b/src/GameServer/RemoteView/Duel/DuelEndedPlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Duel; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(DuelEndedPlugIn), "The default implementation of the IDuelEndedPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(DuelEndedPlugIn), Description = "The default implementation of the IDuelEndedPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("4FBC822B-F35B-4CB1-AFE6-180243171074")] [MinimumClient(4, 0, ClientLanguage.Invariant)] public class DuelEndedPlugIn : IDuelEndedPlugIn diff --git a/src/GameServer/RemoteView/Duel/DuelFinishedPlugIn.cs b/src/GameServer/RemoteView/Duel/DuelFinishedPlugIn.cs index df16e8e33..6d4050e9d 100644 --- a/src/GameServer/RemoteView/Duel/DuelFinishedPlugIn.cs +++ b/src/GameServer/RemoteView/Duel/DuelFinishedPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Duel; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(DuelFinishedPlugIn), "The default implementation of the IDuelFinishedPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(DuelFinishedPlugIn), Description = "The default implementation of the IDuelFinishedPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("0DA9F6D1-3DC2-4A75-BA9C-BB77C2A7EB62")] [MinimumClient(4, 0, ClientLanguage.Invariant)] public class DuelFinishedPlugIn : IDuelFinishedPlugIn diff --git a/src/GameServer/RemoteView/Duel/DuelHealthUpdatePlugIn.cs b/src/GameServer/RemoteView/Duel/DuelHealthUpdatePlugIn.cs index a268f8aaa..1fd885647 100644 --- a/src/GameServer/RemoteView/Duel/DuelHealthUpdatePlugIn.cs +++ b/src/GameServer/RemoteView/Duel/DuelHealthUpdatePlugIn.cs @@ -16,7 +16,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Duel; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(DuelHealthUpdatePlugIn), "The default implementation of the IDuelHealthUpdatePlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(DuelHealthUpdatePlugIn), Description = "The default implementation of the IDuelHealthUpdatePlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("40CE7F73-F9DF-4F4E-BBCE-04938604A72C")] [MinimumClient(4, 0, ClientLanguage.Invariant)] public class DuelHealthUpdatePlugIn : IDuelHealthUpdatePlugIn diff --git a/src/GameServer/RemoteView/Duel/DuelSpectatorAddedPlugIn.cs b/src/GameServer/RemoteView/Duel/DuelSpectatorAddedPlugIn.cs index fc1a5707b..821a82d03 100644 --- a/src/GameServer/RemoteView/Duel/DuelSpectatorAddedPlugIn.cs +++ b/src/GameServer/RemoteView/Duel/DuelSpectatorAddedPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Duel; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(DuelSpectatorAddedPlugIn), "The default implementation of the IDuelSpectatorAddedPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(DuelSpectatorAddedPlugIn), Description = "The default implementation of the IDuelSpectatorAddedPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("BB91E97F-E1F9-4152-9AA1-573D917ACD35")] [MinimumClient(4, 0, ClientLanguage.Invariant)] public class DuelSpectatorAddedPlugIn : IDuelSpectatorAddedPlugIn diff --git a/src/GameServer/RemoteView/Duel/DuelSpectatorListUpdatePlugIn.cs b/src/GameServer/RemoteView/Duel/DuelSpectatorListUpdatePlugIn.cs index 92102583b..84137c102 100644 --- a/src/GameServer/RemoteView/Duel/DuelSpectatorListUpdatePlugIn.cs +++ b/src/GameServer/RemoteView/Duel/DuelSpectatorListUpdatePlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Duel; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(DuelSpectatorListUpdatePlugIn), "The default implementation of the IDuelSpectatorListUpdatePlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(DuelSpectatorListUpdatePlugIn), Description = "The default implementation of the IDuelSpectatorListUpdatePlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("1A8EC472-6924-4150-9B4C-4352AFF03AC0")] [MinimumClient(4, 0, ClientLanguage.Invariant)] public class DuelSpectatorListUpdatePlugIn : IDuelSpectatorListUpdatePlugIn diff --git a/src/GameServer/RemoteView/Duel/DuelSpectatorRemovedPlugIn.cs b/src/GameServer/RemoteView/Duel/DuelSpectatorRemovedPlugIn.cs index ed9557721..d6b508d5f 100644 --- a/src/GameServer/RemoteView/Duel/DuelSpectatorRemovedPlugIn.cs +++ b/src/GameServer/RemoteView/Duel/DuelSpectatorRemovedPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Duel; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(DuelSpectatorRemovedPlugIn), "The default implementation of the IDuelSpectatorRemovedPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(DuelSpectatorRemovedPlugIn), Description = "The default implementation of the IDuelSpectatorRemovedPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("89DFA45D-FED2-4FAA-BDB0-683EB337629B")] [MinimumClient(4, 0, ClientLanguage.Invariant)] public class DuelSpectatorRemovedPlugIn : IDuelSpectatorRemovedPlugIn diff --git a/src/GameServer/RemoteView/Duel/DuelStatusUpdatePlugIn.cs b/src/GameServer/RemoteView/Duel/DuelStatusUpdatePlugIn.cs index ffa4a0cfb..f8caf0501 100644 --- a/src/GameServer/RemoteView/Duel/DuelStatusUpdatePlugIn.cs +++ b/src/GameServer/RemoteView/Duel/DuelStatusUpdatePlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Duel; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(DuelStatusUpdatePlugIn), "The default implementation of the IDuelStatusUpdatePlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(DuelStatusUpdatePlugIn), Description = "The default implementation of the IDuelStatusUpdatePlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("9C37DF93-7E1C-44BB-914D-DB8B3F96FEE0")] [MinimumClient(4, 0, ClientLanguage.Invariant)] public class DuelStatusUpdatePlugIn : IDuelStatusUpdatePlugIn diff --git a/src/GameServer/RemoteView/Duel/InitializeDuelPlugIn.cs b/src/GameServer/RemoteView/Duel/InitializeDuelPlugIn.cs index acaa5b71c..29c9c9a9c 100644 --- a/src/GameServer/RemoteView/Duel/InitializeDuelPlugIn.cs +++ b/src/GameServer/RemoteView/Duel/InitializeDuelPlugIn.cs @@ -16,7 +16,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Duel; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(InitializeDuelPlugIn), "The default implementation of the IInitializeDuelPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(InitializeDuelPlugIn), Description = "The default implementation of the IInitializeDuelPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("41ECFA38-3EAE-4408-B7AC-82F26D8DCCD7")] [MinimumClient(4, 0, ClientLanguage.Invariant)] public class InitializeDuelPlugIn : IInitializeDuelPlugIn diff --git a/src/GameServer/RemoteView/Duel/ShowDuelRequestPlugIn.cs b/src/GameServer/RemoteView/Duel/ShowDuelRequestPlugIn.cs index 7d5395325..1cc21a428 100644 --- a/src/GameServer/RemoteView/Duel/ShowDuelRequestPlugIn.cs +++ b/src/GameServer/RemoteView/Duel/ShowDuelRequestPlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Duel; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(ShowDuelRequestPlugIn), "The default implementation of the IShowDuelRequestPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(ShowDuelRequestPlugIn), Description = "The default implementation of the IShowDuelRequestPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("708847EE-B64F-42A3-BDAC-C4FD2417B6A5")] [MinimumClient(4, 0, ClientLanguage.Invariant)] public class ShowDuelRequestPlugIn : IShowDuelRequestPlugIn diff --git a/src/GameServer/RemoteView/Duel/ShowDuelRequestResultPlugIn.cs b/src/GameServer/RemoteView/Duel/ShowDuelRequestResultPlugIn.cs index 9e7819f67..5dab20cd4 100644 --- a/src/GameServer/RemoteView/Duel/ShowDuelRequestResultPlugIn.cs +++ b/src/GameServer/RemoteView/Duel/ShowDuelRequestResultPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Duel; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(ShowDuelRequestResultPlugIn), "The default implementation of the IShowDuelRequestResultPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(ShowDuelRequestResultPlugIn), Description = "The default implementation of the IShowDuelRequestResultPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("3A389377-71BC-4EEB-922E-00B343DF1893")] public class ShowDuelRequestResultPlugIn : IShowDuelRequestResultPlugIn { diff --git a/src/GameServer/RemoteView/Duel/ShowDuelScoreUpdatePlugIn.cs b/src/GameServer/RemoteView/Duel/ShowDuelScoreUpdatePlugIn.cs index 56b62f86b..09201d85d 100644 --- a/src/GameServer/RemoteView/Duel/ShowDuelScoreUpdatePlugIn.cs +++ b/src/GameServer/RemoteView/Duel/ShowDuelScoreUpdatePlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Duel; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(ShowDuelScoreUpdatePlugIn), "The default implementation of the IShowDuelScoreUpdatePlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(ShowDuelScoreUpdatePlugIn), Description = "The default implementation of the IShowDuelScoreUpdatePlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("328E366D-B801-4780-B65D-B250C388E6B0")] [MinimumClient(4, 0, ClientLanguage.Invariant)] public class ShowDuelScoreUpdatePlugIn : IShowDuelScoreUpdatePlugIn diff --git a/src/GameServer/RemoteView/Guild/AssignPlayersToGuildPlugIn.cs b/src/GameServer/RemoteView/Guild/AssignPlayersToGuildPlugIn.cs index e3a855b95..1579ebdeb 100644 --- a/src/GameServer/RemoteView/Guild/AssignPlayersToGuildPlugIn.cs +++ b/src/GameServer/RemoteView/Guild/AssignPlayersToGuildPlugIn.cs @@ -16,7 +16,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Guild; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(AssignPlayersToGuildPlugIn), "The default implementation of the IAssignPlayersToGuildPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(AssignPlayersToGuildPlugIn), Description = "The default implementation of the IAssignPlayersToGuildPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("f42f571e-0cd1-4c22-ba53-8344848ba998")] [MinimumClient(0, 90, ClientLanguage.Invariant)] public class AssignPlayersToGuildPlugIn : IAssignPlayersToGuildPlugIn diff --git a/src/GameServer/RemoteView/Guild/AssignPlayersToGuildPlugIn075.cs b/src/GameServer/RemoteView/Guild/AssignPlayersToGuildPlugIn075.cs index 3c88e5bdb..3f5807814 100644 --- a/src/GameServer/RemoteView/Guild/AssignPlayersToGuildPlugIn075.cs +++ b/src/GameServer/RemoteView/Guild/AssignPlayersToGuildPlugIn075.cs @@ -16,7 +16,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Guild; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(AssignPlayersToGuildPlugIn075), "The default implementation of the IAssignPlayersToGuildPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(AssignPlayersToGuildPlugIn075), Description = "The default implementation of the IAssignPlayersToGuildPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("ABFA2CBD-1AB0-4F56-97A7-FCF458865ACF")] [MaximumClient(0, 89, ClientLanguage.Invariant)] public class AssignPlayersToGuildPlugIn075 : BaseGuildInfoPlugIn, IAssignPlayersToGuildPlugIn diff --git a/src/GameServer/RemoteView/Guild/GuildJoinResponsePlugIn.cs b/src/GameServer/RemoteView/Guild/GuildJoinResponsePlugIn.cs index 9840d6e53..0ea53d745 100644 --- a/src/GameServer/RemoteView/Guild/GuildJoinResponsePlugIn.cs +++ b/src/GameServer/RemoteView/Guild/GuildJoinResponsePlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Guild; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("GuildJoinResponsePlugIn", "The default implementation of the IGuildJoinResponsePlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "GuildJoinResponsePlugIn", Description = "The default implementation of the IGuildJoinResponsePlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("4a8bd97c-a544-4cac-b8cd-2e73945bcfdc")] public class GuildJoinResponsePlugIn : IGuildJoinResponsePlugIn { diff --git a/src/GameServer/RemoteView/Guild/GuildKickResultPlugIn.cs b/src/GameServer/RemoteView/Guild/GuildKickResultPlugIn.cs index d1ae5722d..1d3e788ae 100644 --- a/src/GameServer/RemoteView/Guild/GuildKickResultPlugIn.cs +++ b/src/GameServer/RemoteView/Guild/GuildKickResultPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Guild; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("GuildKickResultPlugIn", "The default implementation of the IGuildKickResultPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "GuildKickResultPlugIn", Description = "The default implementation of the IGuildKickResultPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("0e91e131-12c4-4add-9439-febb7d444083")] public class GuildKickResultPlugIn : IGuildKickResultPlugIn { diff --git a/src/GameServer/RemoteView/Guild/GuildWarScoreUpdatePlugIn.cs b/src/GameServer/RemoteView/Guild/GuildWarScoreUpdatePlugIn.cs index d7d658bf2..03d841113 100644 --- a/src/GameServer/RemoteView/Guild/GuildWarScoreUpdatePlugIn.cs +++ b/src/GameServer/RemoteView/Guild/GuildWarScoreUpdatePlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Guild; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(IGuildWarScoreUpdatePlugIn), "The default implementation of the IGuildWarScoreUpdatePlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(IGuildWarScoreUpdatePlugIn), Description = "The default implementation of the IGuildWarScoreUpdatePlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("24E5E0C1-DAE7-4E34-810D-C622F8F9B70F")] public class GuildWarScoreUpdatePlugIn : IGuildWarScoreUpdatePlugIn { diff --git a/src/GameServer/RemoteView/Guild/PlayerLeftGuildPlugIn.cs b/src/GameServer/RemoteView/Guild/PlayerLeftGuildPlugIn.cs index 027aff6a5..7ac27c972 100644 --- a/src/GameServer/RemoteView/Guild/PlayerLeftGuildPlugIn.cs +++ b/src/GameServer/RemoteView/Guild/PlayerLeftGuildPlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Guild; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("PlayerLeftGuildPlugIn", "The default implementation of the IPlayerLeftGuildPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "PlayerLeftGuildPlugIn", Description = "The default implementation of the IPlayerLeftGuildPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("e37868e8-6fdf-41fb-aa7f-01e6f569f5c0")] public class PlayerLeftGuildPlugIn : IPlayerLeftGuildPlugIn { diff --git a/src/GameServer/RemoteView/Guild/ShowGuildCreateResultPlugIn.cs b/src/GameServer/RemoteView/Guild/ShowGuildCreateResultPlugIn.cs index d54ab8a40..788d105bb 100644 --- a/src/GameServer/RemoteView/Guild/ShowGuildCreateResultPlugIn.cs +++ b/src/GameServer/RemoteView/Guild/ShowGuildCreateResultPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Guild; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("ShowGuildCreateResultPlugIn", "The default implementation of the IShowGuildCreateResultPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "ShowGuildCreateResultPlugIn", Description = "The default implementation of the IShowGuildCreateResultPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("ff6c5a06-4699-461b-9004-756269393c40")] public class ShowGuildCreateResultPlugIn : IShowGuildCreateResultPlugIn { diff --git a/src/GameServer/RemoteView/Guild/ShowGuildCreationDialogPlugIn.cs b/src/GameServer/RemoteView/Guild/ShowGuildCreationDialogPlugIn.cs index 4950cd407..33a061898 100644 --- a/src/GameServer/RemoteView/Guild/ShowGuildCreationDialogPlugIn.cs +++ b/src/GameServer/RemoteView/Guild/ShowGuildCreationDialogPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Guild; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("ShowGuildCreationDialogPlugIn", "The default implementation of the IShowGuildCreationDialogPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "ShowGuildCreationDialogPlugIn", Description = "The default implementation of the IShowGuildCreationDialogPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("ed6fbe5f-7a27-477d-b238-e6e77cf113d8")] public class ShowGuildCreationDialogPlugIn : IShowGuildCreationDialogPlugIn { diff --git a/src/GameServer/RemoteView/Guild/ShowGuildInfoPlugIn.cs b/src/GameServer/RemoteView/Guild/ShowGuildInfoPlugIn.cs index 204e2cb46..7bbbae3a0 100644 --- a/src/GameServer/RemoteView/Guild/ShowGuildInfoPlugIn.cs +++ b/src/GameServer/RemoteView/Guild/ShowGuildInfoPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Guild; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("ShowGuildInfoPlugIn", "The default implementation of the IShowGuildInfoPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "ShowGuildInfoPlugIn", Description = "The default implementation of the IShowGuildInfoPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("65f9d310-4adf-48b4-ace2-16779b254ecf")] public class ShowGuildInfoPlugIn : BaseGuildInfoPlugIn, IShowGuildInfoPlugIn { diff --git a/src/GameServer/RemoteView/Guild/ShowGuildJoinRequestPlugIn.cs b/src/GameServer/RemoteView/Guild/ShowGuildJoinRequestPlugIn.cs index 76c3ed09d..6152fc31c 100644 --- a/src/GameServer/RemoteView/Guild/ShowGuildJoinRequestPlugIn.cs +++ b/src/GameServer/RemoteView/Guild/ShowGuildJoinRequestPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Guild; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("ShowGuildJoinRequestPlugIn", "The default implementation of the IShowGuildJoinRequestPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "ShowGuildJoinRequestPlugIn", Description = "The default implementation of the IShowGuildJoinRequestPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("521ff03d-c8ad-44d9-a23d-8f98c4c174ae")] public class ShowGuildJoinRequestPlugIn : IShowGuildJoinRequestPlugIn { diff --git a/src/GameServer/RemoteView/Guild/ShowGuildListPlugIn.cs b/src/GameServer/RemoteView/Guild/ShowGuildListPlugIn.cs index c00af0683..626146fc2 100644 --- a/src/GameServer/RemoteView/Guild/ShowGuildListPlugIn.cs +++ b/src/GameServer/RemoteView/Guild/ShowGuildListPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Guild; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(ShowGuildListPlugIn), "The default implementation of the IShowGuildListPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(ShowGuildListPlugIn), Description = "The default implementation of the IShowGuildListPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("f72a9968-100b-481f-aba1-1dd597fdad47")] [MinimumClient(0, 90, ClientLanguage.Invariant)] public class ShowGuildListPlugIn : IShowGuildListPlugIn diff --git a/src/GameServer/RemoteView/Guild/ShowGuildListPlugIn075.cs b/src/GameServer/RemoteView/Guild/ShowGuildListPlugIn075.cs index bc28dd05e..83378fbf8 100644 --- a/src/GameServer/RemoteView/Guild/ShowGuildListPlugIn075.cs +++ b/src/GameServer/RemoteView/Guild/ShowGuildListPlugIn075.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Guild; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(ShowGuildListPlugIn075), "The default implementation of the IShowGuildListPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(ShowGuildListPlugIn075), Description = "The default implementation of the IShowGuildListPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("1A7148DF-6E1B-47C7-9148-426F5E35F421")] [MaximumClient(0, 89, ClientLanguage.Invariant)] public class ShowGuildListPlugIn075 : IShowGuildListPlugIn diff --git a/src/GameServer/RemoteView/Guild/ShowGuildMasterDialogPlugIn.cs b/src/GameServer/RemoteView/Guild/ShowGuildMasterDialogPlugIn.cs index 3f1370933..76d273513 100644 --- a/src/GameServer/RemoteView/Guild/ShowGuildMasterDialogPlugIn.cs +++ b/src/GameServer/RemoteView/Guild/ShowGuildMasterDialogPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Guild; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("ShowGuildMasterDialogPlugIn", "The default implementation of the IShowGuildMasterDialogPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "ShowGuildMasterDialogPlugIn", Description = "The default implementation of the IShowGuildMasterDialogPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("77d430e0-8bed-425b-8bb5-7bbafa9bfbff")] public class ShowGuildMasterDialogPlugIn : IShowGuildMasterDialogPlugIn { diff --git a/src/GameServer/RemoteView/Guild/ShowGuildWarDeclaredPlugIn.cs b/src/GameServer/RemoteView/Guild/ShowGuildWarDeclaredPlugIn.cs index 51d5008f6..9aec4a131 100644 --- a/src/GameServer/RemoteView/Guild/ShowGuildWarDeclaredPlugIn.cs +++ b/src/GameServer/RemoteView/Guild/ShowGuildWarDeclaredPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Guild; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(ShowGuildWarDeclaredPlugIn), "The default implementation of the IShowGuildWarDeclaredPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(ShowGuildWarDeclaredPlugIn), Description = "The default implementation of the IShowGuildWarDeclaredPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("50393D5D-01F2-43F8-B5D7-243D91B905BC")] public class ShowGuildWarDeclaredPlugIn : IShowGuildWarDeclaredPlugIn { diff --git a/src/GameServer/RemoteView/Guild/ShowGuildWarRequestPlugIn.cs b/src/GameServer/RemoteView/Guild/ShowGuildWarRequestPlugIn.cs index 87c8c6a5c..e3767ecfb 100644 --- a/src/GameServer/RemoteView/Guild/ShowGuildWarRequestPlugIn.cs +++ b/src/GameServer/RemoteView/Guild/ShowGuildWarRequestPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Guild; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(ShowGuildWarRequestPlugIn), "The default implementation of the IShowGuildWarRequestPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(ShowGuildWarRequestPlugIn), Description = "The default implementation of the IShowGuildWarRequestPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("128250B3-6CFC-4C89-BF8A-B50C892A78D3")] public class ShowGuildWarRequestPlugIn : IShowGuildWarRequestPlugIn { diff --git a/src/GameServer/RemoteView/Guild/ShowGuildWarResultPlugIn.cs b/src/GameServer/RemoteView/Guild/ShowGuildWarResultPlugIn.cs index c050f4989..d2abbb640 100644 --- a/src/GameServer/RemoteView/Guild/ShowGuildWarResultPlugIn.cs +++ b/src/GameServer/RemoteView/Guild/ShowGuildWarResultPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Guild; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(ShowGuildWarResultPlugIn), "The default implementation of the IShowGuildWarResultPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(ShowGuildWarResultPlugIn), Description = "The default implementation of the IShowGuildWarResultPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("991247B9-D4A3-466D-A7CE-2621843CA94F")] public class ShowGuildWarResultPlugIn : IShowGuildWarResultPlugIn { diff --git a/src/GameServer/RemoteView/Guild/ShowShowGuildWarRequestResultPlugIn.cs b/src/GameServer/RemoteView/Guild/ShowShowGuildWarRequestResultPlugIn.cs index 80b7fcc2b..aa63bbf33 100644 --- a/src/GameServer/RemoteView/Guild/ShowShowGuildWarRequestResultPlugIn.cs +++ b/src/GameServer/RemoteView/Guild/ShowShowGuildWarRequestResultPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Guild; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(ShowShowGuildWarRequestResultPlugIn), "The default implementation of the IShowShowGuildWarRequestResultPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(ShowShowGuildWarRequestResultPlugIn), Description = "The default implementation of the IShowShowGuildWarRequestResultPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("7DDF834C-218B-4F35-B66C-54579BE485D5")] public class ShowShowGuildWarRequestResultPlugIn : IShowShowGuildWarRequestResultPlugIn { diff --git a/src/GameServer/RemoteView/Inventory/BuyNpcItemFailedPlugIn.cs b/src/GameServer/RemoteView/Inventory/BuyNpcItemFailedPlugIn.cs index 085b50718..b124c684c 100644 --- a/src/GameServer/RemoteView/Inventory/BuyNpcItemFailedPlugIn.cs +++ b/src/GameServer/RemoteView/Inventory/BuyNpcItemFailedPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Inventory; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("BuyNpcItemFailedPlugIn", "The default implementation of the IBuyNpcItemFailedPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "BuyNpcItemFailedPlugIn", Description = "The default implementation of the IBuyNpcItemFailedPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("915324d5-ccdf-42c0-b7c9-9479969346d8")] public class BuyNpcItemFailedPlugIn : IBuyNpcItemFailedPlugIn { diff --git a/src/GameServer/RemoteView/Inventory/ItemAppearPlugIn.cs b/src/GameServer/RemoteView/Inventory/ItemAppearPlugIn.cs index e85037f53..380aa03c6 100644 --- a/src/GameServer/RemoteView/Inventory/ItemAppearPlugIn.cs +++ b/src/GameServer/RemoteView/Inventory/ItemAppearPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Inventory; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("ItemAppearPlugIn", "The default implementation of the IItemAppearPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "ItemAppearPlugIn", Description = "The default implementation of the IItemAppearPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("525105ee-c1bf-4800-b80b-bdcd6c8ce704")] public class ItemAppearPlugIn : IItemAppearPlugIn { diff --git a/src/GameServer/RemoteView/Inventory/ItemDropResultPlugIn.cs b/src/GameServer/RemoteView/Inventory/ItemDropResultPlugIn.cs index b01994a23..c666c0263 100644 --- a/src/GameServer/RemoteView/Inventory/ItemDropResultPlugIn.cs +++ b/src/GameServer/RemoteView/Inventory/ItemDropResultPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Inventory; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("ItemDropResultPlugIn", "The default implementation of the IItemDropResultPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "ItemDropResultPlugIn", Description = "The default implementation of the IItemDropResultPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("377cd4cb-7334-4c74-a165-058e6bb46baf")] public class ItemDropResultPlugIn : IItemDropResultPlugIn { diff --git a/src/GameServer/RemoteView/Inventory/ItemDurabilityChangedPlugIn.cs b/src/GameServer/RemoteView/Inventory/ItemDurabilityChangedPlugIn.cs index 703dd93b0..b2ac6bd20 100644 --- a/src/GameServer/RemoteView/Inventory/ItemDurabilityChangedPlugIn.cs +++ b/src/GameServer/RemoteView/Inventory/ItemDurabilityChangedPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Inventory; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(ItemDurabilityChangedPlugIn), "The default implementation of the IItemDurabilityChangedPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(ItemDurabilityChangedPlugIn), Description = "The default implementation of the IItemDurabilityChangedPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("f121286f-2e43-4a66-8f34-5dbe69304e1e")] public class ItemDurabilityChangedPlugIn : IItemDurabilityChangedPlugIn { diff --git a/src/GameServer/RemoteView/Inventory/ItemMoveFailedPlugIn.cs b/src/GameServer/RemoteView/Inventory/ItemMoveFailedPlugIn.cs index 107496815..eb92be7b5 100644 --- a/src/GameServer/RemoteView/Inventory/ItemMoveFailedPlugIn.cs +++ b/src/GameServer/RemoteView/Inventory/ItemMoveFailedPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Inventory; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("ItemMoveFailedPlugIn", "The default implementation of the IItemMoveFailedPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "ItemMoveFailedPlugIn", Description = "The default implementation of the IItemMoveFailedPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("7fc3b870-a6a2-4751-bfa7-156ed97a1c87")] public class ItemMoveFailedPlugIn : IItemMoveFailedPlugIn { diff --git a/src/GameServer/RemoteView/Inventory/ItemMovedPlugIn.cs b/src/GameServer/RemoteView/Inventory/ItemMovedPlugIn.cs index 376e427de..413e559f7 100644 --- a/src/GameServer/RemoteView/Inventory/ItemMovedPlugIn.cs +++ b/src/GameServer/RemoteView/Inventory/ItemMovedPlugIn.cs @@ -16,7 +16,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Inventory; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("ItemMovedPlugIn", "The default implementation of the IItemMovedPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "ItemMovedPlugIn", Description = "The default implementation of the IItemMovedPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("5c4c20fe-763d-42b6-bdfa-2ec943b191bc")] public class ItemMovedPlugIn : IItemMovedPlugIn { diff --git a/src/GameServer/RemoteView/Inventory/ItemPickUpFailedPlugIn.cs b/src/GameServer/RemoteView/Inventory/ItemPickUpFailedPlugIn.cs index ffa66c821..adecfaf78 100644 --- a/src/GameServer/RemoteView/Inventory/ItemPickUpFailedPlugIn.cs +++ b/src/GameServer/RemoteView/Inventory/ItemPickUpFailedPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Inventory; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("ItemPickUpFailedPlugIn", "The default implementation of the IItemPickUpFailedPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "ItemPickUpFailedPlugIn", Description = "The default implementation of the IItemPickUpFailedPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("f73a2cee-14bb-4404-a321-767f848e3571")] public class ItemPickUpFailedPlugIn : IItemPickUpFailedPlugIn { diff --git a/src/GameServer/RemoteView/Inventory/ItemPriceSetResponsePlugIn.cs b/src/GameServer/RemoteView/Inventory/ItemPriceSetResponsePlugIn.cs index 4b2bb779e..e17a42183 100644 --- a/src/GameServer/RemoteView/Inventory/ItemPriceSetResponsePlugIn.cs +++ b/src/GameServer/RemoteView/Inventory/ItemPriceSetResponsePlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Inventory; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("ItemPriceSetResponsePlugIn", "The default implementation of the IItemPriceSetResponsePlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "ItemPriceSetResponsePlugIn", Description = "The default implementation of the IItemPriceSetResponsePlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("f83daf12-28cb-47bc-bb23-7f8eba21c97c")] public class ItemPriceSetResponsePlugIn : IItemPriceSetResponsePlugIn { diff --git a/src/GameServer/RemoteView/Inventory/ItemRemovedPlugIn.cs b/src/GameServer/RemoteView/Inventory/ItemRemovedPlugIn.cs index c00a2c92f..95c8da44f 100644 --- a/src/GameServer/RemoteView/Inventory/ItemRemovedPlugIn.cs +++ b/src/GameServer/RemoteView/Inventory/ItemRemovedPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Inventory; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(ItemRemovedPlugIn), "The default implementation of the IItemRemovedPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(ItemRemovedPlugIn), Description = "The default implementation of the IItemRemovedPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("06f1b02c-32b5-4d88-8d09-719246c8ebfe")] public class ItemRemovedPlugIn : IItemRemovedPlugIn { diff --git a/src/GameServer/RemoteView/Inventory/ItemSoldByPlayerShopPlugIn.cs b/src/GameServer/RemoteView/Inventory/ItemSoldByPlayerShopPlugIn.cs index ac8d4bcbe..56ae4cca0 100644 --- a/src/GameServer/RemoteView/Inventory/ItemSoldByPlayerShopPlugIn.cs +++ b/src/GameServer/RemoteView/Inventory/ItemSoldByPlayerShopPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Inventory; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("ItemSoldByPlayerShopPlugIn", "The default implementation of the IItemSoldByPlayerShopPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "ItemSoldByPlayerShopPlugIn", Description = "The default implementation of the IItemSoldByPlayerShopPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("9594f5db-53b3-491f-a99c-11554c077942")] public class ItemSoldByPlayerShopPlugIn : IItemSoldByPlayerShopPlugIn { diff --git a/src/GameServer/RemoteView/Inventory/ItemSoldToNpcPlugIn.cs b/src/GameServer/RemoteView/Inventory/ItemSoldToNpcPlugIn.cs index 284ca20af..1646413d5 100644 --- a/src/GameServer/RemoteView/Inventory/ItemSoldToNpcPlugIn.cs +++ b/src/GameServer/RemoteView/Inventory/ItemSoldToNpcPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Inventory; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("ItemSoldToNpcPlugIn", "The default implementation of the IItemSoldToNpcPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "ItemSoldToNpcPlugIn", Description = "The default implementation of the IItemSoldToNpcPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("8372476a-7fb9-4f6e-a857-41c39c7d377c")] public class ItemSoldToNpcPlugIn : IItemSoldToNpcPlugIn { diff --git a/src/GameServer/RemoteView/Inventory/ItemUpgradedPlugIn.cs b/src/GameServer/RemoteView/Inventory/ItemUpgradedPlugIn.cs index 154c70a5d..5c6448de9 100644 --- a/src/GameServer/RemoteView/Inventory/ItemUpgradedPlugIn.cs +++ b/src/GameServer/RemoteView/Inventory/ItemUpgradedPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Inventory; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("ItemUpgradedPlugIn", "The default implementation of the IItemUpgradedPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "ItemUpgradedPlugIn", Description = "The default implementation of the IItemUpgradedPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("ce4ed0a2-ec4e-4cbe-aabe-5573df86a659")] public class ItemUpgradedPlugIn : IItemUpgradedPlugIn { diff --git a/src/GameServer/RemoteView/Inventory/NpcItemBoughtPlugIn.cs b/src/GameServer/RemoteView/Inventory/NpcItemBoughtPlugIn.cs index d7921fbed..a004d6282 100644 --- a/src/GameServer/RemoteView/Inventory/NpcItemBoughtPlugIn.cs +++ b/src/GameServer/RemoteView/Inventory/NpcItemBoughtPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Inventory; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("NpcItemBoughtPlugIn", "The default implementation of the INpcItemBoughtPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "NpcItemBoughtPlugIn", Description = "The default implementation of the INpcItemBoughtPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("cf45b5e2-158a-4998-bc73-fed4d4d31c0c")] public class NpcItemBoughtPlugIn : INpcItemBoughtPlugIn { diff --git a/src/GameServer/RemoteView/Inventory/PlayerShopBuyRequestResultExtendedPlugIn.cs b/src/GameServer/RemoteView/Inventory/PlayerShopBuyRequestResultExtendedPlugIn.cs index 1862129cb..7a89a3724 100644 --- a/src/GameServer/RemoteView/Inventory/PlayerShopBuyRequestResultExtendedPlugIn.cs +++ b/src/GameServer/RemoteView/Inventory/PlayerShopBuyRequestResultExtendedPlugIn.cs @@ -16,7 +16,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Inventory; /// /// The extended implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(PlayerShopBuyRequestResultExtendedPlugIn), "The extended implementation of the IPlayerShopBuyRequestResultPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(PlayerShopBuyRequestResultExtendedPlugIn), Description = "The extended implementation of the IPlayerShopBuyRequestResultPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("83C89473-5977-4E08-82CF-94BC68C50676")] [MinimumClient(106, 3, ClientLanguage.Invariant)] public class PlayerShopBuyRequestResultExtendedPlugIn : IPlayerShopBuyRequestResultPlugIn diff --git a/src/GameServer/RemoteView/Inventory/PlayerShopBuyRequestResultPlugIn.cs b/src/GameServer/RemoteView/Inventory/PlayerShopBuyRequestResultPlugIn.cs index df7dfbece..6bac15b6e 100644 --- a/src/GameServer/RemoteView/Inventory/PlayerShopBuyRequestResultPlugIn.cs +++ b/src/GameServer/RemoteView/Inventory/PlayerShopBuyRequestResultPlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Inventory; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(PlayerShopBuyRequestResultPlugIn), "The default implementation of the IPlayerShopBuyRequestResultPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(PlayerShopBuyRequestResultPlugIn), Description = "The default implementation of the IPlayerShopBuyRequestResultPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("3b2498f2-3ae8-4700-8a61-1ffe49822caf")] public class PlayerShopBuyRequestResultPlugIn : IPlayerShopBuyRequestResultPlugIn { diff --git a/src/GameServer/RemoteView/Inventory/RequestedItemConsumptionFailedExtendedPlugIn.cs b/src/GameServer/RemoteView/Inventory/RequestedItemConsumptionFailedExtendedPlugIn.cs index ed28aae18..1653f797f 100644 --- a/src/GameServer/RemoteView/Inventory/RequestedItemConsumptionFailedExtendedPlugIn.cs +++ b/src/GameServer/RemoteView/Inventory/RequestedItemConsumptionFailedExtendedPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Inventory; /// /// The extended implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(RequestedItemConsumptionFailedExtendedPlugIn), "The extended implementation of the IRequestedItemConsumptionFailedPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(RequestedItemConsumptionFailedExtendedPlugIn), Description = "The extended implementation of the IRequestedItemConsumptionFailedPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("8F98AAF4-E329-4DE2-B8D5-9169B64E20B2")] [MinimumClient(106, 3, ClientLanguage.English)] public class RequestedItemConsumptionFailedExtendedPlugIn : IRequestedItemConsumptionFailedPlugIn diff --git a/src/GameServer/RemoteView/Inventory/RequestedItemConsumptionFailedPlugIn.cs b/src/GameServer/RemoteView/Inventory/RequestedItemConsumptionFailedPlugIn.cs index 6ef335314..b807ba17e 100644 --- a/src/GameServer/RemoteView/Inventory/RequestedItemConsumptionFailedPlugIn.cs +++ b/src/GameServer/RemoteView/Inventory/RequestedItemConsumptionFailedPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Inventory; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("RequestedItemConsumptionFailedPlugIn", "The default implementation of the IRequestedItemConsumptionFailedPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "RequestedItemConsumptionFailedPlugIn", Description = "The default implementation of the IRequestedItemConsumptionFailedPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("c3a03a1c-71c7-4581-a244-0b1b31497f05")] public class RequestedItemConsumptionFailedPlugIn : IRequestedItemConsumptionFailedPlugIn { diff --git a/src/GameServer/RemoteView/Inventory/UpdateInventoryListPlugIn.cs b/src/GameServer/RemoteView/Inventory/UpdateInventoryListPlugIn.cs index 48d7c155e..7a7a3ac70 100644 --- a/src/GameServer/RemoteView/Inventory/UpdateInventoryListPlugIn.cs +++ b/src/GameServer/RemoteView/Inventory/UpdateInventoryListPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Inventory; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("UpdateInventoryListPlugIn", "The default implementation of the IUpdateInventoryListPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "UpdateInventoryListPlugIn", Description = "The default implementation of the IUpdateInventoryListPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("ba8ca7c7-a497-497e-b2f7-9f9366ff6ac5")] public class UpdateInventoryListPlugIn : IUpdateInventoryListPlugIn { diff --git a/src/GameServer/RemoteView/Inventory/UpdateMoneyPlugIn.cs b/src/GameServer/RemoteView/Inventory/UpdateMoneyPlugIn.cs index 2f1987ec5..b8e7359b1 100644 --- a/src/GameServer/RemoteView/Inventory/UpdateMoneyPlugIn.cs +++ b/src/GameServer/RemoteView/Inventory/UpdateMoneyPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Inventory; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("UpdateMoneyPlugIn", "The default implementation of the IUpdateMoneyPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "UpdateMoneyPlugIn", Description = "The default implementation of the IUpdateMoneyPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("7a13a613-7098-4407-8ef5-39bae08ce12d")] public class UpdateMoneyPlugIn : IUpdateMoneyPlugIn { diff --git a/src/GameServer/RemoteView/ItemSerializer.cs b/src/GameServer/RemoteView/ItemSerializer.cs index 84dfaa9c3..31d69e68f 100644 --- a/src/GameServer/RemoteView/ItemSerializer.cs +++ b/src/GameServer/RemoteView/ItemSerializer.cs @@ -22,7 +22,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView; /// Byte Order: ItemCode Options Dura Exe Ancient Kind/380Opt HarmonyOpt Socket1 Socket2 Socket3 Socket4 Socket5. /// [Guid("3607902F-C7A8-40D0-823A-186F3BF630C7")] -[PlugIn("Item Serializer", "The default item serializer. It's most likely only correct for season 6.")] +[PlugIn] +[Display(Name = "Item Serializer", Description = "The default item serializer. It's most likely only correct for season 6.")] [MinimumClient(5, 0, ClientLanguage.Invariant)] public class ItemSerializer : IItemSerializer { diff --git a/src/GameServer/RemoteView/ItemSerializer075.cs b/src/GameServer/RemoteView/ItemSerializer075.cs index 77b74cff2..c39d8779f 100644 --- a/src/GameServer/RemoteView/ItemSerializer075.cs +++ b/src/GameServer/RemoteView/ItemSerializer075.cs @@ -18,7 +18,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView; /// Each item is serialized into a 3-byte long part of an array. /// [Guid("A97F30CF-A189-43A2-9271-D3E5A24CC3FD")] -[PlugIn("Item Serializer 0.75", "The item serializer for game client version 0.75")] +[PlugIn] +[Display(Name = "Item Serializer 0.75", Description = "The item serializer for game client version 0.75")] [MinimumClient(0, 75, ClientLanguage.Invariant)] public class ItemSerializer075 : IItemSerializer { diff --git a/src/GameServer/RemoteView/ItemSerializer095.cs b/src/GameServer/RemoteView/ItemSerializer095.cs index b72bd3569..3cd92485d 100644 --- a/src/GameServer/RemoteView/ItemSerializer095.cs +++ b/src/GameServer/RemoteView/ItemSerializer095.cs @@ -35,7 +35,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView; /// x = exc option flags. /// [Guid("4BD85C02-C43E-494D-B6B8-767ED94E09F0")] -[PlugIn(nameof(ItemSerializer095), "The item serializer for game client version 0.95")] +[PlugIn] +[Display(Name = nameof(ItemSerializer095), Description = "The item serializer for game client version 0.95")] [MinimumClient(0, 95, ClientLanguage.Invariant)] public class ItemSerializer095 : IItemSerializer { diff --git a/src/GameServer/RemoteView/ItemSerializerExtended.cs b/src/GameServer/RemoteView/ItemSerializerExtended.cs index 634b63c63..ac85ce400 100644 --- a/src/GameServer/RemoteView/ItemSerializerExtended.cs +++ b/src/GameServer/RemoteView/ItemSerializerExtended.cs @@ -22,7 +22,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView; /// long part of an array. /// [Guid("9EBB4761-93D4-49DE-AC53-BD8744315439")] -[PlugIn("Item Serializer", "The extended item serializer. It's most likely only correct for season 6.")] +[PlugIn] +[Display(Name = "Item Serializer", Description = "The extended item serializer. It's most likely only correct for season 6.")] [MinimumClient(106, 3, ClientLanguage.Invariant)] public class ItemSerializerExtended : IItemSerializer { diff --git a/src/GameServer/RemoteView/Login/LogoutPlugIn.cs b/src/GameServer/RemoteView/Login/LogoutPlugIn.cs index f25c5fce3..dc8245d3e 100644 --- a/src/GameServer/RemoteView/Login/LogoutPlugIn.cs +++ b/src/GameServer/RemoteView/Login/LogoutPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Login; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("LogoutPlugIn", "The default implementation of the ILogoutPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "LogoutPlugIn", Description = "The default implementation of the ILogoutPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("f4a5185b-b422-463d-8df0-56f270a8831e")] public class LogoutPlugIn : ILogoutPlugIn { diff --git a/src/GameServer/RemoteView/Login/ShowLoginResultPlugIn.cs b/src/GameServer/RemoteView/Login/ShowLoginResultPlugIn.cs index 3f9886092..75aa1bcc2 100644 --- a/src/GameServer/RemoteView/Login/ShowLoginResultPlugIn.cs +++ b/src/GameServer/RemoteView/Login/ShowLoginResultPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Login; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("ShowLoginResultPlugIn", "The default implementation of the IShowLoginResultPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "ShowLoginResultPlugIn", Description = "The default implementation of the IShowLoginResultPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("9ba2646b-72c2-4876-a316-c9aadb386037")] public class ShowLoginResultPlugIn : IShowLoginResultPlugIn { diff --git a/src/GameServer/RemoteView/Login/ShowLoginWindowPlugIn.cs b/src/GameServer/RemoteView/Login/ShowLoginWindowPlugIn.cs index bd4aec7a0..86a54ecd8 100644 --- a/src/GameServer/RemoteView/Login/ShowLoginWindowPlugIn.cs +++ b/src/GameServer/RemoteView/Login/ShowLoginWindowPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Login; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(ShowLoginWindowPlugIn), "The default implementation of the IShowLoginWindowPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(ShowLoginWindowPlugIn), Description = "The default implementation of the IShowLoginWindowPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("c5240952-1870-4f09-a3e4-9f6413845a23")] public class ShowLoginWindowPlugIn : IShowLoginWindowPlugIn { diff --git a/src/GameServer/RemoteView/Messenger/AddToLetterListPlugIn.cs b/src/GameServer/RemoteView/Messenger/AddToLetterListPlugIn.cs index e48f01de1..2fcfb2e83 100644 --- a/src/GameServer/RemoteView/Messenger/AddToLetterListPlugIn.cs +++ b/src/GameServer/RemoteView/Messenger/AddToLetterListPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Messenger; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("AddToLetterListPlugIn", "The default implementation of the IAddToLetterListPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "AddToLetterListPlugIn", Description = "The default implementation of the IAddToLetterListPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("d30bea99-9d77-4182-99be-e08095c1969f")] public class AddToLetterListPlugIn : IAddToLetterListPlugIn { diff --git a/src/GameServer/RemoteView/Messenger/ChatRoomCreatedPlugIn.cs b/src/GameServer/RemoteView/Messenger/ChatRoomCreatedPlugIn.cs index d13e86c05..cc3e85a05 100644 --- a/src/GameServer/RemoteView/Messenger/ChatRoomCreatedPlugIn.cs +++ b/src/GameServer/RemoteView/Messenger/ChatRoomCreatedPlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Messenger; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("ChatRoomCreatedPlugIn", "The default implementation of the IChatRoomCreatedPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "ChatRoomCreatedPlugIn", Description = "The default implementation of the IChatRoomCreatedPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("a7c99cb5-94f6-42ea-b6e2-2272a9a81e12")] public class ChatRoomCreatedPlugIn : IChatRoomCreatedPlugIn { diff --git a/src/GameServer/RemoteView/Messenger/FriendAddedPlugIn.cs b/src/GameServer/RemoteView/Messenger/FriendAddedPlugIn.cs index b0465c738..fbbca7f7a 100644 --- a/src/GameServer/RemoteView/Messenger/FriendAddedPlugIn.cs +++ b/src/GameServer/RemoteView/Messenger/FriendAddedPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Messenger; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("FriendAddedPlugIn", "The default implementation of the IFriendAddedPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "FriendAddedPlugIn", Description = "The default implementation of the IFriendAddedPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("7edba5ed-eec5-4aa7-b302-418444868841")] public class FriendAddedPlugIn : IFriendAddedPlugIn { diff --git a/src/GameServer/RemoteView/Messenger/FriendDeletedPlugIn.cs b/src/GameServer/RemoteView/Messenger/FriendDeletedPlugIn.cs index 3cf145b14..f565f795c 100644 --- a/src/GameServer/RemoteView/Messenger/FriendDeletedPlugIn.cs +++ b/src/GameServer/RemoteView/Messenger/FriendDeletedPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Messenger; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("FriendDeletedPlugIn", "The default implementation of the IFriendDeletedPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "FriendDeletedPlugIn", Description = "The default implementation of the IFriendDeletedPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("3f6f86ec-ffe8-4fa7-82c3-4a743fab7157")] public class FriendDeletedPlugIn : IFriendDeletedPlugIn { diff --git a/src/GameServer/RemoteView/Messenger/FriendStateUpdatePlugIn.cs b/src/GameServer/RemoteView/Messenger/FriendStateUpdatePlugIn.cs index 5da787e34..8513d494a 100644 --- a/src/GameServer/RemoteView/Messenger/FriendStateUpdatePlugIn.cs +++ b/src/GameServer/RemoteView/Messenger/FriendStateUpdatePlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Messenger; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("FriendStateUpdatePlugIn", "The default implementation of the IFriendStateUpdatePlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "FriendStateUpdatePlugIn", Description = "The default implementation of the IFriendStateUpdatePlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("1ed98d6a-7917-4209-bd03-e8a966b99688")] public class FriendStateUpdatePlugIn : IFriendStateUpdatePlugIn { diff --git a/src/GameServer/RemoteView/Messenger/InitializeMessengerPlugIn.cs b/src/GameServer/RemoteView/Messenger/InitializeMessengerPlugIn.cs index 5b8201276..c418b55ac 100644 --- a/src/GameServer/RemoteView/Messenger/InitializeMessengerPlugIn.cs +++ b/src/GameServer/RemoteView/Messenger/InitializeMessengerPlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Messenger; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("InitializeMessengerPlugIn", "The default implementation of the IInitializeMessengerPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "InitializeMessengerPlugIn", Description = "The default implementation of the IInitializeMessengerPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("cb079c23-e90c-473d-87ae-317937158924")] public class InitializeMessengerPlugIn : IInitializeMessengerPlugIn { diff --git a/src/GameServer/RemoteView/Messenger/LetterDeletedPlugIn.cs b/src/GameServer/RemoteView/Messenger/LetterDeletedPlugIn.cs index 6610265c3..67f19f68b 100644 --- a/src/GameServer/RemoteView/Messenger/LetterDeletedPlugIn.cs +++ b/src/GameServer/RemoteView/Messenger/LetterDeletedPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Messenger; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("LetterDeletedPlugIn", "The default implementation of the ILetterDeletedPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "LetterDeletedPlugIn", Description = "The default implementation of the ILetterDeletedPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("3bcd507e-cb61-4b25-a208-4ee264f4793e")] public class LetterDeletedPlugIn : ILetterDeletedPlugIn { diff --git a/src/GameServer/RemoteView/Messenger/LetterSendResultPlugIn.cs b/src/GameServer/RemoteView/Messenger/LetterSendResultPlugIn.cs index 7920d3642..2a3c88b52 100644 --- a/src/GameServer/RemoteView/Messenger/LetterSendResultPlugIn.cs +++ b/src/GameServer/RemoteView/Messenger/LetterSendResultPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Messenger; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("LetterSendResultPlugIn", "The default implementation of the ILetterSendResultPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "LetterSendResultPlugIn", Description = "The default implementation of the ILetterSendResultPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("c67cad23-20ba-4cd7-ba4e-b672beed427c")] public class LetterSendResultPlugIn : ILetterSendResultPlugIn { diff --git a/src/GameServer/RemoteView/Messenger/ShowFriendInvitationResultPlugIn.cs b/src/GameServer/RemoteView/Messenger/ShowFriendInvitationResultPlugIn.cs index 0af0d7dc2..ee6375e43 100644 --- a/src/GameServer/RemoteView/Messenger/ShowFriendInvitationResultPlugIn.cs +++ b/src/GameServer/RemoteView/Messenger/ShowFriendInvitationResultPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Messenger; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("ShowFriendInvitationResultPlugIn", "The default implementation of the IShowFriendInvitationResultPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "ShowFriendInvitationResultPlugIn", Description = "The default implementation of the IShowFriendInvitationResultPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("8df329bd-88da-423c-8f85-173180ab8601")] public class ShowFriendInvitationResultPlugIn : IShowFriendInvitationResultPlugIn { diff --git a/src/GameServer/RemoteView/Messenger/ShowFriendRequestPlugIn.cs b/src/GameServer/RemoteView/Messenger/ShowFriendRequestPlugIn.cs index f0eb7df44..443f4e089 100644 --- a/src/GameServer/RemoteView/Messenger/ShowFriendRequestPlugIn.cs +++ b/src/GameServer/RemoteView/Messenger/ShowFriendRequestPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Messenger; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("ShowFriendRequestPlugIn", "The default implementation of the IShowFriendRequestPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "ShowFriendRequestPlugIn", Description = "The default implementation of the IShowFriendRequestPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("efb8b51b-181a-4a7d-b5a4-34c0dbd41748")] public class ShowFriendRequestPlugIn : IShowFriendRequestPlugIn { diff --git a/src/GameServer/RemoteView/Messenger/ShowLetterExtendedPlugIn.cs b/src/GameServer/RemoteView/Messenger/ShowLetterExtendedPlugIn.cs index ef6a84b7f..845f240b4 100644 --- a/src/GameServer/RemoteView/Messenger/ShowLetterExtendedPlugIn.cs +++ b/src/GameServer/RemoteView/Messenger/ShowLetterExtendedPlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Messenger; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(ShowLetterExtendedPlugIn), "The extended implementation of the IShowLetterPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(ShowLetterExtendedPlugIn), Description = "The extended implementation of the IShowLetterPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("9FC6D771-FCCE-4780-B68E-5FBFF3FE1EB0")] [MinimumClient(106, 3, ClientLanguage.Invariant)] public class ShowLetterExtendedPlugIn : IShowLetterPlugIn diff --git a/src/GameServer/RemoteView/Messenger/ShowLetterPlugIn.cs b/src/GameServer/RemoteView/Messenger/ShowLetterPlugIn.cs index 72dd1d3af..d91c9735e 100644 --- a/src/GameServer/RemoteView/Messenger/ShowLetterPlugIn.cs +++ b/src/GameServer/RemoteView/Messenger/ShowLetterPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Messenger; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("ShowLetterPlugIn", "The default implementation of the IShowLetterPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "ShowLetterPlugIn", Description = "The default implementation of the IShowLetterPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("6ce73080-6916-465f-b6d1-34641687ded3")] public class ShowLetterPlugIn : IShowLetterPlugIn { diff --git a/src/GameServer/RemoteView/MiniGames/BloodCastleScoreTableViewPlugin.cs b/src/GameServer/RemoteView/MiniGames/BloodCastleScoreTableViewPlugin.cs index 45498fa5e..dfb9d8b70 100644 --- a/src/GameServer/RemoteView/MiniGames/BloodCastleScoreTableViewPlugin.cs +++ b/src/GameServer/RemoteView/MiniGames/BloodCastleScoreTableViewPlugin.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.MiniGames; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(BloodCastleScoreTableViewPlugin), "The default implementation of the IBloodCastleScoreTableViewPlugin which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(BloodCastleScoreTableViewPlugin), Description = "The default implementation of the IBloodCastleScoreTableViewPlugin which is forwarding everything to the game client with specific data packets.")] [Guid("C7F02F66-987A-42EC-A994-E5F1E8606900")] public class BloodCastleScoreTableViewPlugin : IBloodCastleScoreTableViewPlugin { diff --git a/src/GameServer/RemoteView/MiniGames/BloodCastleStateViewPlugIn.cs b/src/GameServer/RemoteView/MiniGames/BloodCastleStateViewPlugIn.cs index 7b1c206d7..9d50f02b6 100644 --- a/src/GameServer/RemoteView/MiniGames/BloodCastleStateViewPlugIn.cs +++ b/src/GameServer/RemoteView/MiniGames/BloodCastleStateViewPlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.MiniGames; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(BloodCastleStateViewPlugIn), "The default implementation of the IBloodCastleStateViewPlugin which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(BloodCastleStateViewPlugIn), Description = "The default implementation of the IBloodCastleStateViewPlugin which is forwarding everything to the game client with specific data packets.")] [Guid("75A44740-FEE8-447A-BBA4-081A2410E408")] public class BloodCastleStateViewPlugIn : IBloodCastleStateViewPlugin { diff --git a/src/GameServer/RemoteView/MiniGames/ChangeTerrainAttributesViewPlugIn.cs b/src/GameServer/RemoteView/MiniGames/ChangeTerrainAttributesViewPlugIn.cs index 05b64c49c..4de596069 100644 --- a/src/GameServer/RemoteView/MiniGames/ChangeTerrainAttributesViewPlugIn.cs +++ b/src/GameServer/RemoteView/MiniGames/ChangeTerrainAttributesViewPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.MiniGames; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(ChangeTerrainAttributesViewPlugIn), "The default implementation of the IChangeTerrainAttributesViewPlugin which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(ChangeTerrainAttributesViewPlugIn), Description = "The default implementation of the IChangeTerrainAttributesViewPlugin which is forwarding everything to the game client with specific data packets.")] [Guid("D408B6C5-E4DE-496F-B911-F2DA893E9A96")] public class ChangeTerrainAttributesViewPlugIn : IChangeTerrainAttributesViewPlugin { diff --git a/src/GameServer/RemoteView/MiniGames/ChaosCastleStateViewPlugIn.cs b/src/GameServer/RemoteView/MiniGames/ChaosCastleStateViewPlugIn.cs index 52508311f..1e78a4fa7 100644 --- a/src/GameServer/RemoteView/MiniGames/ChaosCastleStateViewPlugIn.cs +++ b/src/GameServer/RemoteView/MiniGames/ChaosCastleStateViewPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.MiniGames; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(ChaosCastleStateViewPlugIn), "The default implementation of the IChaosCastleStateViewPlugin which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(ChaosCastleStateViewPlugIn), Description = "The default implementation of the IChaosCastleStateViewPlugin which is forwarding everything to the game client with specific data packets.")] [Guid("E7E73888-8B8E-4D06-8D95-1C1CDEDDA9EC")] public class ChaosCastleStateViewPlugIn : IChaosCastleStateViewPlugin { diff --git a/src/GameServer/RemoteView/MiniGames/MiniGameScoreTableViewPlugin.cs b/src/GameServer/RemoteView/MiniGames/MiniGameScoreTableViewPlugin.cs index c5d57e096..1504429b3 100644 --- a/src/GameServer/RemoteView/MiniGames/MiniGameScoreTableViewPlugin.cs +++ b/src/GameServer/RemoteView/MiniGames/MiniGameScoreTableViewPlugin.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.MiniGames; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(MiniGameScoreTableViewPlugin), "The default implementation of the IMiniGameScoreTableViewPlugin which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(MiniGameScoreTableViewPlugin), Description = "The default implementation of the IMiniGameScoreTableViewPlugin which is forwarding everything to the game client with specific data packets.")] [Guid("A4AC1264-7410-4578-A318-E57F3B450DC5")] public class MiniGameScoreTableViewPlugin : IMiniGameScoreTableViewPlugin { diff --git a/src/GameServer/RemoteView/MiniGames/ShowMiniGameEnterResultViewPlugIn.cs b/src/GameServer/RemoteView/MiniGames/ShowMiniGameEnterResultViewPlugIn.cs index ed6ac9e34..22923943d 100644 --- a/src/GameServer/RemoteView/MiniGames/ShowMiniGameEnterResultViewPlugIn.cs +++ b/src/GameServer/RemoteView/MiniGames/ShowMiniGameEnterResultViewPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.MiniGames; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(ShowMiniGameEnterResultViewPlugIn), "The default implementation of the IShowMiniGameEnterResultPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(ShowMiniGameEnterResultViewPlugIn), Description = "The default implementation of the IShowMiniGameEnterResultPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("2BB953FC-7BF7-4B13-B602-E3CD56A5EED2")] public class ShowMiniGameEnterResultViewPlugIn : IShowMiniGameEnterResultPlugIn { diff --git a/src/GameServer/RemoteView/MiniGames/ShowMiniGameOpeningStateViewPlugIn.cs b/src/GameServer/RemoteView/MiniGames/ShowMiniGameOpeningStateViewPlugIn.cs index 582da956d..47a183a1d 100644 --- a/src/GameServer/RemoteView/MiniGames/ShowMiniGameOpeningStateViewPlugIn.cs +++ b/src/GameServer/RemoteView/MiniGames/ShowMiniGameOpeningStateViewPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.MiniGames; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(ShowMiniGameOpeningStateViewPlugIn), "The default implementation of the IShowMiniGameOpeningStatePlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(ShowMiniGameOpeningStateViewPlugIn), Description = "The default implementation of the IShowMiniGameOpeningStatePlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("B4D89EFA-0593-4CC7-B720-CD1FC2C0513A")] public class ShowMiniGameOpeningStateViewPlugIn : IShowMiniGameOpeningStatePlugIn { diff --git a/src/GameServer/RemoteView/MiniGames/UpdateMiniGameStateViewViewPlugIn.cs b/src/GameServer/RemoteView/MiniGames/UpdateMiniGameStateViewViewPlugIn.cs index 9003beeed..56fdc8927 100644 --- a/src/GameServer/RemoteView/MiniGames/UpdateMiniGameStateViewViewPlugIn.cs +++ b/src/GameServer/RemoteView/MiniGames/UpdateMiniGameStateViewViewPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.MiniGames; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(UpdateMiniGameStateViewViewPlugIn), "The default implementation of the IUpdateMiniGameStateViewPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(UpdateMiniGameStateViewViewPlugIn), Description = "The default implementation of the IUpdateMiniGameStateViewPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("FB4622A0-65CE-4D86-9A02-848A874F0AC1")] public class UpdateMiniGameStateViewViewPlugIn : IUpdateMiniGameStateViewPlugIn { diff --git a/src/GameServer/RemoteView/MuHelper/MuHelperConfigurationUpdatePlugIn.cs b/src/GameServer/RemoteView/MuHelper/MuHelperConfigurationUpdatePlugIn.cs index 2791a1868..25cee6630 100644 --- a/src/GameServer/RemoteView/MuHelper/MuHelperConfigurationUpdatePlugIn.cs +++ b/src/GameServer/RemoteView/MuHelper/MuHelperConfigurationUpdatePlugIn.cs @@ -16,7 +16,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.MuHelper; /// The default implementation of the /// which sends the new MU Helper status to the client. /// -[PlugIn(nameof(MuHelperConfigurationUpdatePlugIn), "Sends the new MU Helper status to the client.")] +[PlugIn] +[Display(Name = nameof(MuHelperConfigurationUpdatePlugIn), Description = "Sends the new MU Helper status to the client.")] [Guid("E152E151-543C-437E-8BFD-2D92391822F5")] public class MuHelperConfigurationUpdatePlugIn : IMuHelperConfigurationUpdatePlugIn { diff --git a/src/GameServer/RemoteView/MuHelper/MuHelperStatusUpdatePlugIn.cs b/src/GameServer/RemoteView/MuHelper/MuHelperStatusUpdatePlugIn.cs index dc775cbcf..b46f9edc8 100644 --- a/src/GameServer/RemoteView/MuHelper/MuHelperStatusUpdatePlugIn.cs +++ b/src/GameServer/RemoteView/MuHelper/MuHelperStatusUpdatePlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.MuHelper; /// /// The default implementation of the which response with new mu bot status. /// -[PlugIn(nameof(MuHelperStatusUpdatePlugIn), "Sends the MU Helper status update to the client.")] +[PlugIn] +[Display(Name = nameof(MuHelperStatusUpdatePlugIn), Description = "Sends the MU Helper status update to the client.")] [Guid("6F2E1E5F-D130-496A-B2B0-5D01BD001366")] public class MuHelperStatusUpdatePlugIn : IMuHelperStatusUpdatePlugIn { diff --git a/src/GameServer/RemoteView/NPC/NpcDialogClosedPlugIn075.cs b/src/GameServer/RemoteView/NPC/NpcDialogClosedPlugIn075.cs index 5db6ee2a3..39067e3d5 100644 --- a/src/GameServer/RemoteView/NPC/NpcDialogClosedPlugIn075.cs +++ b/src/GameServer/RemoteView/NPC/NpcDialogClosedPlugIn075.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.NPC; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(NpcDialogClosedPlugIn075), "The default implementation of the INpcDialogClosedPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(NpcDialogClosedPlugIn075), Description = "The default implementation of the INpcDialogClosedPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("BAC39AFE-F277-48FD-BB21-A3F905EE0E73")] [MaximumClient(0, 255, ClientLanguage.Invariant)] public class NpcDialogClosedPlugIn075 : INpcDialogClosedPlugIn diff --git a/src/GameServer/RemoteView/NPC/OpenNpcWindowPlugIn.cs b/src/GameServer/RemoteView/NPC/OpenNpcWindowPlugIn.cs index 6f34b2c89..bcb5f2187 100644 --- a/src/GameServer/RemoteView/NPC/OpenNpcWindowPlugIn.cs +++ b/src/GameServer/RemoteView/NPC/OpenNpcWindowPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.NPC; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("OpenNpcWindowPlugIn", "The default implementation of the IOpenNpcWindowPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "OpenNpcWindowPlugIn", Description = "The default implementation of the IOpenNpcWindowPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("3d77d6ef-479c-45f6-8ec9-a7bb046d306a")] public class OpenNpcWindowPlugIn : IOpenNpcWindowPlugIn { diff --git a/src/GameServer/RemoteView/NPC/ShowItemCraftingResultPlugIn.cs b/src/GameServer/RemoteView/NPC/ShowItemCraftingResultPlugIn.cs index 4ccee2630..7dbb9824f 100644 --- a/src/GameServer/RemoteView/NPC/ShowItemCraftingResultPlugIn.cs +++ b/src/GameServer/RemoteView/NPC/ShowItemCraftingResultPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.NPC; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(ShowItemCraftingResultPlugIn), "The default implementation of the IShowItemCraftingResultPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(ShowItemCraftingResultPlugIn), Description = "The default implementation of the IShowItemCraftingResultPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("D4339CC0-3E44-4F51-9186-9C3CB02F99F6")] public class ShowItemCraftingResultPlugIn : IShowItemCraftingResultPlugIn { diff --git a/src/GameServer/RemoteView/NPC/ShowMerchantStoreItemListPlugIn.cs b/src/GameServer/RemoteView/NPC/ShowMerchantStoreItemListPlugIn.cs index 57ed82733..aa3aad9ac 100644 --- a/src/GameServer/RemoteView/NPC/ShowMerchantStoreItemListPlugIn.cs +++ b/src/GameServer/RemoteView/NPC/ShowMerchantStoreItemListPlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.NPC; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("ShowMerchantStoreItemListPlugIn", "The default implementation of the IShowMerchantStoreItemListPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "ShowMerchantStoreItemListPlugIn", Description = "The default implementation of the IShowMerchantStoreItemListPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("53e00ae0-4d5b-4f63-88e0-7d526f8438af")] public class ShowMerchantStoreItemListPlugIn : IShowMerchantStoreItemListPlugIn { diff --git a/src/GameServer/RemoteView/NPC/ShowMessageOfObjectPlugIn.cs b/src/GameServer/RemoteView/NPC/ShowMessageOfObjectPlugIn.cs index 5c7ae0e68..f30648a71 100644 --- a/src/GameServer/RemoteView/NPC/ShowMessageOfObjectPlugIn.cs +++ b/src/GameServer/RemoteView/NPC/ShowMessageOfObjectPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.NPC; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("ShowMessageOfObjectPlugIn", "The default implementation of the IShowMessageOfObjectPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "ShowMessageOfObjectPlugIn", Description = "The default implementation of the IShowMessageOfObjectPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("41d28cd1-1fb7-4af7-b635-8af9923351bd")] public class ShowMessageOfObjectPlugIn : IShowMessageOfObjectPlugIn { diff --git a/src/GameServer/RemoteView/Party/PartyHealthViewPlugIn.cs b/src/GameServer/RemoteView/Party/PartyHealthViewPlugIn.cs index 8752a263f..447ccfa32 100644 --- a/src/GameServer/RemoteView/Party/PartyHealthViewPlugIn.cs +++ b/src/GameServer/RemoteView/Party/PartyHealthViewPlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Party; /// /// The default implementation of the party view which is forwarding everything to the game client which specific data packets. /// -[PlugIn("Party View", "The default implementation of the party view which is forwarding everything to the game client which specific data packets.")] +[PlugIn] +[Display(Name = "Party View", Description = "The default implementation of the party view which is forwarding everything to the game client which specific data packets.")] [Guid("CEE58BCB-FB8C-4AEB-9FC8-5D3A11FA7C03")] [MinimumClient(0, 90, ClientLanguage.Invariant)] public class PartyHealthViewPlugIn : IPartyHealthViewPlugIn diff --git a/src/GameServer/RemoteView/Party/PartyMemberRemovedPlugIn.cs b/src/GameServer/RemoteView/Party/PartyMemberRemovedPlugIn.cs index eedbb31d1..e99b2143f 100644 --- a/src/GameServer/RemoteView/Party/PartyMemberRemovedPlugIn.cs +++ b/src/GameServer/RemoteView/Party/PartyMemberRemovedPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Party; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("PartyMemberRemovedPlugIn", "The default implementation of the IPartyMemberRemovedPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "PartyMemberRemovedPlugIn", Description = "The default implementation of the IPartyMemberRemovedPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("d69b37b3-9e7f-40d1-9260-ba7a4f6369a2")] public class PartyMemberRemovedPlugIn : IPartyMemberRemovedPlugIn { diff --git a/src/GameServer/RemoteView/Party/ShowPartyRequestPlugIn.cs b/src/GameServer/RemoteView/Party/ShowPartyRequestPlugIn.cs index 17ecbb875..5ab6622fc 100644 --- a/src/GameServer/RemoteView/Party/ShowPartyRequestPlugIn.cs +++ b/src/GameServer/RemoteView/Party/ShowPartyRequestPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Party; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("ShowPartyRequestPlugIn", "The default implementation of the IShowPartyRequestPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "ShowPartyRequestPlugIn", Description = "The default implementation of the IShowPartyRequestPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("d25e8b80-3128-4102-8916-98f3d68aa065")] public class ShowPartyRequestPlugIn : IShowPartyRequestPlugIn { diff --git a/src/GameServer/RemoteView/Party/UpdatePartyListPlugIn.cs b/src/GameServer/RemoteView/Party/UpdatePartyListPlugIn.cs index b4440d742..b80102afa 100644 --- a/src/GameServer/RemoteView/Party/UpdatePartyListPlugIn.cs +++ b/src/GameServer/RemoteView/Party/UpdatePartyListPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Party; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(UpdatePartyListPlugIn), "The default implementation of the IUpdatePartyListPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(UpdatePartyListPlugIn), Description = "The default implementation of the IUpdatePartyListPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("bf880a4b-f4f6-41f0-adff-6eab0e99d985")] [MinimumClient(0, 90, ClientLanguage.Invariant)] public class UpdatePartyListPlugIn : IUpdatePartyListPlugIn diff --git a/src/GameServer/RemoteView/Party/UpdatePartyListPlugIn075.cs b/src/GameServer/RemoteView/Party/UpdatePartyListPlugIn075.cs index cf1a1fbba..a32da1094 100644 --- a/src/GameServer/RemoteView/Party/UpdatePartyListPlugIn075.cs +++ b/src/GameServer/RemoteView/Party/UpdatePartyListPlugIn075.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Party; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(UpdatePartyListPlugIn075), "The default implementation of the IUpdatePartyListPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(UpdatePartyListPlugIn075), Description = "The default implementation of the IUpdatePartyListPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("125303BA-9614-45CE-A0C5-A82F1535367A")] [MaximumClient(0, 89, ClientLanguage.Invariant)] public class UpdatePartyListPlugIn075 : IUpdatePartyListPlugIn diff --git a/src/GameServer/RemoteView/Pet/PetAttackViewPlugIn.cs b/src/GameServer/RemoteView/Pet/PetAttackViewPlugIn.cs index 61cf7ba66..ebe2cdc0e 100644 --- a/src/GameServer/RemoteView/Pet/PetAttackViewPlugIn.cs +++ b/src/GameServer/RemoteView/Pet/PetAttackViewPlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Pet; /// /// The default implementation of the chat view which is forwarding everything to the game client which specific data packets. /// -[PlugIn(nameof(PetAttackViewPlugIn), "View plugin to show pet attacks.")] +[PlugIn] +[Display(Name = nameof(PetAttackViewPlugIn), Description = "View plugin to show pet attacks.")] [Guid("1796C164-ABB8-4AD5-89E2-EA905D20036D")] internal class PetAttackViewPlugIn : IPetAttackViewPlugIn { diff --git a/src/GameServer/RemoteView/Pet/PetBehaviourChangedViewPlugIn.cs b/src/GameServer/RemoteView/Pet/PetBehaviourChangedViewPlugIn.cs index 2769e73a4..17ad3f583 100644 --- a/src/GameServer/RemoteView/Pet/PetBehaviourChangedViewPlugIn.cs +++ b/src/GameServer/RemoteView/Pet/PetBehaviourChangedViewPlugIn.cs @@ -17,7 +17,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Pet; /// /// The default implementation of the chat view which is forwarding everything to the game client which specific data packets. /// -[PlugIn(nameof(PetBehaviourChangedViewPlugIn), "View plugin to signal a changed pet behaviour.")] +[PlugIn] +[Display(Name = nameof(PetBehaviourChangedViewPlugIn), Description = "View plugin to signal a changed pet behaviour.")] [Guid("7402B7AA-1DCA-437A-A5D1-1B54C54EC0FC")] internal class PetBehaviourChangedViewPlugIn : IPetBehaviourChangedViewPlugIn { diff --git a/src/GameServer/RemoteView/Pet/PetInfoViewPlugIn.cs b/src/GameServer/RemoteView/Pet/PetInfoViewPlugIn.cs index 148a67db8..da76c7a13 100644 --- a/src/GameServer/RemoteView/Pet/PetInfoViewPlugIn.cs +++ b/src/GameServer/RemoteView/Pet/PetInfoViewPlugIn.cs @@ -17,7 +17,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Pet; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(PetInfoViewPlugIn), "The default implementation of the IPetInfoViewPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(PetInfoViewPlugIn), Description = "The default implementation of the IPetInfoViewPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("9346B880-7B4E-4FEF-A342-419E88392250")] public class PetInfoViewPlugIn : IPetInfoViewPlugIn { diff --git a/src/GameServer/RemoteView/PlayerShop/PlayerShopClosedPlugIn.cs b/src/GameServer/RemoteView/PlayerShop/PlayerShopClosedPlugIn.cs index 3ed40f631..457b98a6d 100644 --- a/src/GameServer/RemoteView/PlayerShop/PlayerShopClosedPlugIn.cs +++ b/src/GameServer/RemoteView/PlayerShop/PlayerShopClosedPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.PlayerShop; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("PlayerShopClosedPlugIn", "The default implementation of the IPlayerShopClosedPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "PlayerShopClosedPlugIn", Description = "The default implementation of the IPlayerShopClosedPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("351cf726-5091-4995-9228-81c089d1da16")] public class PlayerShopClosedPlugIn : IPlayerShopClosedPlugIn { diff --git a/src/GameServer/RemoteView/PlayerShop/PlayerShopOpenedPlugIn.cs b/src/GameServer/RemoteView/PlayerShop/PlayerShopOpenedPlugIn.cs index 9eb3329b0..e5151c3db 100644 --- a/src/GameServer/RemoteView/PlayerShop/PlayerShopOpenedPlugIn.cs +++ b/src/GameServer/RemoteView/PlayerShop/PlayerShopOpenedPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.PlayerShop; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("PlayerShopOpenedPlugIn", "The default implementation of the IPlayerShopOpenedPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "PlayerShopOpenedPlugIn", Description = "The default implementation of the IPlayerShopOpenedPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("c61e9a96-57d0-4bf1-9667-62b0c2104314")] public class PlayerShopOpenedPlugIn : IPlayerShopOpenedPlugIn { diff --git a/src/GameServer/RemoteView/PlayerShop/ShowShopItemListExtendedPlugIn.cs b/src/GameServer/RemoteView/PlayerShop/ShowShopItemListExtendedPlugIn.cs index 46262bb38..b39f19b36 100644 --- a/src/GameServer/RemoteView/PlayerShop/ShowShopItemListExtendedPlugIn.cs +++ b/src/GameServer/RemoteView/PlayerShop/ShowShopItemListExtendedPlugIn.cs @@ -16,7 +16,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.PlayerShop; /// /// The extended implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(ShowShopItemListExtendedPlugIn), "The extended implementation of the IShowShopItemListPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(ShowShopItemListExtendedPlugIn), Description = "The extended implementation of the IShowShopItemListPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("D64E9027-4801-46EE-9FD0-2FC66C33FE32")] [MinimumClient(106, 3, ClientLanguage.Invariant)] public class ShowShopItemListExtendedPlugIn : IShowShopItemListPlugIn diff --git a/src/GameServer/RemoteView/PlayerShop/ShowShopItemListPlugIn.cs b/src/GameServer/RemoteView/PlayerShop/ShowShopItemListPlugIn.cs index 67710fc30..0d1c93398 100644 --- a/src/GameServer/RemoteView/PlayerShop/ShowShopItemListPlugIn.cs +++ b/src/GameServer/RemoteView/PlayerShop/ShowShopItemListPlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.PlayerShop; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("ShowShopItemListPlugIn", "The default implementation of the IShowShopItemListPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "ShowShopItemListPlugIn", Description = "The default implementation of the IShowShopItemListPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("14220c30-8a5e-458b-8fb5-f4c6bbc2c4a9")] public class ShowShopItemListPlugIn : IShowShopItemListPlugIn { diff --git a/src/GameServer/RemoteView/PlayerShop/ShowShopsOfPlayersPlugIn.cs b/src/GameServer/RemoteView/PlayerShop/ShowShopsOfPlayersPlugIn.cs index 20d9f5499..8539099cb 100644 --- a/src/GameServer/RemoteView/PlayerShop/ShowShopsOfPlayersPlugIn.cs +++ b/src/GameServer/RemoteView/PlayerShop/ShowShopsOfPlayersPlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.PlayerShop; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("ShowShopsOfPlayersPlugIn", "The default implementation of the IShowShopsOfPlayersPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "ShowShopsOfPlayersPlugIn", Description = "The default implementation of the IShowShopsOfPlayersPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("619df3b3-6559-4336-975f-04a2f5867f38")] public class ShowShopsOfPlayersPlugIn : IShowShopsOfPlayersPlugIn { diff --git a/src/GameServer/RemoteView/Quest/CurrentlyActiveQuestsPlugIn.cs b/src/GameServer/RemoteView/Quest/CurrentlyActiveQuestsPlugIn.cs index 10f1f250f..b364cc51d 100644 --- a/src/GameServer/RemoteView/Quest/CurrentlyActiveQuestsPlugIn.cs +++ b/src/GameServer/RemoteView/Quest/CurrentlyActiveQuestsPlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Quest; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("Quest - Currently Active Quests", "The default implementation of the ICurrentlyActiveQuestsPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "Quest - Currently Active Quests", Description = "The default implementation of the ICurrentlyActiveQuestsPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("9851157D-97CA-42F3-840C-8448D02B49A4")] [MinimumClient(5, 0, ClientLanguage.Invariant)] public class CurrentlyActiveQuestsPlugIn : ICurrentlyActiveQuestsPlugIn diff --git a/src/GameServer/RemoteView/Quest/LegacyQuestRewardPlugIn.cs b/src/GameServer/RemoteView/Quest/LegacyQuestRewardPlugIn.cs index 1181c68ad..7a9974f7b 100644 --- a/src/GameServer/RemoteView/Quest/LegacyQuestRewardPlugIn.cs +++ b/src/GameServer/RemoteView/Quest/LegacyQuestRewardPlugIn.cs @@ -20,7 +20,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Quest; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("Quest - Reward", "The default implementation of the ILegacyQuestRewardPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "Quest - Reward", Description = "The default implementation of the ILegacyQuestRewardPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("53BEDA2A-9FE6-406D-AE6D-8E4DDDA3D73D")] public class LegacyQuestRewardPlugIn : ILegacyQuestRewardPlugIn { diff --git a/src/GameServer/RemoteView/Quest/LegacyQuestStateDialogPlugIn.cs b/src/GameServer/RemoteView/Quest/LegacyQuestStateDialogPlugIn.cs index 84847129a..2ed5eaf59 100644 --- a/src/GameServer/RemoteView/Quest/LegacyQuestStateDialogPlugIn.cs +++ b/src/GameServer/RemoteView/Quest/LegacyQuestStateDialogPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Quest; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("Quest - Status Dialog", "The default implementation of the ILegacyQuestStateDialogPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "Quest - Status Dialog", Description = "The default implementation of the ILegacyQuestStateDialogPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("F43DA7A9-1ACC-4FBB-9E15-8BE977F4CAF9")] public class LegacyQuestStateDialogPlugIn : ILegacyQuestStateDialogPlugIn { diff --git a/src/GameServer/RemoteView/Quest/QuestCancelledPlugIn.cs b/src/GameServer/RemoteView/Quest/QuestCancelledPlugIn.cs index 5f074fc66..00759695a 100644 --- a/src/GameServer/RemoteView/Quest/QuestCancelledPlugIn.cs +++ b/src/GameServer/RemoteView/Quest/QuestCancelledPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Quest; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("Quest - Cancelled", "The default implementation of the IQuestCancelledPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "Quest - Cancelled", Description = "The default implementation of the IQuestCancelledPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("733C8E1A-A663-4804-96E3-1EA955438970")] public class QuestCancelledPlugIn : IQuestCancelledPlugIn { diff --git a/src/GameServer/RemoteView/Quest/QuestCompletionResponsePlugIn.cs b/src/GameServer/RemoteView/Quest/QuestCompletionResponsePlugIn.cs index 1c582ba8e..e241e7971 100644 --- a/src/GameServer/RemoteView/Quest/QuestCompletionResponsePlugIn.cs +++ b/src/GameServer/RemoteView/Quest/QuestCompletionResponsePlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Quest; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("Quest - Completion Response", "The default implementation of the IQuestCompletionResponsePlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "Quest - Completion Response", Description = "The default implementation of the IQuestCompletionResponsePlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("4BCA9C67-A695-4244-9F5A-3B7CAC049DB4")] public class QuestCompletionResponsePlugIn : IQuestCompletionResponsePlugIn { diff --git a/src/GameServer/RemoteView/Quest/QuestEventResponsePlugIn.cs b/src/GameServer/RemoteView/Quest/QuestEventResponsePlugIn.cs index f6bbbdca8..6a50c9f69 100644 --- a/src/GameServer/RemoteView/Quest/QuestEventResponsePlugIn.cs +++ b/src/GameServer/RemoteView/Quest/QuestEventResponsePlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Quest; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("Quest - Event Quests Response", "The default implementation of the IQuestEventResponsePlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "Quest - Event Quests Response", Description = "The default implementation of the IQuestEventResponsePlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("5EAE1634-9589-4DEB-AEBA-93D0AC8AC5DF")] public class QuestEventResponsePlugIn : IQuestEventResponsePlugIn { diff --git a/src/GameServer/RemoteView/Quest/QuestProgressExtendedPlugIn.cs b/src/GameServer/RemoteView/Quest/QuestProgressExtendedPlugIn.cs index e8c3c1192..01c604d25 100644 --- a/src/GameServer/RemoteView/Quest/QuestProgressExtendedPlugIn.cs +++ b/src/GameServer/RemoteView/Quest/QuestProgressExtendedPlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Quest; /// /// The extended implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(QuestProgressExtendedPlugIn), "The extended implementation of the IQuestProgressPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(QuestProgressExtendedPlugIn), Description = "The extended implementation of the IQuestProgressPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("30446944-29C6-48EE-A62E-3B724E7E444D")] [MinimumClient(106, 3, ClientLanguage.Invariant)] public class QuestProgressExtendedPlugIn : IQuestProgressPlugIn diff --git a/src/GameServer/RemoteView/Quest/QuestProgressPlugIn.cs b/src/GameServer/RemoteView/Quest/QuestProgressPlugIn.cs index 8c913b9eb..dbd16bd07 100644 --- a/src/GameServer/RemoteView/Quest/QuestProgressPlugIn.cs +++ b/src/GameServer/RemoteView/Quest/QuestProgressPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Quest; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(QuestProgressPlugIn), "The default implementation of the IQuestProgressPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(QuestProgressPlugIn), Description = "The default implementation of the IQuestProgressPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("5D2B7F90-FEFA-4889-B339-D64512471613")] public class QuestProgressPlugIn : IQuestProgressPlugIn { diff --git a/src/GameServer/RemoteView/Quest/QuestStartedPlugIn.cs b/src/GameServer/RemoteView/Quest/QuestStartedPlugIn.cs index b6c046991..e498dba7c 100644 --- a/src/GameServer/RemoteView/Quest/QuestStartedPlugIn.cs +++ b/src/GameServer/RemoteView/Quest/QuestStartedPlugIn.cs @@ -16,7 +16,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Quest; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("Quest - Started", "The default implementation of the IQuestStartedPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "Quest - Started", Description = "The default implementation of the IQuestStartedPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("2D813203-8266-4BB7-A267-E476AD11AC4B")] public class QuestStartedPlugIn : IQuestStartedPlugIn { diff --git a/src/GameServer/RemoteView/Quest/QuestStateResponseExtendedPlugIn.cs b/src/GameServer/RemoteView/Quest/QuestStateResponseExtendedPlugIn.cs index 27a3d87e2..a90323400 100644 --- a/src/GameServer/RemoteView/Quest/QuestStateResponseExtendedPlugIn.cs +++ b/src/GameServer/RemoteView/Quest/QuestStateResponseExtendedPlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Quest; /// /// The extended implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(QuestStateResponseExtendedPlugIn), "The extended implementation of the IQuestStateResponsePlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(QuestStateResponseExtendedPlugIn), Description = "The extended implementation of the IQuestStateResponsePlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("5EA4F6F0-BF20-48AD-B491-11E707052E95")] [MinimumClient(106, 3, ClientLanguage.Invariant)] public class QuestStateResponseExtendedPlugIn : QuestStateResponsePlugIn, IQuestStateResponsePlugIn diff --git a/src/GameServer/RemoteView/Quest/QuestStateResponsePlugIn.cs b/src/GameServer/RemoteView/Quest/QuestStateResponsePlugIn.cs index 02a7a8144..18c1c4bc5 100644 --- a/src/GameServer/RemoteView/Quest/QuestStateResponsePlugIn.cs +++ b/src/GameServer/RemoteView/Quest/QuestStateResponsePlugIn.cs @@ -16,7 +16,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Quest; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("Quest - State response", "The default implementation of the IQuestStateResponsePlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "Quest - State response", Description = "The default implementation of the IQuestStateResponsePlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("BBE63528-67DC-4D5F-8C9D-D09AB488CC55")] [MinimumClient(0, 90, ClientLanguage.Invariant)] public class QuestStateResponsePlugIn : IQuestStateResponsePlugIn diff --git a/src/GameServer/RemoteView/Quest/QuestStepInfoPlugIn.cs b/src/GameServer/RemoteView/Quest/QuestStepInfoPlugIn.cs index a2fa3be4b..e4bf33f04 100644 --- a/src/GameServer/RemoteView/Quest/QuestStepInfoPlugIn.cs +++ b/src/GameServer/RemoteView/Quest/QuestStepInfoPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Quest; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("Quest - Step Info", "The default implementation of the IQuestStepInfoPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "Quest - Step Info", Description = "The default implementation of the IQuestStepInfoPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("099AACF3-2933-486C-83DE-01A340DACAA6")] public class QuestStepInfoPlugIn : IQuestStepInfoPlugIn { diff --git a/src/GameServer/RemoteView/Quest/ShowAvailableQuestsPlugIn.cs b/src/GameServer/RemoteView/Quest/ShowAvailableQuestsPlugIn.cs index f29fcd486..d48f6db49 100644 --- a/src/GameServer/RemoteView/Quest/ShowAvailableQuestsPlugIn.cs +++ b/src/GameServer/RemoteView/Quest/ShowAvailableQuestsPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Quest; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("Quest - Show available quests", "The default implementation of the IShowAvailableQuestsPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "Quest - Show available quests", Description = "The default implementation of the IShowAvailableQuestsPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("63C7B3E2-EF66-49BB-A9F8-EFBD2389588F")] public class ShowAvailableQuestsPlugIn : IShowAvailableQuestsPlugIn { diff --git a/src/GameServer/RemoteView/ShowMessagePlugIn.cs b/src/GameServer/RemoteView/ShowMessagePlugIn.cs index d57420ffe..674056d5d 100644 --- a/src/GameServer/RemoteView/ShowMessagePlugIn.cs +++ b/src/GameServer/RemoteView/ShowMessagePlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("ShowMessagePlugIn", "The default implementation of the IShowMessagePlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "ShowMessagePlugIn", Description = "The default implementation of the IShowMessagePlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("e294f4ce-f2c6-4a92-8cd0-40d8d5afae66")] public class ShowMessagePlugIn : IShowMessagePlugIn { diff --git a/src/GameServer/RemoteView/Trade/ChangeTradeButtonStatePlugIn.cs b/src/GameServer/RemoteView/Trade/ChangeTradeButtonStatePlugIn.cs index d6338c18f..763fa1644 100644 --- a/src/GameServer/RemoteView/Trade/ChangeTradeButtonStatePlugIn.cs +++ b/src/GameServer/RemoteView/Trade/ChangeTradeButtonStatePlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Trade; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("ChangeTradeButtonStatePlugIn", "The default implementation of the IChangeTradeButtonStatePlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "ChangeTradeButtonStatePlugIn", Description = "The default implementation of the IChangeTradeButtonStatePlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("d33144a1-634a-4c7a-9add-2086c3b9b0ea")] public class ChangeTradeButtonStatePlugIn : IChangeTradeButtonStatePlugIn { diff --git a/src/GameServer/RemoteView/Trade/RequestedTradeMoneyHasBeenSetPlugIn.cs b/src/GameServer/RemoteView/Trade/RequestedTradeMoneyHasBeenSetPlugIn.cs index 87465ac6c..1be625fa2 100644 --- a/src/GameServer/RemoteView/Trade/RequestedTradeMoneyHasBeenSetPlugIn.cs +++ b/src/GameServer/RemoteView/Trade/RequestedTradeMoneyHasBeenSetPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Trade; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("RequestedTradeMoneyHasBeenSetPlugIn", "The default implementation of the IRequestedTradeMoneyHasBeenSetPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "RequestedTradeMoneyHasBeenSetPlugIn", Description = "The default implementation of the IRequestedTradeMoneyHasBeenSetPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("d07bc23a-e4ec-462b-96d6-b2da739664d0")] public class RequestedTradeMoneyHasBeenSetPlugIn : IRequestedTradeMoneyHasBeenSetPlugIn { diff --git a/src/GameServer/RemoteView/Trade/SetTradeMoneyPlugIn.cs b/src/GameServer/RemoteView/Trade/SetTradeMoneyPlugIn.cs index 20729d6c6..eba1792ef 100644 --- a/src/GameServer/RemoteView/Trade/SetTradeMoneyPlugIn.cs +++ b/src/GameServer/RemoteView/Trade/SetTradeMoneyPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Trade; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("SetTradeMoneyPlugIn", "The default implementation of the ISetTradeMoneyPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "SetTradeMoneyPlugIn", Description = "The default implementation of the ISetTradeMoneyPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("ca421b33-4ac2-4496-a8a3-11b740cded8c")] public class SetTradeMoneyPlugIn : ISetTradeMoneyPlugIn { diff --git a/src/GameServer/RemoteView/Trade/ShowTradeRequestAnswerPlugIn.cs b/src/GameServer/RemoteView/Trade/ShowTradeRequestAnswerPlugIn.cs index f51878ac9..8932c77ba 100644 --- a/src/GameServer/RemoteView/Trade/ShowTradeRequestAnswerPlugIn.cs +++ b/src/GameServer/RemoteView/Trade/ShowTradeRequestAnswerPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Trade; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("ShowTradeRequestAnswerPlugIn", "The default implementation of the IShowTradeRequestAnswerPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "ShowTradeRequestAnswerPlugIn", Description = "The default implementation of the IShowTradeRequestAnswerPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("243cbc67-7af3-48e2-9a56-d6e49c86b816")] public class ShowTradeRequestAnswerPlugIn : IShowTradeRequestAnswerPlugIn { diff --git a/src/GameServer/RemoteView/Trade/ShowTradeRequestPlugIn.cs b/src/GameServer/RemoteView/Trade/ShowTradeRequestPlugIn.cs index 594220718..9c3b47f91 100644 --- a/src/GameServer/RemoteView/Trade/ShowTradeRequestPlugIn.cs +++ b/src/GameServer/RemoteView/Trade/ShowTradeRequestPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Trade; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("ShowTradeRequestPlugIn", "The default implementation of the IShowTradeRequestPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "ShowTradeRequestPlugIn", Description = "The default implementation of the IShowTradeRequestPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("2e6e8c0e-8220-46e3-931a-630d596178ca")] public class ShowTradeRequestPlugIn : IShowTradeRequestPlugIn { diff --git a/src/GameServer/RemoteView/Trade/TradeFinishedPlugIn.cs b/src/GameServer/RemoteView/Trade/TradeFinishedPlugIn.cs index e1b8b8280..da013b771 100644 --- a/src/GameServer/RemoteView/Trade/TradeFinishedPlugIn.cs +++ b/src/GameServer/RemoteView/Trade/TradeFinishedPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Trade; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("TradeFinishedPlugIn", "The default implementation of the ITradeFinishedPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "TradeFinishedPlugIn", Description = "The default implementation of the ITradeFinishedPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("ec11fe95-31c6-4a2e-942d-4d10a84830c1")] public class TradeFinishedPlugIn : ITradeFinishedPlugIn { diff --git a/src/GameServer/RemoteView/Trade/TradeItemAppearPlugIn.cs b/src/GameServer/RemoteView/Trade/TradeItemAppearPlugIn.cs index eec1511a0..214f3d5dc 100644 --- a/src/GameServer/RemoteView/Trade/TradeItemAppearPlugIn.cs +++ b/src/GameServer/RemoteView/Trade/TradeItemAppearPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Trade; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("TradeItemAppearPlugIn", "The default implementation of the ITradeItemAppearPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "TradeItemAppearPlugIn", Description = "The default implementation of the ITradeItemAppearPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("560d18e7-7d36-47bf-9298-8017454fa7bf")] public class TradeItemAppearPlugIn : ITradeItemAppearPlugIn { diff --git a/src/GameServer/RemoteView/Trade/TradeItemDisappearPlugIn.cs b/src/GameServer/RemoteView/Trade/TradeItemDisappearPlugIn.cs index 58f4d7d0d..febbec2f2 100644 --- a/src/GameServer/RemoteView/Trade/TradeItemDisappearPlugIn.cs +++ b/src/GameServer/RemoteView/Trade/TradeItemDisappearPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Trade; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("TradeItemDisappearPlugIn", "The default implementation of the ITradeItemDisappearPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "TradeItemDisappearPlugIn", Description = "The default implementation of the ITradeItemDisappearPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("5ac9569b-3c5a-468e-bf48-1e67f81281c5")] public class TradeItemDisappearPlugIn : ITradeItemDisappearPlugIn { diff --git a/src/GameServer/RemoteView/Vault/CloseVaultPlugIn.cs b/src/GameServer/RemoteView/Vault/CloseVaultPlugIn.cs index 86f4231c5..b7533616b 100644 --- a/src/GameServer/RemoteView/Vault/CloseVaultPlugIn.cs +++ b/src/GameServer/RemoteView/Vault/CloseVaultPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Vault; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("CloseVaultPlugIn", "The default implementation of the ICloseVaultPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "CloseVaultPlugIn", Description = "The default implementation of the ICloseVaultPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("3030e5aa-01a2-4523-b42e-2eef16f4b58f")] public class CloseVaultPlugIn : ICloseVaultPlugIn { diff --git a/src/GameServer/RemoteView/Vault/ShowVaultLockChangeResponsePlugIn.cs b/src/GameServer/RemoteView/Vault/ShowVaultLockChangeResponsePlugIn.cs index b912e4153..e4cee7e7d 100644 --- a/src/GameServer/RemoteView/Vault/ShowVaultLockChangeResponsePlugIn.cs +++ b/src/GameServer/RemoteView/Vault/ShowVaultLockChangeResponsePlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Vault; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(ShowVaultLockChangeResponsePlugIn), "The default implementation of the IShowVaultLockChangeResponse which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(ShowVaultLockChangeResponsePlugIn), Description = "The default implementation of the IShowVaultLockChangeResponse which is forwarding everything to the game client with specific data packets.")] [Guid("3F8A1129-A139-4BD7-9122-EE0D189C5F39")] public class ShowVaultLockChangeResponsePlugIn : IShowVaultLockChangeResponse { diff --git a/src/GameServer/RemoteView/Vault/ShowVaultPlugIn.cs b/src/GameServer/RemoteView/Vault/ShowVaultPlugIn.cs index ee334473d..c6f958623 100644 --- a/src/GameServer/RemoteView/Vault/ShowVaultPlugIn.cs +++ b/src/GameServer/RemoteView/Vault/ShowVaultPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Vault; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("ShowVaultPlugIn", "The default implementation of the IShowVaultPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "ShowVaultPlugIn", Description = "The default implementation of the IShowVaultPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("aa20c7aa-08ad-4fec-9138-88bcdc690afa")] public class ShowVaultPlugIn : IShowVaultPlugIn { diff --git a/src/GameServer/RemoteView/Vault/UpdateVaultMoneyPlugIn.cs b/src/GameServer/RemoteView/Vault/UpdateVaultMoneyPlugIn.cs index d927a61dd..69d104030 100644 --- a/src/GameServer/RemoteView/Vault/UpdateVaultMoneyPlugIn.cs +++ b/src/GameServer/RemoteView/Vault/UpdateVaultMoneyPlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Vault; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("UpdateVaultMoneyPlugIn", "The default implementation of the IUpdateVaultMoneyPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "UpdateVaultMoneyPlugIn", Description = "The default implementation of the IUpdateVaultMoneyPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("78b0567d-4976-4861-bea2-9561ea166199")] public class UpdateVaultMoneyPlugIn : IUpdateVaultMoneyPlugIn { diff --git a/src/GameServer/RemoteView/Vault/UpdateVaultStatePlugIn.cs b/src/GameServer/RemoteView/Vault/UpdateVaultStatePlugIn.cs index 1a3222bbf..5c6312574 100644 --- a/src/GameServer/RemoteView/Vault/UpdateVaultStatePlugIn.cs +++ b/src/GameServer/RemoteView/Vault/UpdateVaultStatePlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Vault; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(UpdateVaultStatePlugIn), "The default implementation of the IUpdateVaultStatePlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(UpdateVaultStatePlugIn), Description = "The default implementation of the IUpdateVaultStatePlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("1B0A5F5B-85A0-4228-9392-584E89FB8D88")] public class UpdateVaultStatePlugIn : IUpdateVaultStatePlugIn { diff --git a/src/GameServer/RemoteView/World/AppearanceChangedPlugIn.cs b/src/GameServer/RemoteView/World/AppearanceChangedPlugIn.cs index 278aadf91..8587ca79e 100644 --- a/src/GameServer/RemoteView/World/AppearanceChangedPlugIn.cs +++ b/src/GameServer/RemoteView/World/AppearanceChangedPlugIn.cs @@ -17,7 +17,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.World; /// /// The default implementation of the which is forwarding appearance changes of other players to the game client with specific data packets. /// -[PlugIn("Appearance changed", "The default implementation of the IAppearanceChangedPlugIn which is forwarding appearance changes of other players to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "Appearance changed", Description = "The default implementation of the IAppearanceChangedPlugIn which is forwarding appearance changes of other players to the game client with specific data packets.")] [Guid("1d097399-d5af-40de-a97d-a812f13c2f20")] public class AppearanceChangedPlugIn : IAppearanceChangedPlugIn { @@ -80,7 +81,8 @@ int Write() /// /// The extended implementation of the which is forwarding appearance changes of other players to the game client with specific data packets. /// -[PlugIn(nameof(AppearanceChangedExtendedPlugIn), "The extended implementation of the IAppearanceChangedPlugIn which is forwarding appearance changes of other players to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(AppearanceChangedExtendedPlugIn), Description = "The extended implementation of the IAppearanceChangedPlugIn which is forwarding appearance changes of other players to the game client with specific data packets.")] [Guid("A2F298E4-9F48-402A-B30D-9BC2BA8DEB2E")] [MinimumClient(106, 3, ClientLanguage.Invariant)] public class AppearanceChangedExtendedPlugIn : IAppearanceChangedPlugIn diff --git a/src/GameServer/RemoteView/World/DeActivateMagicEffectPlugIn.cs b/src/GameServer/RemoteView/World/DeActivateMagicEffectPlugIn.cs index 7ccccd352..884ca195c 100644 --- a/src/GameServer/RemoteView/World/DeActivateMagicEffectPlugIn.cs +++ b/src/GameServer/RemoteView/World/DeActivateMagicEffectPlugIn.cs @@ -18,7 +18,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.World; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("De & ActivateMagicEffectPlugIn", "The default implementation of the IActivateMagicEffectPlugIn and IDeactivateMagicEffectPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "De & ActivateMagicEffectPlugIn", Description = "The default implementation of the IActivateMagicEffectPlugIn and IDeactivateMagicEffectPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("67642604-8abb-44b9-a668-989cb3b28e89")] [MinimumClient(0, 90, ClientLanguage.Invariant)] public class DeActivateMagicEffectPlugIn : IActivateMagicEffectPlugIn, IDeactivateMagicEffectPlugIn diff --git a/src/GameServer/RemoteView/World/DeActivateMagicEffectPlugIn075.cs b/src/GameServer/RemoteView/World/DeActivateMagicEffectPlugIn075.cs index 1a50af374..a87706607 100644 --- a/src/GameServer/RemoteView/World/DeActivateMagicEffectPlugIn075.cs +++ b/src/GameServer/RemoteView/World/DeActivateMagicEffectPlugIn075.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.World; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(DeActivateMagicEffectPlugIn075), "The default implementation of the IActivateMagicEffectPlugIn and IDeactivateMagicEffectPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(DeActivateMagicEffectPlugIn075), Description = "The default implementation of the IActivateMagicEffectPlugIn and IDeactivateMagicEffectPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("3CF8BFBA-FBDA-431D-9806-86B3DEC3AD54")] [MaximumClient(0, 89, ClientLanguage.Invariant)] public class DeActivateMagicEffectPlugIn075 : IDeactivateMagicEffectPlugIn diff --git a/src/GameServer/RemoteView/World/DroppedItemsDisappearedPlugIn.cs b/src/GameServer/RemoteView/World/DroppedItemsDisappearedPlugIn.cs index 10c4971d2..010204390 100644 --- a/src/GameServer/RemoteView/World/DroppedItemsDisappearedPlugIn.cs +++ b/src/GameServer/RemoteView/World/DroppedItemsDisappearedPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.World; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("DroppedItemsDisappearedPlugIn", "The default implementation of the IDroppedItemsDisappearedPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "DroppedItemsDisappearedPlugIn", Description = "The default implementation of the IDroppedItemsDisappearedPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("ecd14e95-33be-44f7-bb9b-1429a57a7a94")] public class DroppedItemsDisappearedPlugIn : IDroppedItemsDisappearedPlugIn { diff --git a/src/GameServer/RemoteView/World/MapChangePlugIn.cs b/src/GameServer/RemoteView/World/MapChangePlugIn.cs index 0239fa2fc..dd90f3c03 100644 --- a/src/GameServer/RemoteView/World/MapChangePlugIn.cs +++ b/src/GameServer/RemoteView/World/MapChangePlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.World; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("MapChangePlugIn", "The default implementation of the IMapChangePlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "MapChangePlugIn", Description = "The default implementation of the IMapChangePlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("234b477d-6fe9-4caa-a03f-78cb25518b39")] [MinimumClient(1, 0, ClientLanguage.Invariant)] public class MapChangePlugIn : IMapChangePlugIn diff --git a/src/GameServer/RemoteView/World/MapChangePlugIn075.cs b/src/GameServer/RemoteView/World/MapChangePlugIn075.cs index 0a7337c20..dd36c7988 100644 --- a/src/GameServer/RemoteView/World/MapChangePlugIn075.cs +++ b/src/GameServer/RemoteView/World/MapChangePlugIn075.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.World; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(MapChangePlugIn075), "The default implementation of the IMapChangePlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(MapChangePlugIn075), Description = "The default implementation of the IMapChangePlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("88195844-06C7-4EDA-8501-8B75A8B4B3F4")] public class MapChangePlugIn075 : IMapChangePlugIn { diff --git a/src/GameServer/RemoteView/World/MapEventStateUpdatePlugIn.cs b/src/GameServer/RemoteView/World/MapEventStateUpdatePlugIn.cs index 2abd14046..34e33667a 100644 --- a/src/GameServer/RemoteView/World/MapEventStateUpdatePlugIn.cs +++ b/src/GameServer/RemoteView/World/MapEventStateUpdatePlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.World; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(MapEventStateUpdatePlugIn), "The default implementation of the IMapEventStateUpdatePlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(MapEventStateUpdatePlugIn), Description = "The default implementation of the IMapEventStateUpdatePlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("8A34C69D-59CC-4251-9E8E-D80154A7AC8C")] public class MapEventStateUpdatePlugIn : IMapEventStateUpdatePlugIn { diff --git a/src/GameServer/RemoteView/World/NewNpcsInScopePlugIn.cs b/src/GameServer/RemoteView/World/NewNpcsInScopePlugIn.cs index 0563da197..f4cdef644 100644 --- a/src/GameServer/RemoteView/World/NewNpcsInScopePlugIn.cs +++ b/src/GameServer/RemoteView/World/NewNpcsInScopePlugIn.cs @@ -16,7 +16,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.World; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("NPCs in scope PlugIn", "The default implementation of the INewNpcsInScopePlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "NPCs in scope PlugIn", Description = "The default implementation of the INewNpcsInScopePlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("35449477-0fba-48cb-9371-f337433b0f9d")] [MinimumClient(5, 0, ClientLanguage.Invariant)] public class NewNpcsInScopePlugIn : INewNpcsInScopePlugIn diff --git a/src/GameServer/RemoteView/World/NewNpcsInScopePlugIn075.cs b/src/GameServer/RemoteView/World/NewNpcsInScopePlugIn075.cs index 19318085a..9c3459343 100644 --- a/src/GameServer/RemoteView/World/NewNpcsInScopePlugIn075.cs +++ b/src/GameServer/RemoteView/World/NewNpcsInScopePlugIn075.cs @@ -16,7 +16,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.World; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("NPCs in scope PlugIn 0.75", "The default implementation of the INewNpcsInScopePlugIn which is forwarding everything to the game client with specific data packets for version 0.75.")] +[PlugIn] +[Display(Name = "NPCs in scope PlugIn 0.75", Description = "The default implementation of the INewNpcsInScopePlugIn which is forwarding everything to the game client with specific data packets for version 0.75.")] [Guid("7E9CE800-E59F-4E90-A6F1-28214483213C")] [MinimumClient(0, 75, ClientLanguage.Invariant)] public class NewNpcsInScopePlugIn075 : INewNpcsInScopePlugIn diff --git a/src/GameServer/RemoteView/World/NewNpcsInScopePlugIn095.cs b/src/GameServer/RemoteView/World/NewNpcsInScopePlugIn095.cs index e7fd7e8ec..f08a1c54c 100644 --- a/src/GameServer/RemoteView/World/NewNpcsInScopePlugIn095.cs +++ b/src/GameServer/RemoteView/World/NewNpcsInScopePlugIn095.cs @@ -16,7 +16,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.World; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(NewNpcsInScopePlugIn095), "The default implementation of the INewNpcsInScopePlugIn which is forwarding everything to the game client with specific data packets for version 0.75.")] +[PlugIn] +[Display(Name = nameof(NewNpcsInScopePlugIn095), Description = "The default implementation of the INewNpcsInScopePlugIn which is forwarding everything to the game client with specific data packets for version 0.75.")] [Guid("ECCD99EB-425D-4C9B-8F04-2711BA7A4C1E")] [MinimumClient(0, 95, ClientLanguage.Invariant)] public class NewNpcsInScopePlugIn095 : INewNpcsInScopePlugIn diff --git a/src/GameServer/RemoteView/World/NewPlayersInScopeExtendedPlugIn.cs b/src/GameServer/RemoteView/World/NewPlayersInScopeExtendedPlugIn.cs index d9487fdd8..db2ed13e8 100644 --- a/src/GameServer/RemoteView/World/NewPlayersInScopeExtendedPlugIn.cs +++ b/src/GameServer/RemoteView/World/NewPlayersInScopeExtendedPlugIn.cs @@ -18,7 +18,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.World; /// /// The extended implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(NewPlayersInScopeExtendedPlugIn), "The extended implementation of the INewPlayersInScopePlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(NewPlayersInScopeExtendedPlugIn), Description = "The extended implementation of the INewPlayersInScopePlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("83E30752-501E-4A40-9698-9A5097825C30")] [MinimumClient(106, 3, ClientLanguage.Invariant)] public class NewPlayersInScopeExtendedPlugIn : NewPlayersInScopePlugIn, INewPlayersInScopePlugIn diff --git a/src/GameServer/RemoteView/World/NewPlayersInScopePlugIn.cs b/src/GameServer/RemoteView/World/NewPlayersInScopePlugIn.cs index f6d314dc7..4c7ff5fa6 100644 --- a/src/GameServer/RemoteView/World/NewPlayersInScopePlugIn.cs +++ b/src/GameServer/RemoteView/World/NewPlayersInScopePlugIn.cs @@ -20,7 +20,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.World; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("NewPlayersInScopePlugIn", "The default implementation of the INewPlayersInScopePlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "NewPlayersInScopePlugIn", Description = "The default implementation of the INewPlayersInScopePlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("4cd64537-ae5f-4030-bca1-7fa30ebff6c6")] [MinimumClient(5, 0, ClientLanguage.Invariant)] public class NewPlayersInScopePlugIn : INewPlayersInScopePlugIn diff --git a/src/GameServer/RemoteView/World/NewPlayersInScopePlugIn075.cs b/src/GameServer/RemoteView/World/NewPlayersInScopePlugIn075.cs index c9d053b40..65b74e717 100644 --- a/src/GameServer/RemoteView/World/NewPlayersInScopePlugIn075.cs +++ b/src/GameServer/RemoteView/World/NewPlayersInScopePlugIn075.cs @@ -19,7 +19,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.World; /// /// The implementation of the which is forwarding everything to the game client of version 0.75 with specific data packets. /// -[PlugIn(nameof(NewPlayersInScopePlugIn075), "The default implementation of the INewPlayersInScopePlugIn which is forwarding everything to the game client with specific data packets for version 0.75.")] +[PlugIn] +[Display(Name = nameof(NewPlayersInScopePlugIn075), Description = "The default implementation of the INewPlayersInScopePlugIn which is forwarding everything to the game client with specific data packets for version 0.75.")] [Guid("1B68C660-34DD-4733-834D-DEE8DC1517D3")] [MinimumClient(0, 75, ClientLanguage.Invariant)] public class NewPlayersInScopePlugIn075 : INewPlayersInScopePlugIn diff --git a/src/GameServer/RemoteView/World/NewPlayersInScopePlugIn095.cs b/src/GameServer/RemoteView/World/NewPlayersInScopePlugIn095.cs index 9f256ba09..ff14de82a 100644 --- a/src/GameServer/RemoteView/World/NewPlayersInScopePlugIn095.cs +++ b/src/GameServer/RemoteView/World/NewPlayersInScopePlugIn095.cs @@ -19,7 +19,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.World; /// /// The implementation of the which is forwarding everything to the game client of version 0.75 with specific data packets. /// -[PlugIn(nameof(NewPlayersInScopePlugIn095), "The default implementation of the INewPlayersInScopePlugIn which is forwarding everything to the game client with specific data packets for version 0.75.")] +[PlugIn] +[Display(Name = nameof(NewPlayersInScopePlugIn095), Description = "The default implementation of the INewPlayersInScopePlugIn which is forwarding everything to the game client with specific data packets for version 0.75.")] [Guid("400ACDFB-7A75-4339-802C-758178DF8305")] [MinimumClient(0, 95, ClientLanguage.Invariant)] public class NewPlayersInScopePlugIn095 : INewPlayersInScopePlugIn diff --git a/src/GameServer/RemoteView/World/ObjectGotKilledPlugIn.cs b/src/GameServer/RemoteView/World/ObjectGotKilledPlugIn.cs index e86cf6871..44fc62555 100644 --- a/src/GameServer/RemoteView/World/ObjectGotKilledPlugIn.cs +++ b/src/GameServer/RemoteView/World/ObjectGotKilledPlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.World; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(ObjectGotKilledPlugIn), "The default implementation of the IObjectGotKilledPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(ObjectGotKilledPlugIn), Description = "The default implementation of the IObjectGotKilledPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("fbe6666e-4425-4f33-b7c7-fc9b5fa36430")] public class ObjectGotKilledPlugIn : IObjectGotKilledPlugIn { diff --git a/src/GameServer/RemoteView/World/ObjectMovedPlugIn.cs b/src/GameServer/RemoteView/World/ObjectMovedPlugIn.cs index f30eb6f3a..1465e09fe 100644 --- a/src/GameServer/RemoteView/World/ObjectMovedPlugIn.cs +++ b/src/GameServer/RemoteView/World/ObjectMovedPlugIn.cs @@ -20,7 +20,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.World; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(ObjectMovedPlugIn), "The default implementation of the IObjectMovedPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(ObjectMovedPlugIn), Description = "The default implementation of the IObjectMovedPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("29ee689f-636c-47e7-a930-b60ce8e8993c")] [MinimumClient(1, 0, ClientLanguage.Invariant)] public class ObjectMovedPlugIn : IObjectMovedPlugIn diff --git a/src/GameServer/RemoteView/World/ObjectMovedPlugIn075.cs b/src/GameServer/RemoteView/World/ObjectMovedPlugIn075.cs index b582c35ae..f14bbc2bc 100644 --- a/src/GameServer/RemoteView/World/ObjectMovedPlugIn075.cs +++ b/src/GameServer/RemoteView/World/ObjectMovedPlugIn075.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.World; /// /// The implementation of the for version 0.75 which is forwarding everything to the game client with specific data packets. /// -[PlugIn("ObjectMovedPlugIn 0.75", "The default implementation of the IObjectMovedPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "ObjectMovedPlugIn 0.75", Description = "The default implementation of the IObjectMovedPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("3B387A61-F9E2-4866-BBD6-F236582E350A")] public class ObjectMovedPlugIn075 : ObjectMovedPlugIn { diff --git a/src/GameServer/RemoteView/World/ObjectMovedPlugInExtended.cs b/src/GameServer/RemoteView/World/ObjectMovedPlugInExtended.cs index fa2bc9499..70c94d6a9 100644 --- a/src/GameServer/RemoteView/World/ObjectMovedPlugInExtended.cs +++ b/src/GameServer/RemoteView/World/ObjectMovedPlugInExtended.cs @@ -20,7 +20,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.World; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(ObjectMovedPlugInExtended), "The default implementation of the IObjectMovedPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(ObjectMovedPlugInExtended), Description = "The default implementation of the IObjectMovedPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("a56b7400-e51d-4fd6-930b-479c14673719")] [MinimumClient(106, 3, ClientLanguage.Invariant)] public class ObjectMovedPlugInExtended : ObjectMovedPlugIn diff --git a/src/GameServer/RemoteView/World/ObjectsOutOfScopePlugIn.cs b/src/GameServer/RemoteView/World/ObjectsOutOfScopePlugIn.cs index 787384bb4..a05939c86 100644 --- a/src/GameServer/RemoteView/World/ObjectsOutOfScopePlugIn.cs +++ b/src/GameServer/RemoteView/World/ObjectsOutOfScopePlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.World; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("ObjectsOutOfScopePlugIn", "The default implementation of the IObjectsOutOfScopePlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "ObjectsOutOfScopePlugIn", Description = "The default implementation of the IObjectsOutOfScopePlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("88cea9ce-c186-4fd0-b6cc-6466d8a7531c")] public class ObjectsOutOfScopePlugIn : IObjectsOutOfScopePlugIn { diff --git a/src/GameServer/RemoteView/World/RespawnAfterDeathExtendedPlugIn.cs b/src/GameServer/RemoteView/World/RespawnAfterDeathExtendedPlugIn.cs index af264aee1..30c3625ae 100644 --- a/src/GameServer/RemoteView/World/RespawnAfterDeathExtendedPlugIn.cs +++ b/src/GameServer/RemoteView/World/RespawnAfterDeathExtendedPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.World; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(RespawnAfterDeathExtendedPlugIn), "The default implementation of the IRespawnAfterDeathPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(RespawnAfterDeathExtendedPlugIn), Description = "The default implementation of the IRespawnAfterDeathPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("91C636A7-6D92-4AC0-BAD5-859F60E5345F")] [MinimumClient(106, 0, ClientLanguage.Invariant)] public class RespawnAfterDeathExtendedPlugIn : IRespawnAfterDeathPlugIn diff --git a/src/GameServer/RemoteView/World/RespawnAfterDeathPlugIn.cs b/src/GameServer/RemoteView/World/RespawnAfterDeathPlugIn.cs index db3323564..efbc2970a 100644 --- a/src/GameServer/RemoteView/World/RespawnAfterDeathPlugIn.cs +++ b/src/GameServer/RemoteView/World/RespawnAfterDeathPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.World; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(RespawnAfterDeathPlugIn), "The default implementation of the IRespawnAfterDeathPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(RespawnAfterDeathPlugIn), Description = "The default implementation of the IRespawnAfterDeathPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("71CE460D-1025-45A2-94B7-46EC651A2664")] [MinimumClient(2, 0, ClientLanguage.Invariant)] public class RespawnAfterDeathPlugIn : IRespawnAfterDeathPlugIn diff --git a/src/GameServer/RemoteView/World/RespawnAfterDeathPlugIn075.cs b/src/GameServer/RemoteView/World/RespawnAfterDeathPlugIn075.cs index 678a84821..6ce7d16b6 100644 --- a/src/GameServer/RemoteView/World/RespawnAfterDeathPlugIn075.cs +++ b/src/GameServer/RemoteView/World/RespawnAfterDeathPlugIn075.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.World; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(RespawnAfterDeathPlugIn075), "The default implementation of the IRespawnAfterDeathPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(RespawnAfterDeathPlugIn075), Description = "The default implementation of the IRespawnAfterDeathPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("FE2D99D4-CA19-4E94-BDF1-B51B463AD28A")] [MaximumClient(0, 89, ClientLanguage.Invariant)] public class RespawnAfterDeathPlugIn075 : IRespawnAfterDeathPlugIn diff --git a/src/GameServer/RemoteView/World/RespawnAfterDeathPlugIn095.cs b/src/GameServer/RemoteView/World/RespawnAfterDeathPlugIn095.cs index cd6f2968d..4e0761a35 100644 --- a/src/GameServer/RemoteView/World/RespawnAfterDeathPlugIn095.cs +++ b/src/GameServer/RemoteView/World/RespawnAfterDeathPlugIn095.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.World; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(RespawnAfterDeathPlugIn095), "The default implementation of the IRespawnAfterDeathPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(RespawnAfterDeathPlugIn095), Description = "The default implementation of the IRespawnAfterDeathPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("02CBC7FF-73F1-4240-9859-AA1F6656E02C")] [MinimumClient(0, 90, ClientLanguage.Invariant)] public class RespawnAfterDeathPlugIn095 : IRespawnAfterDeathPlugIn diff --git a/src/GameServer/RemoteView/World/ShowAnimationPlugIn.cs b/src/GameServer/RemoteView/World/ShowAnimationPlugIn.cs index 458a67aee..632c3af4e 100644 --- a/src/GameServer/RemoteView/World/ShowAnimationPlugIn.cs +++ b/src/GameServer/RemoteView/World/ShowAnimationPlugIn.cs @@ -16,7 +16,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.World; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(ShowAnimationPlugIn), "The default implementation of the IShowAnimationPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(ShowAnimationPlugIn), Description = "The default implementation of the IShowAnimationPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("d89cbf82-5ac1-423b-a478-f792136fce3c")] [MinimumClient(0, 90, ClientLanguage.Invariant)] public class ShowAnimationPlugIn : IShowAnimationPlugIn diff --git a/src/GameServer/RemoteView/World/ShowAnimationPlugIn075.cs b/src/GameServer/RemoteView/World/ShowAnimationPlugIn075.cs index afbb48ae5..a88366629 100644 --- a/src/GameServer/RemoteView/World/ShowAnimationPlugIn075.cs +++ b/src/GameServer/RemoteView/World/ShowAnimationPlugIn075.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.World; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(ShowAnimationPlugIn075), "The default implementation of the IShowAnimationPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(ShowAnimationPlugIn075), Description = "The default implementation of the IShowAnimationPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("AF89AC54-B902-490E-987F-3ED87145A884")] [MaximumClient(0, 89, ClientLanguage.Invariant)] public class ShowAnimationPlugIn075 : ShowAnimationPlugIn, IShowAnimationPlugIn diff --git a/src/GameServer/RemoteView/World/ShowAreaSkillAnimationPlugIn.cs b/src/GameServer/RemoteView/World/ShowAreaSkillAnimationPlugIn.cs index 4ddab72c6..f08bc7ea1 100644 --- a/src/GameServer/RemoteView/World/ShowAreaSkillAnimationPlugIn.cs +++ b/src/GameServer/RemoteView/World/ShowAreaSkillAnimationPlugIn.cs @@ -18,7 +18,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.World; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(ShowAreaSkillAnimationPlugIn), "The default implementation of the IShowAreaSkillAnimationPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(ShowAreaSkillAnimationPlugIn), Description = "The default implementation of the IShowAreaSkillAnimationPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("4cc09cdd-55a3-4191-94fc-b8e684b87cac")] [MinimumClient(3, 0, ClientLanguage.Invariant)] public class ShowAreaSkillAnimationPlugIn : IShowAreaSkillAnimationPlugIn diff --git a/src/GameServer/RemoteView/World/ShowAreaSkillAnimationPlugIn075.cs b/src/GameServer/RemoteView/World/ShowAreaSkillAnimationPlugIn075.cs index aa8ff1a79..81a6029e8 100644 --- a/src/GameServer/RemoteView/World/ShowAreaSkillAnimationPlugIn075.cs +++ b/src/GameServer/RemoteView/World/ShowAreaSkillAnimationPlugIn075.cs @@ -16,7 +16,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.World; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(ShowAreaSkillAnimationPlugIn075), "The default implementation of the IShowAreaSkillAnimationPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(ShowAreaSkillAnimationPlugIn075), Description = "The default implementation of the IShowAreaSkillAnimationPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("DB239A54-A5BD-4796-A96C-50D247D288F3")] public class ShowAreaSkillAnimationPlugIn075 : IShowAreaSkillAnimationPlugIn { diff --git a/src/GameServer/RemoteView/World/ShowAreaSkillAnimationPlugIn095.cs b/src/GameServer/RemoteView/World/ShowAreaSkillAnimationPlugIn095.cs index 1d7edb3fe..d5e4f4187 100644 --- a/src/GameServer/RemoteView/World/ShowAreaSkillAnimationPlugIn095.cs +++ b/src/GameServer/RemoteView/World/ShowAreaSkillAnimationPlugIn095.cs @@ -17,7 +17,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.World; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(ShowAreaSkillAnimationPlugIn095), "The default implementation of the IShowAreaSkillAnimationPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(ShowAreaSkillAnimationPlugIn095), Description = "The default implementation of the IShowAreaSkillAnimationPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("553D9388-3648-4029-959E-F6D74399D51E")] [MinimumClient(0, 95, ClientLanguage.Invariant)] public class ShowAreaSkillAnimationPlugIn095 : IShowAreaSkillAnimationPlugIn diff --git a/src/GameServer/RemoteView/World/ShowChainLightningPlugIn.cs b/src/GameServer/RemoteView/World/ShowChainLightningPlugIn.cs index 75314b29c..0c10d7d80 100644 --- a/src/GameServer/RemoteView/World/ShowChainLightningPlugIn.cs +++ b/src/GameServer/RemoteView/World/ShowChainLightningPlugIn.cs @@ -17,7 +17,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.World; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(ShowChainLightningPlugIn), "The default implementation of the IShowChainLightningPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(ShowChainLightningPlugIn), Description = "The default implementation of the IShowChainLightningPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("8A78EE23-7AD5-4D08-BE17-B0F6B0CB7309")] [MinimumClient(4, 0, ClientLanguage.Invariant)] public class ShowChainLightningPlugIn : IShowChainLightningPlugIn diff --git a/src/GameServer/RemoteView/World/ShowDroppedItemsPlugIn.cs b/src/GameServer/RemoteView/World/ShowDroppedItemsPlugIn.cs index de3408018..b3ecc8de4 100644 --- a/src/GameServer/RemoteView/World/ShowDroppedItemsPlugIn.cs +++ b/src/GameServer/RemoteView/World/ShowDroppedItemsPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.World; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("ShowDroppedItemsPlugIn", "The default implementation of the IShowDroppedItemsPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "ShowDroppedItemsPlugIn", Description = "The default implementation of the IShowDroppedItemsPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("f89308c3-5fe7-46e2-adfc-85a56ba23233")] public class ShowDroppedItemsPlugIn : IShowDroppedItemsPlugIn { diff --git a/src/GameServer/RemoteView/World/ShowHitExtendedPlugIn.cs b/src/GameServer/RemoteView/World/ShowHitExtendedPlugIn.cs index 7b1b1a9d2..2e262ec95 100644 --- a/src/GameServer/RemoteView/World/ShowHitExtendedPlugIn.cs +++ b/src/GameServer/RemoteView/World/ShowHitExtendedPlugIn.cs @@ -17,7 +17,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.World; /// /// The extended implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(ShowHitExtendedPlugIn), "The extended implementation of the IShowHitPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(ShowHitExtendedPlugIn), Description = "The extended implementation of the IShowHitPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("E79C8065-21A8-4774-B84F-5B8658F6A820")] [MinimumClient(106, 3, ClientLanguage.English)] public class ShowHitExtendedPlugIn : IShowHitPlugIn diff --git a/src/GameServer/RemoteView/World/ShowHitPlugIn.cs b/src/GameServer/RemoteView/World/ShowHitPlugIn.cs index 4aaf59b39..1fb3ada06 100644 --- a/src/GameServer/RemoteView/World/ShowHitPlugIn.cs +++ b/src/GameServer/RemoteView/World/ShowHitPlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.World; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("ShowHitPlugIn", "The default implementation of the IShowHitPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "ShowHitPlugIn", Description = "The default implementation of the IShowHitPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("bb59de05-d3a1-4b52-a1c6-975decf0f1a3")] public class ShowHitPlugIn : IShowHitPlugIn { diff --git a/src/GameServer/RemoteView/World/ShowMoneyDrop075.cs b/src/GameServer/RemoteView/World/ShowMoneyDrop075.cs index 7be9faecb..406a1b858 100644 --- a/src/GameServer/RemoteView/World/ShowMoneyDrop075.cs +++ b/src/GameServer/RemoteView/World/ShowMoneyDrop075.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.World; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("ShowMoneyDrop 0.75", "The default implementation of the IShowMoneyDropPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "ShowMoneyDrop 0.75", Description = "The default implementation of the IShowMoneyDropPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("2C00F283-3229-48A8-A974-3DE0C543DC17")] [MaximumClient(0, 89, ClientLanguage.Invariant)] public class ShowMoneyDrop075 : IShowMoneyDropPlugIn diff --git a/src/GameServer/RemoteView/World/ShowMoneyDropExtendedPlugIn.cs b/src/GameServer/RemoteView/World/ShowMoneyDropExtendedPlugIn.cs index d764a5128..d50361562 100644 --- a/src/GameServer/RemoteView/World/ShowMoneyDropExtendedPlugIn.cs +++ b/src/GameServer/RemoteView/World/ShowMoneyDropExtendedPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.World; /// /// The extended implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(ShowMoneyDropExtendedPlugIn), "The extended implementation of the IShowMoneyDropPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(ShowMoneyDropExtendedPlugIn), Description = "The extended implementation of the IShowMoneyDropPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("292D399E-3F48-4AF0-9480-F83267BB8619")] [MinimumClient(106, 3, ClientLanguage.Invariant)] public class ShowMoneyDropExtendedPlugIn : IShowMoneyDropPlugIn diff --git a/src/GameServer/RemoteView/World/ShowMoneyDropPlugIn.cs b/src/GameServer/RemoteView/World/ShowMoneyDropPlugIn.cs index d2a6fd8b9..181432f5a 100644 --- a/src/GameServer/RemoteView/World/ShowMoneyDropPlugIn.cs +++ b/src/GameServer/RemoteView/World/ShowMoneyDropPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.World; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(ShowMoneyDropPlugIn), "The default implementation of the IShowMoneyDropPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(ShowMoneyDropPlugIn), Description = "The default implementation of the IShowMoneyDropPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("f89308c3-5fe7-46e2-adfc-85a56ba23232")] [MinimumClient(0, 90, ClientLanguage.Invariant)] public class ShowMoneyDropPlugIn : IShowMoneyDropPlugIn diff --git a/src/GameServer/RemoteView/World/ShowRageAttackPlugIn.cs b/src/GameServer/RemoteView/World/ShowRageAttackPlugIn.cs index 71ffdb11d..848e79b18 100644 --- a/src/GameServer/RemoteView/World/ShowRageAttackPlugIn.cs +++ b/src/GameServer/RemoteView/World/ShowRageAttackPlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.World; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(ShowRageAttackPlugIn), "The default implementation of the IShowRageAttackPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(ShowRageAttackPlugIn), Description = "The default implementation of the IShowRageAttackPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("F3E2FA03-AA87-4D61-855C-8ECAF990E108")] [MinimumClient(6, 0, ClientLanguage.Invariant)] public class ShowRageAttackPlugIn : IShowRageAttackPlugIn diff --git a/src/GameServer/RemoteView/World/ShowRageAttackRangePlugIn.cs b/src/GameServer/RemoteView/World/ShowRageAttackRangePlugIn.cs index 5868e115e..27b8a83ce 100644 --- a/src/GameServer/RemoteView/World/ShowRageAttackRangePlugIn.cs +++ b/src/GameServer/RemoteView/World/ShowRageAttackRangePlugIn.cs @@ -16,7 +16,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.World; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(ShowRageAttackRangePlugIn), "The default implementation of the IShowRageAttackRangePlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(ShowRageAttackRangePlugIn), Description = "The default implementation of the IShowRageAttackRangePlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("C480C639-A3EA-4A5C-BB82-422FCD24C920")] [MinimumClient(6, 0, ClientLanguage.Invariant)] public class ShowRageAttackRangePlugIn : IShowRageAttackRangePlugIn diff --git a/src/GameServer/RemoteView/World/ShowSkillAnimationPlugIn.cs b/src/GameServer/RemoteView/World/ShowSkillAnimationPlugIn.cs index c5ba3402c..50298ca4b 100644 --- a/src/GameServer/RemoteView/World/ShowSkillAnimationPlugIn.cs +++ b/src/GameServer/RemoteView/World/ShowSkillAnimationPlugIn.cs @@ -17,7 +17,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.World; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(ShowSkillAnimationPlugIn), "The default implementation of the IShowSkillAnimationPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(ShowSkillAnimationPlugIn), Description = "The default implementation of the IShowSkillAnimationPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("a25cc420-c848-4a87-81e5-b86c4241af35")] [MinimumClient(3, 0, ClientLanguage.Invariant)] public class ShowSkillAnimationPlugIn : IShowSkillAnimationPlugIn diff --git a/src/GameServer/RemoteView/World/ShowSkillAnimationPlugIn075.cs b/src/GameServer/RemoteView/World/ShowSkillAnimationPlugIn075.cs index 3f3ed79ab..6fef7ea41 100644 --- a/src/GameServer/RemoteView/World/ShowSkillAnimationPlugIn075.cs +++ b/src/GameServer/RemoteView/World/ShowSkillAnimationPlugIn075.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.World; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(ShowSkillAnimationPlugIn075), "The default implementation of the IShowSkillAnimationPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(ShowSkillAnimationPlugIn075), Description = "The default implementation of the IShowSkillAnimationPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("8DED7CDF-AB3E-4CCB-A817-604560120320")] public class ShowSkillAnimationPlugIn075 : IShowSkillAnimationPlugIn { diff --git a/src/GameServer/RemoteView/World/ShowSkillAnimationPlugIn095.cs b/src/GameServer/RemoteView/World/ShowSkillAnimationPlugIn095.cs index b673b01f8..f7eafc5c4 100644 --- a/src/GameServer/RemoteView/World/ShowSkillAnimationPlugIn095.cs +++ b/src/GameServer/RemoteView/World/ShowSkillAnimationPlugIn095.cs @@ -16,7 +16,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.World; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(ShowSkillAnimationPlugIn095), "The default implementation of the IShowSkillAnimationPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(ShowSkillAnimationPlugIn095), Description = "The default implementation of the IShowSkillAnimationPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("105E727A-A8B5-4050-B6FE-1CC5F5DDC9E4")] [MinimumClient(0, 95, ClientLanguage.Invariant)] public class ShowSkillAnimationPlugIn095 : IShowSkillAnimationPlugIn diff --git a/src/GameServer/RemoteView/World/SkillStageUpdatePlugInPlugIn.cs b/src/GameServer/RemoteView/World/SkillStageUpdatePlugInPlugIn.cs index ff0ba8c94..6c4bab710 100644 --- a/src/GameServer/RemoteView/World/SkillStageUpdatePlugInPlugIn.cs +++ b/src/GameServer/RemoteView/World/SkillStageUpdatePlugInPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.World; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(SkillStageUpdatePlugInPlugIn), "The default implementation of the IShowSkillStageUpdate which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(SkillStageUpdatePlugInPlugIn), Description = "The default implementation of the IShowSkillStageUpdate which is forwarding everything to the game client with specific data packets.")] [Guid("9EE927BA-E82B-46DC-872B-F8B5F646A4A5")] public class SkillStageUpdatePlugInPlugIn : IShowSkillStageUpdatePlugIn { diff --git a/src/GameServer/RemoteView/World/TeleportPlugIn.cs b/src/GameServer/RemoteView/World/TeleportPlugIn.cs index 6e5be55be..62ed45ddc 100644 --- a/src/GameServer/RemoteView/World/TeleportPlugIn.cs +++ b/src/GameServer/RemoteView/World/TeleportPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.World; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(TeleportPlugIn), "The default implementation of the ITeleportPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(TeleportPlugIn), Description = "The default implementation of the ITeleportPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("9506F77B-CA72-4150-87E3-57C889C91F02")] [MinimumClient(1, 0, ClientLanguage.Invariant)] public class TeleportPlugIn : ITeleportPlugIn diff --git a/src/GameServer/RemoteView/World/TeleportPlugIn075.cs b/src/GameServer/RemoteView/World/TeleportPlugIn075.cs index a81f5479e..65e91f42a 100644 --- a/src/GameServer/RemoteView/World/TeleportPlugIn075.cs +++ b/src/GameServer/RemoteView/World/TeleportPlugIn075.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.World; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn(nameof(TeleportPlugIn075), "The default implementation of the ITeleportPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = nameof(TeleportPlugIn075), Description = "The default implementation of the ITeleportPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("490DB5E5-9DB6-4068-9708-E7D69F82BF3B")] public class TeleportPlugIn075 : ITeleportPlugIn { diff --git a/src/GameServer/RemoteView/World/UpdateRotationPlugIn.cs b/src/GameServer/RemoteView/World/UpdateRotationPlugIn.cs index 2143b6b8f..75096ace6 100644 --- a/src/GameServer/RemoteView/World/UpdateRotationPlugIn.cs +++ b/src/GameServer/RemoteView/World/UpdateRotationPlugIn.cs @@ -11,7 +11,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.World; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("UpdateRotationPlugIn", "The default implementation of the IUpdateRotationPlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "UpdateRotationPlugIn", Description = "The default implementation of the IUpdateRotationPlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("2ce3ba17-fd67-4674-88c5-f29c83608310")] public class UpdateRotationPlugIn : IUpdateRotationPlugIn { diff --git a/src/GameServer/RemoteView/World/WeatherStatusUpdatePlugIn.cs b/src/GameServer/RemoteView/World/WeatherStatusUpdatePlugIn.cs index edd91c55b..3a46b12c8 100644 --- a/src/GameServer/RemoteView/World/WeatherStatusUpdatePlugIn.cs +++ b/src/GameServer/RemoteView/World/WeatherStatusUpdatePlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.GameServer.RemoteView.World; /// /// The default implementation of the which is forwarding everything to the game client with specific data packets. /// -[PlugIn("Weather status update", "The default implementation of the IWeatherStatusUpdatePlugIn which is forwarding everything to the game client with specific data packets.")] +[PlugIn] +[Display(Name = "Weather status update", Description = "The default implementation of the IWeatherStatusUpdatePlugIn which is forwarding everything to the game client with specific data packets.")] [Guid("44369927-4EE4-47D7-9C6C-DD74FC824071")] public class WeatherStatusUpdatePlugIn : IWeatherStatusUpdatePlugIn { diff --git a/src/Network/PlugIns/OpenSourceClientNetworkEncryptionFactoryPlugIn.cs b/src/Network/PlugIns/OpenSourceClientNetworkEncryptionFactoryPlugIn.cs index 37194b8cb..a82cf933e 100644 --- a/src/Network/PlugIns/OpenSourceClientNetworkEncryptionFactoryPlugIn.cs +++ b/src/Network/PlugIns/OpenSourceClientNetworkEncryptionFactoryPlugIn.cs @@ -4,6 +4,7 @@ namespace MUnique.OpenMU.Network.PlugIns; +using System.ComponentModel.DataAnnotations; using System.IO.Pipelines; using System.Runtime.InteropServices; using MUnique.OpenMU.Network; @@ -14,7 +15,8 @@ namespace MUnique.OpenMU.Network.PlugIns; /// /// A plugin which provides network encryptors and decryptors for the english open source game clients of season 6 episode 3, version 2.04d /// -[PlugIn("Network Encryption - Season 6 Episode 3, Open Source Client", "A plugin which provides network encryptors and decryptors for the english open source game clients of season 6 episode 3, version 2.04d")] +[PlugIn] +[Display(Name = "Network Encryption - Season 6 Episode 3, Open Source Client", Description = "A plugin which provides network encryptors and decryptors for the english open source game clients of season 6 episode 3, version 2.04d")] [Guid("AB9EBD28-7A45-4FBA-A282-E2120E70FF17")] public class OpenSourceClientNetworkEncryptionFactoryPlugIn : INetworkEncryptionFactoryPlugIn { diff --git a/src/Network/PlugIns/PreSeason6NetworkEncryptionFactoryPlugIn.cs b/src/Network/PlugIns/PreSeason6NetworkEncryptionFactoryPlugIn.cs index 0e12cafa0..f143843c1 100644 --- a/src/Network/PlugIns/PreSeason6NetworkEncryptionFactoryPlugIn.cs +++ b/src/Network/PlugIns/PreSeason6NetworkEncryptionFactoryPlugIn.cs @@ -4,6 +4,7 @@ namespace MUnique.OpenMU.Network.PlugIns; +using System.ComponentModel.DataAnnotations; using System.IO.Pipelines; using System.Runtime.InteropServices; using MUnique.OpenMU.Network; @@ -19,7 +20,8 @@ namespace MUnique.OpenMU.Network.PlugIns; /// For the Xor32 key it's different. During season 6 on GMO, Webzen desperately changed them in a regular manner - sometimes /// every weekly maintenance. Needless to say, calculating the new key was a matter of seconds and provided no protection from skilled hackers at all. /// -[PlugIn("Network Encryption - Before Season 6", "A plugin which provides network encryptors and decryptors for game clients before season 6.")] +[PlugIn] +[Display(Name = "Network Encryption - Before Season 6", Description = "A plugin which provides network encryptors and decryptors for game clients before season 6.")] [Guid("E72839BF-5ADE-419D-91C5-278EC2A7CEBF")] public class PreSeason6NetworkEncryptionFactoryPlugIn : INetworkEncryptionFactoryPlugIn { diff --git a/src/Network/PlugIns/Season6Episode3NetworkEncryptionFactoryPlugIn.cs b/src/Network/PlugIns/Season6Episode3NetworkEncryptionFactoryPlugIn.cs index 2632ef1af..38f5a0076 100644 --- a/src/Network/PlugIns/Season6Episode3NetworkEncryptionFactoryPlugIn.cs +++ b/src/Network/PlugIns/Season6Episode3NetworkEncryptionFactoryPlugIn.cs @@ -4,6 +4,7 @@ namespace MUnique.OpenMU.Network.PlugIns; +using System.ComponentModel.DataAnnotations; using System.IO.Pipelines; using System.Runtime.InteropServices; using MUnique.OpenMU.Network; @@ -14,7 +15,8 @@ namespace MUnique.OpenMU.Network.PlugIns; /// /// A plugin which provides network encryptors and decryptors for english game clients of season 6 episode 3, version 1.04d. /// -[PlugIn("Network Encryption - Season 6 Episode 3, 1.04d, ENG", "A plugin which provides network encryptors and decryptors for english game clients of season 6 episode 3, version 1.04d")] +[PlugIn] +[Display(Name = "Network Encryption - Season 6 Episode 3, 1.04d, ENG", Description = "A plugin which provides network encryptors and decryptors for english game clients of season 6 episode 3, version 1.04d")] [Guid("AC79C81C-36A1-49A0-85AD-E4DAC7D5C5CE")] public class Season6Episode3NetworkEncryptionFactoryPlugIn : INetworkEncryptionFactoryPlugIn { diff --git a/src/Network/PlugIns/Version075NetworkEncryptionFactoryPlugIn.cs b/src/Network/PlugIns/Version075NetworkEncryptionFactoryPlugIn.cs index 989611c25..206e1556c 100644 --- a/src/Network/PlugIns/Version075NetworkEncryptionFactoryPlugIn.cs +++ b/src/Network/PlugIns/Version075NetworkEncryptionFactoryPlugIn.cs @@ -4,6 +4,7 @@ namespace MUnique.OpenMU.Network.PlugIns; +using System.ComponentModel.DataAnnotations; using System.IO.Pipelines; using System.Runtime.InteropServices; using MUnique.OpenMU.Network; @@ -17,7 +18,8 @@ namespace MUnique.OpenMU.Network.PlugIns; /// This early and very old version doesn't seem to have xor 32 encryption yet. /// However, it uses simple modulus with some other keys. /// -[PlugIn("Network Encryption - 0.75", "A plugin which provides network encryptors and decryptors for game clients of version 0.75 (server version 0.65)")] +[PlugIn] +[Display(Name = "Network Encryption - 0.75", Description = "A plugin which provides network encryptors and decryptors for game clients of version 0.75 (server version 0.65)")] [Guid("E83F05AC-18D4-4714-AEFB-2F4F3B37951C")] public class Version075NetworkEncryptionFactoryPlugIn : INetworkEncryptionFactoryPlugIn { diff --git a/src/Persistence/Initialization/PlugIns/CharacterCreated/AddArrowsForFairyElf.cs b/src/Persistence/Initialization/PlugIns/CharacterCreated/AddArrowsForFairyElf.cs index 7fe61eff3..16a7877ec 100644 --- a/src/Persistence/Initialization/PlugIns/CharacterCreated/AddArrowsForFairyElf.cs +++ b/src/Persistence/Initialization/PlugIns/CharacterCreated/AddArrowsForFairyElf.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.PlugIns.CharacterCreated; /// Adds arrows to a created fairy elf character. /// [Guid("71B6EB8D-E676-4B22-9E7E-15C7C3969852")] -[PlugIn(nameof(AddArrowsForFairyElf), "Adds arrows to a created fairy elf character.")] +[PlugIn] +[Display(Name = nameof(AddArrowsForFairyElf), Description = "Adds arrows to a created fairy elf character.")] public class AddArrowsForFairyElf : AddInitialItemPlugInBase { /// diff --git a/src/Persistence/Initialization/PlugIns/CharacterCreated/AddChargeForRageFighter.cs b/src/Persistence/Initialization/PlugIns/CharacterCreated/AddChargeForRageFighter.cs index 8a82ba48f..e5eb14f4c 100644 --- a/src/Persistence/Initialization/PlugIns/CharacterCreated/AddChargeForRageFighter.cs +++ b/src/Persistence/Initialization/PlugIns/CharacterCreated/AddChargeForRageFighter.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.PlugIns.CharacterCreated; /// Adds the Charge skill to a created rage fighter character. /// [Guid("53F23DDD-3676-4D24-8DFF-2EF657255832")] -[PlugIn(nameof(AddChargeForRageFighter), "Adds the Charge skill to a created rage fighter character.")] +[PlugIn] +[Display(Name = nameof(AddChargeForRageFighter), Description = "Adds the Charge skill to a created rage fighter character.")] public class AddChargeForRageFighter : AddInitialSkillPlugInBase { /// diff --git a/src/Persistence/Initialization/PlugIns/CharacterCreated/AddCrescentMoonSlashForDarkKnight.cs b/src/Persistence/Initialization/PlugIns/CharacterCreated/AddCrescentMoonSlashForDarkKnight.cs index de0d1d98c..e9cdd5d07 100644 --- a/src/Persistence/Initialization/PlugIns/CharacterCreated/AddCrescentMoonSlashForDarkKnight.cs +++ b/src/Persistence/Initialization/PlugIns/CharacterCreated/AddCrescentMoonSlashForDarkKnight.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.PlugIns.CharacterCreated; /// Adds the crescent moon slash skill (active in castle siege) to a created dark knight character. /// [Guid("2BB94D35-0DEF-4458-84AC-ECAAE6E896BE")] -[PlugIn(nameof(AddCrescentMoonSlashForDarkKnight), "Adds the crescent moon slash skill (active in castle siege) to a created dark knight character.")] +[PlugIn] +[Display(Name = nameof(AddCrescentMoonSlashForDarkKnight), Description = "Adds the crescent moon slash skill (active in castle siege) to a created dark knight character.")] public class AddCrescentMoonSlashForDarkKnight : AddInitialSkillPlugInBase { /// diff --git a/src/Persistence/Initialization/PlugIns/CharacterCreated/AddEnergyBallForDarkWizard.cs b/src/Persistence/Initialization/PlugIns/CharacterCreated/AddEnergyBallForDarkWizard.cs index 79cfeb818..73dcfd83f 100644 --- a/src/Persistence/Initialization/PlugIns/CharacterCreated/AddEnergyBallForDarkWizard.cs +++ b/src/Persistence/Initialization/PlugIns/CharacterCreated/AddEnergyBallForDarkWizard.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.PlugIns.CharacterCreated; /// Adds the energy ball skill to a created dark wizard character. /// [Guid("6A721FED-51CD-41AD-BA7C-EC1642FFF00A")] -[PlugIn(nameof(AddEnergyBallForDarkWizard), "Adds the energy ball skill to a created dark wizard character.")] +[PlugIn] +[Display(Name = nameof(AddEnergyBallForDarkWizard), Description = "Adds the energy ball skill to a created dark wizard character.")] public class AddEnergyBallForDarkWizard : AddInitialSkillPlugInBase { /// diff --git a/src/Persistence/Initialization/PlugIns/CharacterCreated/AddFireBlastForDarkLord.cs b/src/Persistence/Initialization/PlugIns/CharacterCreated/AddFireBlastForDarkLord.cs index 2e0c43358..86da123ef 100644 --- a/src/Persistence/Initialization/PlugIns/CharacterCreated/AddFireBlastForDarkLord.cs +++ b/src/Persistence/Initialization/PlugIns/CharacterCreated/AddFireBlastForDarkLord.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.PlugIns.CharacterCreated; /// Adds the Fire Blast skill (active in castle siege) to a created dark lord character. /// [Guid("49D2D6F2-4E70-4F4B-B7CE-0645EC2F094A")] -[PlugIn(nameof(AddFireBlastForDarkLord), "Adds the Fire Blast skill (active in castle siege) to a created dark lord character.")] +[PlugIn] +[Display(Name = nameof(AddFireBlastForDarkLord), Description = "Adds the Fire Blast skill (active in castle siege) to a created dark lord character.")] public class AddFireBlastForDarkLord : AddInitialSkillPlugInBase { /// diff --git a/src/Persistence/Initialization/PlugIns/CharacterCreated/AddForceForDarkLord.cs b/src/Persistence/Initialization/PlugIns/CharacterCreated/AddForceForDarkLord.cs index 32fc431c5..42a634931 100644 --- a/src/Persistence/Initialization/PlugIns/CharacterCreated/AddForceForDarkLord.cs +++ b/src/Persistence/Initialization/PlugIns/CharacterCreated/AddForceForDarkLord.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.PlugIns.CharacterCreated; /// Adds the Force skill to a created dark lord character. /// [Guid("D197321F-1BAC-4A82-8548-13674AF6D82C")] -[PlugIn(nameof(AddForceForDarkLord), "Adds the Force skill to a created dark lord character.")] +[PlugIn] +[Display(Name = nameof(AddForceForDarkLord), Description = "Adds the Force skill to a created dark lord character.")] public class AddForceForDarkLord : AddInitialSkillPlugInBase { /// diff --git a/src/Persistence/Initialization/PlugIns/CharacterCreated/AddLanceForSummoner.cs b/src/Persistence/Initialization/PlugIns/CharacterCreated/AddLanceForSummoner.cs index 772ff7759..cebd15f76 100644 --- a/src/Persistence/Initialization/PlugIns/CharacterCreated/AddLanceForSummoner.cs +++ b/src/Persistence/Initialization/PlugIns/CharacterCreated/AddLanceForSummoner.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.PlugIns.CharacterCreated; /// Adds the Lance skill to a created summoner character. /// [Guid("AC326833-D60E-4705-A7DF-740FA37ACBA8")] -[PlugIn(nameof(AddLanceForSummoner), "Adds the Lance skill to a created summoner character.")] +[PlugIn] +[Display(Name = nameof(AddLanceForSummoner), Description = "Adds the Lance skill to a created summoner character.")] public class AddLanceForSummoner : AddInitialSkillPlugInBase { /// diff --git a/src/Persistence/Initialization/PlugIns/CharacterCreated/AddManaRaysForMagicGladiator.cs b/src/Persistence/Initialization/PlugIns/CharacterCreated/AddManaRaysForMagicGladiator.cs index 94fa23afa..f41259a3f 100644 --- a/src/Persistence/Initialization/PlugIns/CharacterCreated/AddManaRaysForMagicGladiator.cs +++ b/src/Persistence/Initialization/PlugIns/CharacterCreated/AddManaRaysForMagicGladiator.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.PlugIns.CharacterCreated; /// Adds the Mana Rays skill (active in castle siege) to a created magic gladiator character. /// [Guid("D83347DB-4D33-47E9-B898-5EDB2777B8A1")] -[PlugIn(nameof(AddManaRaysForMagicGladiator), "Adds the Mana Rays skill (active in castle siege) to a created magic gladiator character.")] +[PlugIn] +[Display(Name = nameof(AddManaRaysForMagicGladiator), Description = "Adds the Mana Rays skill (active in castle siege) to a created magic gladiator character.")] public class AddManaRaysForMagicGladiator : AddInitialSkillPlugInBase { /// diff --git a/src/Persistence/Initialization/PlugIns/CharacterCreated/AddRingOfWarriorLevel40ForNewCharacters.cs b/src/Persistence/Initialization/PlugIns/CharacterCreated/AddRingOfWarriorLevel40ForNewCharacters.cs index 196f76d47..61b383508 100644 --- a/src/Persistence/Initialization/PlugIns/CharacterCreated/AddRingOfWarriorLevel40ForNewCharacters.cs +++ b/src/Persistence/Initialization/PlugIns/CharacterCreated/AddRingOfWarriorLevel40ForNewCharacters.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.PlugIns.CharacterCreated; /// Adds the ring, which can be dropped at level 40. /// [Guid("19B0BB9D-32C9-4DBC-BD95-41801D078962")] -[PlugIn(nameof(AddRingOfWarriorLevel40ForNewCharacters), "Adds the ring, which can be dropped at level 40.")] +[PlugIn] +[Display(Name = nameof(AddRingOfWarriorLevel40ForNewCharacters), Description = "Adds the ring, which can be dropped at level 40.")] public class AddRingOfWarriorLevel40ForNewCharacters : AddInitialItemPlugInBase { /// diff --git a/src/Persistence/Initialization/PlugIns/CharacterCreated/AddRingOfWarriorLevel80ForNewCharacters.cs b/src/Persistence/Initialization/PlugIns/CharacterCreated/AddRingOfWarriorLevel80ForNewCharacters.cs index aab574555..0b4a9e87a 100644 --- a/src/Persistence/Initialization/PlugIns/CharacterCreated/AddRingOfWarriorLevel80ForNewCharacters.cs +++ b/src/Persistence/Initialization/PlugIns/CharacterCreated/AddRingOfWarriorLevel80ForNewCharacters.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.PlugIns.CharacterCreated; /// Adds the ring, which can be dropped at level 80. /// [Guid("BF9A7B67-9404-4E86-B1A4-77B96C19F55C")] -[PlugIn(nameof(AddRingOfWarriorLevel80ForNewCharacters), "Adds the ring, which can be dropped at level 80.")] +[PlugIn] +[Display(Name = nameof(AddRingOfWarriorLevel80ForNewCharacters), Description = "Adds the ring, which can be dropped at level 80.")] public class AddRingOfWarriorLevel80ForNewCharacters : AddInitialItemPlugInBase { /// diff --git a/src/Persistence/Initialization/PlugIns/CharacterCreated/AddShortBowForFairyElf.cs b/src/Persistence/Initialization/PlugIns/CharacterCreated/AddShortBowForFairyElf.cs index 181d4be26..ec4c874b7 100644 --- a/src/Persistence/Initialization/PlugIns/CharacterCreated/AddShortBowForFairyElf.cs +++ b/src/Persistence/Initialization/PlugIns/CharacterCreated/AddShortBowForFairyElf.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.PlugIns.CharacterCreated; /// Adds a short bow to a created fairy elf character. /// [Guid("9EF17296-0436-4059-BC4E-0A71967F36EC")] -[PlugIn(nameof(AddShortBowForFairyElf), "Adds a short bow to a created fairy elf character.")] +[PlugIn] +[Display(Name = nameof(AddShortBowForFairyElf), Description = "Adds a short bow to a created fairy elf character.")] public class AddShortBowForFairyElf : AddInitialItemPlugInBase { /// diff --git a/src/Persistence/Initialization/PlugIns/CharacterCreated/AddShortSwordForDarkLord.cs b/src/Persistence/Initialization/PlugIns/CharacterCreated/AddShortSwordForDarkLord.cs index 99c7d16d3..56822c3ab 100644 --- a/src/Persistence/Initialization/PlugIns/CharacterCreated/AddShortSwordForDarkLord.cs +++ b/src/Persistence/Initialization/PlugIns/CharacterCreated/AddShortSwordForDarkLord.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.PlugIns.CharacterCreated; /// Adds a short sword to a created dark lord character. /// [Guid("BAC120D0-D981-4EBB-8F5A-0EC19434AF16")] -[PlugIn(nameof(AddShortSwordForDarkLord), "Adds a short sword to a created dark lord character.")] +[PlugIn] +[Display(Name = nameof(AddShortSwordForDarkLord), Description = "Adds a short sword to a created dark lord character.")] public class AddShortSwordForDarkLord : AddInitialItemPlugInBase { /// diff --git a/src/Persistence/Initialization/PlugIns/CharacterCreated/AddShortSwordForMagicGladiator.cs b/src/Persistence/Initialization/PlugIns/CharacterCreated/AddShortSwordForMagicGladiator.cs index e5e84f356..72d63d8c9 100644 --- a/src/Persistence/Initialization/PlugIns/CharacterCreated/AddShortSwordForMagicGladiator.cs +++ b/src/Persistence/Initialization/PlugIns/CharacterCreated/AddShortSwordForMagicGladiator.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.PlugIns.CharacterCreated; /// Adds a short sword to a created magic gladiator character. /// [Guid("3D2790E3-B757-46FD-8618-2441B7E9E2B3")] -[PlugIn(nameof(AddShortSwordForMagicGladiator), "Adds a short sword to a created magic gladiator character.")] +[PlugIn] +[Display(Name = nameof(AddShortSwordForMagicGladiator), Description = "Adds a short sword to a created magic gladiator character.")] public class AddShortSwordForMagicGladiator : AddInitialItemPlugInBase { /// diff --git a/src/Persistence/Initialization/PlugIns/CharacterCreated/AddSmallAxeForDarkKnight.cs b/src/Persistence/Initialization/PlugIns/CharacterCreated/AddSmallAxeForDarkKnight.cs index 57093fa1d..9c53a86e9 100644 --- a/src/Persistence/Initialization/PlugIns/CharacterCreated/AddSmallAxeForDarkKnight.cs +++ b/src/Persistence/Initialization/PlugIns/CharacterCreated/AddSmallAxeForDarkKnight.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.PlugIns.CharacterCreated; /// Adds a small axe to a created dark knight character. /// [Guid("2377C222-4418-4F17-8388-1F8825E6243C")] -[PlugIn(nameof(AddSmallAxeForDarkKnight), "Adds a small axe to a created dark knight character.")] +[PlugIn] +[Display(Name = nameof(AddSmallAxeForDarkKnight), Description = "Adds a small axe to a created dark knight character.")] public class AddSmallAxeForDarkKnight : AddInitialItemPlugInBase { /// diff --git a/src/Persistence/Initialization/PlugIns/CharacterCreated/AddSmallShieldForDarkLord.cs b/src/Persistence/Initialization/PlugIns/CharacterCreated/AddSmallShieldForDarkLord.cs index a13cdff60..3f5ce06d3 100644 --- a/src/Persistence/Initialization/PlugIns/CharacterCreated/AddSmallShieldForDarkLord.cs +++ b/src/Persistence/Initialization/PlugIns/CharacterCreated/AddSmallShieldForDarkLord.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.PlugIns.CharacterCreated; /// Adds a small shield to a created dark lord character. /// [Guid("CD60BD4A-2BD5-4E36-95D0-EDB6B94CDDD8")] -[PlugIn(nameof(AddShortSwordForDarkLord), "Adds a small shield to a created dark lord character.")] +[PlugIn] +[Display(Name = nameof(AddShortSwordForDarkLord), Description = "Adds a small shield to a created dark lord character.")] public class AddSmallShieldForDarkLord : AddInitialItemPlugInBase { /// diff --git a/src/Persistence/Initialization/PlugIns/CharacterCreated/AddSmallShieldForMagicGladiator.cs b/src/Persistence/Initialization/PlugIns/CharacterCreated/AddSmallShieldForMagicGladiator.cs index 6f43e5f2a..612bb684a 100644 --- a/src/Persistence/Initialization/PlugIns/CharacterCreated/AddSmallShieldForMagicGladiator.cs +++ b/src/Persistence/Initialization/PlugIns/CharacterCreated/AddSmallShieldForMagicGladiator.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.PlugIns.CharacterCreated; /// Adds a small shield to a created magic gladiator character. /// [Guid("74FC7D85-7AA0-4437-88BA-CE008FD31745")] -[PlugIn(nameof(AddSmallShieldForMagicGladiator), "Adds a small shield to a created magic gladiator character.")] +[PlugIn] +[Display(Name = nameof(AddSmallShieldForMagicGladiator), Description = "Adds a small shield to a created magic gladiator character.")] public class AddSmallShieldForMagicGladiator : AddInitialItemPlugInBase { /// diff --git a/src/Persistence/Initialization/PlugIns/CharacterCreated/AddSpiralSlashForMagicGladiator.cs b/src/Persistence/Initialization/PlugIns/CharacterCreated/AddSpiralSlashForMagicGladiator.cs index 42e064761..a1459053a 100644 --- a/src/Persistence/Initialization/PlugIns/CharacterCreated/AddSpiralSlashForMagicGladiator.cs +++ b/src/Persistence/Initialization/PlugIns/CharacterCreated/AddSpiralSlashForMagicGladiator.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.PlugIns.CharacterCreated; /// Adds the Spiral Slash skill (active in castle siege) to a created magic gladiator character. /// [Guid("83B0D163-7E97-40FC-851A-D5500B4BB33E")] -[PlugIn(nameof(AddSpiralSlashForMagicGladiator), "Adds the Spiral Slash skill (active in castle siege) to a created magic gladiator character.")] +[PlugIn] +[Display(Name = nameof(AddSpiralSlashForMagicGladiator), Description = "Adds the Spiral Slash skill (active in castle siege) to a created magic gladiator character.")] public class AddSpiralSlashForMagicGladiator : AddInitialSkillPlugInBase { /// diff --git a/src/Persistence/Initialization/PlugIns/CharacterCreated/AddStarfallForFairyElf.cs b/src/Persistence/Initialization/PlugIns/CharacterCreated/AddStarfallForFairyElf.cs index f7a5a3fd9..b8d0911a0 100644 --- a/src/Persistence/Initialization/PlugIns/CharacterCreated/AddStarfallForFairyElf.cs +++ b/src/Persistence/Initialization/PlugIns/CharacterCreated/AddStarfallForFairyElf.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.PlugIns.CharacterCreated; /// Adds the Starfall skill (active in castle siege) to a created fairy elf character. /// [Guid("5AC4F8C8-8B4C-4DD6-B1CF-D4F6491DC17A")] -[PlugIn(nameof(AddStarfallForFairyElf), "Adds the Starfall skill (active in castle siege) to a created fairy elf character.")] +[PlugIn] +[Display(Name = nameof(AddStarfallForFairyElf), Description = "Adds the Starfall skill (active in castle siege) to a created fairy elf character.")] public class AddStarfallForFairyElf : AddInitialSkillPlugInBase { /// diff --git a/src/Persistence/Initialization/Updates/AddAreaSkillSettingsUpdatePlugIn.cs b/src/Persistence/Initialization/Updates/AddAreaSkillSettingsUpdatePlugIn.cs index 80dbaf68d..5b6c10390 100644 --- a/src/Persistence/Initialization/Updates/AddAreaSkillSettingsUpdatePlugIn.cs +++ b/src/Persistence/Initialization/Updates/AddAreaSkillSettingsUpdatePlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// This adds the items required to enter the kalima map. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("D01DA745-BF72-40C4-BD90-D2D637AEDF99")] public class AddAreaSkillSettingsUpdatePlugIn : UpdatePlugInBase { diff --git a/src/Persistence/Initialization/Updates/AddDuelConfigurationPlugIn.cs b/src/Persistence/Initialization/Updates/AddDuelConfigurationPlugIn.cs index 790da715d..58b229ac7 100644 --- a/src/Persistence/Initialization/Updates/AddDuelConfigurationPlugIn.cs +++ b/src/Persistence/Initialization/Updates/AddDuelConfigurationPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// This updates adds the data for the duel system. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("5DC5638E-581E-4ACC-81E4-D565C625649B")] public class AddDuelConfigurationPlugIn : UpdatePlugInBase { diff --git a/src/Persistence/Initialization/Updates/AddGuardsDataPlugIn.cs b/src/Persistence/Initialization/Updates/AddGuardsDataPlugIn.cs index e966be154..bc56f920a 100644 --- a/src/Persistence/Initialization/Updates/AddGuardsDataPlugIn.cs +++ b/src/Persistence/Initialization/Updates/AddGuardsDataPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// This updates adds the data for Guard NPCs. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("1EF50759-0A5F-4301-A5E9-B68A8B7D29F9")] public class AddGuardsDataPlugIn : UpdatePlugInBase { diff --git a/src/Persistence/Initialization/Updates/AddHarmonyOptionWeightsUpdateSeason6.cs b/src/Persistence/Initialization/Updates/AddHarmonyOptionWeightsUpdateSeason6.cs index 579916bd5..407c8b749 100644 --- a/src/Persistence/Initialization/Updates/AddHarmonyOptionWeightsUpdateSeason6.cs +++ b/src/Persistence/Initialization/Updates/AddHarmonyOptionWeightsUpdateSeason6.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// This update adds Jewel of Harmony option weights used for option assignment, fixes some options, and fixes item restore mix. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("E94DE59E-5B3A-4498-A4AF-E7F4F173B754")] public class AddHarmonyOptionWeightsUpdateSeason6 : UpdatePlugInBase { diff --git a/src/Persistence/Initialization/Updates/AddItemDropGroupForJewelsUpdate075.cs b/src/Persistence/Initialization/Updates/AddItemDropGroupForJewelsUpdate075.cs index fa89d2b08..70a89c249 100644 --- a/src/Persistence/Initialization/Updates/AddItemDropGroupForJewelsUpdate075.cs +++ b/src/Persistence/Initialization/Updates/AddItemDropGroupForJewelsUpdate075.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// This update creates a specific item drop group for jewels with a default chance of 5%. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("DCF14924-BB19-4CA2-93EC-397A89AA3EB3")] public class AddItemDropGroupForJewelsUpdate075 : UpdatePlugInBase { diff --git a/src/Persistence/Initialization/Updates/AddItemDropGroupForJewelsUpdate095d.cs b/src/Persistence/Initialization/Updates/AddItemDropGroupForJewelsUpdate095d.cs index 4e31c82c2..ed8c5e8ca 100644 --- a/src/Persistence/Initialization/Updates/AddItemDropGroupForJewelsUpdate095d.cs +++ b/src/Persistence/Initialization/Updates/AddItemDropGroupForJewelsUpdate095d.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// This update creates a specific item drop group for jewels with a default chance of 5%. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("D21056E6-E912-416B-A076-3C2D17DA517B")] public class AddItemDropGroupForJewelsUpdate095D : AddItemDropGroupForJewelsUpdate075 { diff --git a/src/Persistence/Initialization/Updates/AddItemDropGroupForJewelsUpdateSeason6.cs b/src/Persistence/Initialization/Updates/AddItemDropGroupForJewelsUpdateSeason6.cs index 1a0bf30a4..b9823a6e5 100644 --- a/src/Persistence/Initialization/Updates/AddItemDropGroupForJewelsUpdateSeason6.cs +++ b/src/Persistence/Initialization/Updates/AddItemDropGroupForJewelsUpdateSeason6.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// This update creates a specific item drop group for jewels with a default chance of 5%. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("F958CC5B-C1E6-4F67-B48D-4BF75EC5CAA8")] public class AddItemDropGroupForJewelsUpdateSeason6 : AddItemDropGroupForJewelsUpdate075 { diff --git a/src/Persistence/Initialization/Updates/AddKalimaPlugIn.cs b/src/Persistence/Initialization/Updates/AddKalimaPlugIn.cs index b28a2ba41..b1b011b69 100644 --- a/src/Persistence/Initialization/Updates/AddKalimaPlugIn.cs +++ b/src/Persistence/Initialization/Updates/AddKalimaPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// This adds the items required to enter the kalima map. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("0C99155F-1289-4E73-97F0-47CB67C3716F")] public class AddKalimaPlugIn : UpdatePlugInBase { diff --git a/src/Persistence/Initialization/Updates/AddPointsPerResetAttributePlugIn.cs b/src/Persistence/Initialization/Updates/AddPointsPerResetAttributePlugIn.cs index d09cb3995..51d53768f 100644 --- a/src/Persistence/Initialization/Updates/AddPointsPerResetAttributePlugIn.cs +++ b/src/Persistence/Initialization/Updates/AddPointsPerResetAttributePlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// This update adds the . /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("6011A1B8-7FA5-48EB-935D-EEAF83017799")] public class AddPointsPerResetAttributePlugIn : UpdatePlugInBase { diff --git a/src/Persistence/Initialization/Updates/AddQuestItemLimitPlugIn.cs b/src/Persistence/Initialization/Updates/AddQuestItemLimitPlugIn.cs index dc6aae594..8940ade03 100644 --- a/src/Persistence/Initialization/Updates/AddQuestItemLimitPlugIn.cs +++ b/src/Persistence/Initialization/Updates/AddQuestItemLimitPlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// This updates adds the new for quest items. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("48D40F2E-2844-4058-B1FA-710EEE55157B")] public class AddQuestItemLimitPlugIn : UpdatePlugInBase { diff --git a/src/Persistence/Initialization/Updates/ChainLightningUpdatePlugIn.cs b/src/Persistence/Initialization/Updates/ChainLightningUpdatePlugIn.cs index cbdae3a1e..d8ae62f0f 100644 --- a/src/Persistence/Initialization/Updates/ChainLightningUpdatePlugIn.cs +++ b/src/Persistence/Initialization/Updates/ChainLightningUpdatePlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// This update sets the right settings for the chain lightning skill. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("039D09CB-283C-4CBD-ABBC-FFD3F7D5C62F")] public class ChainLightningUpdatePlugIn : UpdatePlugInBase { diff --git a/src/Persistence/Initialization/Updates/ChaosCastleDataUpdatePlugIn.cs b/src/Persistence/Initialization/Updates/ChaosCastleDataUpdatePlugIn.cs index 6c8f3767c..fc7f9389b 100644 --- a/src/Persistence/Initialization/Updates/ChaosCastleDataUpdatePlugIn.cs +++ b/src/Persistence/Initialization/Updates/ChaosCastleDataUpdatePlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// The chaos castle update plugin. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("13059991-F3C8-4050-A201-6D6A67E57541")] public class ChaosCastleDataUpdatePlugIn : UpdatePlugInBase { diff --git a/src/Persistence/Initialization/Updates/FixAncientDiscriminatorsUpdatePlugIn.cs b/src/Persistence/Initialization/Updates/FixAncientDiscriminatorsUpdatePlugIn.cs index 1d66c7267..886c5cfd6 100644 --- a/src/Persistence/Initialization/Updates/FixAncientDiscriminatorsUpdatePlugIn.cs +++ b/src/Persistence/Initialization/Updates/FixAncientDiscriminatorsUpdatePlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// This update fixes the discriminators of some ancient items. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("AB664421-1CA6-4FCE-A150-0007971017E1")] public class FixAncientDiscriminatorsUpdatePlugIn : UpdatePlugInBase { diff --git a/src/Persistence/Initialization/Updates/FixAttackSpeedCalculationUpdate.cs b/src/Persistence/Initialization/Updates/FixAttackSpeedCalculationUpdate.cs index 99a486c82..37480976f 100644 --- a/src/Persistence/Initialization/Updates/FixAttackSpeedCalculationUpdate.cs +++ b/src/Persistence/Initialization/Updates/FixAttackSpeedCalculationUpdate.cs @@ -20,7 +20,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// This adds attributes and relations for attack speed. Adds effects for Ale and Potion of Soul /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("F9977AA7-F52A-4F42-BD6C-98DE700B5980")] public class FixAttackSpeedCalculationUpdate : UpdatePlugInBase { diff --git a/src/Persistence/Initialization/Updates/FixChaosMixesPlugIn095D.cs b/src/Persistence/Initialization/Updates/FixChaosMixesPlugIn095D.cs index 6a68376fb..f745b0b4e 100644 --- a/src/Persistence/Initialization/Updates/FixChaosMixesPlugIn095D.cs +++ b/src/Persistence/Initialization/Updates/FixChaosMixesPlugIn095D.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// This update fixes the Chaos Weapon, First Wings, Dinorant, and Item Level Upgrade craftings' settings. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("68BC1F35-FC9A-468F-89FB-0940485AC107")] public class FixChaosMixesPlugIn095D : FixChaosMixesPlugInBase { diff --git a/src/Persistence/Initialization/Updates/FixChaosMixesPlugInSeason6.cs b/src/Persistence/Initialization/Updates/FixChaosMixesPlugInSeason6.cs index 94c332152..d67d071ef 100644 --- a/src/Persistence/Initialization/Updates/FixChaosMixesPlugInSeason6.cs +++ b/src/Persistence/Initialization/Updates/FixChaosMixesPlugInSeason6.cs @@ -18,7 +18,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// This update fixes the Chaos Weapon, First Wings, Dinorant, Item Level Upgrade, Second Wings, Third Wings, Cape, SD Potions, Guardian Option, and Secromicon crafting settings; Blue Fenrir (Protect) damage decrease option value; Wizard's Ring wizardry option; lvl 380 item guardian options for Summoner and Rage Fighter. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("EFD7EA69-56AE-48A3-ACE2-1C3B5B87780A")] public class FixChaosMixesPlugInSeason6 : FixChaosMixesPlugInBase { diff --git a/src/Persistence/Initialization/Updates/FixChaosMixesUpdatePlugIn075.cs b/src/Persistence/Initialization/Updates/FixChaosMixesUpdatePlugIn075.cs index 635d03483..d7adafa6e 100644 --- a/src/Persistence/Initialization/Updates/FixChaosMixesUpdatePlugIn075.cs +++ b/src/Persistence/Initialization/Updates/FixChaosMixesUpdatePlugIn075.cs @@ -10,7 +10,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// This update fixes the Chaos Weapon crafting settings. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("04A5F236-117F-422A-8C38-28D09DE911D7")] public class FixChaosMixesUpdatePlugIn075 : FixChaosMixesPlugInBase { diff --git a/src/Persistence/Initialization/Updates/FixCharStatsForceWavePlugIn075.cs b/src/Persistence/Initialization/Updates/FixCharStatsForceWavePlugIn075.cs index e71c42faf..7926638fb 100644 --- a/src/Persistence/Initialization/Updates/FixCharStatsForceWavePlugIn075.cs +++ b/src/Persistence/Initialization/Updates/FixCharStatsForceWavePlugIn075.cs @@ -10,7 +10,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// This update fixes DW agility to defense multiplier stat. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("D7CD05B7-06EE-4D9F-BAD0-65267F3A9FE8")] public class FixCharStatsForceWavePlugIn075 : FixCharStatsForceWavePlugInBase { diff --git a/src/Persistence/Initialization/Updates/FixCharStatsForceWavePlugIn095d.cs b/src/Persistence/Initialization/Updates/FixCharStatsForceWavePlugIn095d.cs index 11f5fd8e4..88d3b9e53 100644 --- a/src/Persistence/Initialization/Updates/FixCharStatsForceWavePlugIn095d.cs +++ b/src/Persistence/Initialization/Updates/FixCharStatsForceWavePlugIn095d.cs @@ -11,7 +11,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// This update fixes agility to defense multiplier (DW) and base energy (MG) stats. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("14DFF317-B4E6-424A-A8D1-6D1D5195E970")] public class FixCharStatsForceWavePlugIn095D : FixCharStatsForceWavePlugInBase { diff --git a/src/Persistence/Initialization/Updates/FixCharStatsForceWavePlugInSeason6.cs b/src/Persistence/Initialization/Updates/FixCharStatsForceWavePlugInSeason6.cs index 05da4e253..9f0b95972 100644 --- a/src/Persistence/Initialization/Updates/FixCharStatsForceWavePlugInSeason6.cs +++ b/src/Persistence/Initialization/Updates/FixCharStatsForceWavePlugInSeason6.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// This update fixes several character stats values and DL Force Wave Strengthener master skill. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("0C1995AB-A1CC-42A8-9EFC-E5FE8F360C53")] public class FixCharStatsForceWavePlugInSeason6 : FixCharStatsForceWavePlugInBase { diff --git a/src/Persistence/Initialization/Updates/FixDamageAbsorbItemsUpdatePlugIn.cs b/src/Persistence/Initialization/Updates/FixDamageAbsorbItemsUpdatePlugIn.cs index 6d8f3ac2c..bc0bde2b8 100644 --- a/src/Persistence/Initialization/Updates/FixDamageAbsorbItemsUpdatePlugIn.cs +++ b/src/Persistence/Initialization/Updates/FixDamageAbsorbItemsUpdatePlugIn.cs @@ -16,7 +16,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// This update fixes the damage absorption settings for items and skills. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("280ACE93-2B96-476C-A4AF-4FDA7611D5D5")] public class FixDamageAbsorbItemsUpdatePlugIn : UpdatePlugInBase { diff --git a/src/Persistence/Initialization/Updates/FixDamageCalcsPlugIn075.cs b/src/Persistence/Initialization/Updates/FixDamageCalcsPlugIn075.cs index a7b12079d..e9385f8ff 100644 --- a/src/Persistence/Initialization/Updates/FixDamageCalcsPlugIn075.cs +++ b/src/Persistence/Initialization/Updates/FixDamageCalcsPlugIn075.cs @@ -11,7 +11,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// This update fixes character stats, magic effects, items, and options related to damage. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("42B1582B-667F-4098-A339-DDA8560157E3")] public class FixDamageCalcsPlugIn075 : FixDamageCalcsPlugInBase { diff --git a/src/Persistence/Initialization/Updates/FixDamageCalcsPlugIn095d.cs b/src/Persistence/Initialization/Updates/FixDamageCalcsPlugIn095d.cs index 284031d90..baf4e4e9d 100644 --- a/src/Persistence/Initialization/Updates/FixDamageCalcsPlugIn095d.cs +++ b/src/Persistence/Initialization/Updates/FixDamageCalcsPlugIn095d.cs @@ -11,7 +11,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// This update fixes character stats, skills, magic effects, items, and options related to damage. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("A4410B7B-7E5F-409C-9F6F-4E216208829A")] public class FixDamageCalcsPlugIn095D : FixDamageCalcsPlugInBase { diff --git a/src/Persistence/Initialization/Updates/FixDamageCalcsPlugInSeason6.cs b/src/Persistence/Initialization/Updates/FixDamageCalcsPlugInSeason6.cs index ab09acef0..dad75e432 100644 --- a/src/Persistence/Initialization/Updates/FixDamageCalcsPlugInSeason6.cs +++ b/src/Persistence/Initialization/Updates/FixDamageCalcsPlugInSeason6.cs @@ -18,7 +18,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// This update fixes character stats, skills, magic effects, items, and options related to damage. It also adds the Berserker magic effect. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("077BA63D-F201-41BE-8A65-CFB859482A1B")] public class FixDamageCalcsPlugInSeason6 : FixDamageCalcsPlugInBase { diff --git a/src/Persistence/Initialization/Updates/FixDefenseCalcsPlugIn075.cs b/src/Persistence/Initialization/Updates/FixDefenseCalcsPlugIn075.cs index 659ba8c2b..8d39b51fe 100644 --- a/src/Persistence/Initialization/Updates/FixDefenseCalcsPlugIn075.cs +++ b/src/Persistence/Initialization/Updates/FixDefenseCalcsPlugIn075.cs @@ -11,7 +11,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// This update fixes character stats, magic effects, and options related to defense. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("683A8F8F-EFE9-4EF4-B536-21048E195A87")] public class FixDefenseCalcsPlugIn075 : FixDefenseCalcsPlugInBase { diff --git a/src/Persistence/Initialization/Updates/FixDefenseCalcsPlugIn095d.cs b/src/Persistence/Initialization/Updates/FixDefenseCalcsPlugIn095d.cs index 8884bad1f..f5c753311 100644 --- a/src/Persistence/Initialization/Updates/FixDefenseCalcsPlugIn095d.cs +++ b/src/Persistence/Initialization/Updates/FixDefenseCalcsPlugIn095d.cs @@ -11,7 +11,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// This update fixes character stats, magic effects, and options related to defense. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("C6945ADC-0313-47AC-AFAE-61D0544C8935")] public class FixDefenseCalcsPlugIn095D : FixDefenseCalcsPlugInBase { diff --git a/src/Persistence/Initialization/Updates/FixDefenseCalcsPlugInSeason6.cs b/src/Persistence/Initialization/Updates/FixDefenseCalcsPlugInSeason6.cs index d2d72a0a7..085a9ce70 100644 --- a/src/Persistence/Initialization/Updates/FixDefenseCalcsPlugInSeason6.cs +++ b/src/Persistence/Initialization/Updates/FixDefenseCalcsPlugInSeason6.cs @@ -16,7 +16,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// This update fixes character stats, magic effects, and options related to defense. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("447FA95B-091B-4950-B1F3-F4EB6D20DE19")] public class FixDefenseCalcsPlugInSeason6 : FixDefenseCalcsPlugInBase { diff --git a/src/Persistence/Initialization/Updates/FixDrainLifeSkillUpdate.cs b/src/Persistence/Initialization/Updates/FixDrainLifeSkillUpdate.cs index 0733ef302..eedfd8f93 100644 --- a/src/Persistence/Initialization/Updates/FixDrainLifeSkillUpdate.cs +++ b/src/Persistence/Initialization/Updates/FixDrainLifeSkillUpdate.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// This adds the items required to enter the kalima map. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("A8827A3C-7F52-47CF-9EA5-562A9C06B986")] public class FixDrainLifeSkillUpdate : UpdatePlugInBase { diff --git a/src/Persistence/Initialization/Updates/FixDuelArenaSafezoneMapUpdate.cs b/src/Persistence/Initialization/Updates/FixDuelArenaSafezoneMapUpdate.cs index d1f6f3065..b43b9a7e4 100644 --- a/src/Persistence/Initialization/Updates/FixDuelArenaSafezoneMapUpdate.cs +++ b/src/Persistence/Initialization/Updates/FixDuelArenaSafezoneMapUpdate.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// This Sets the safezone of duel arena to lorencia. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("27714BB3-43F9-4D90-920F-98EF0EC20232")] public class FixDuelArenaSafezoneMapUpdate : UpdatePlugInBase { diff --git a/src/Persistence/Initialization/Updates/FixEventItemsDropFromMonstersUpdatePlugIn095d.cs b/src/Persistence/Initialization/Updates/FixEventItemsDropFromMonstersUpdatePlugIn095d.cs index 6ba650237..c47e17798 100644 --- a/src/Persistence/Initialization/Updates/FixEventItemsDropFromMonstersUpdatePlugIn095d.cs +++ b/src/Persistence/Initialization/Updates/FixEventItemsDropFromMonstersUpdatePlugIn095d.cs @@ -11,7 +11,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// This update fixes event items that have DropsFromMonsters set to true, /// but should use dedicated DropItemGroups instead. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("B9C6D3E2-4F5A-6B7C-8D9E-0F1A2B3C4D5E")] public class FixEventItemsDropFromMonstersUpdatePlugIn095d : FixEventItemsDropFromMonstersUpdatePlugInBase { diff --git a/src/Persistence/Initialization/Updates/FixEventItemsDropFromMonstersUpdatePlugInSeason6.cs b/src/Persistence/Initialization/Updates/FixEventItemsDropFromMonstersUpdatePlugInSeason6.cs index e078cc2b0..eb06eac30 100644 --- a/src/Persistence/Initialization/Updates/FixEventItemsDropFromMonstersUpdatePlugInSeason6.cs +++ b/src/Persistence/Initialization/Updates/FixEventItemsDropFromMonstersUpdatePlugInSeason6.cs @@ -11,7 +11,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// This update fixes event items that have DropsFromMonsters set to true, /// but should use dedicated DropItemGroups instead. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("A8B5C2D1-3E4F-5A6B-7C8D-9E0F1A2B3C4D")] public class FixEventItemsDropFromMonstersUpdatePlugInSeason6 : FixEventItemsDropFromMonstersUpdatePlugInBase { diff --git a/src/Persistence/Initialization/Updates/FixHorseFenrirOptionsSoulBarrierPlugIn.cs b/src/Persistence/Initialization/Updates/FixHorseFenrirOptionsSoulBarrierPlugIn.cs index 3afbd71ab..84d803fde 100644 --- a/src/Persistence/Initialization/Updates/FixHorseFenrirOptionsSoulBarrierPlugIn.cs +++ b/src/Persistence/Initialization/Updates/FixHorseFenrirOptionsSoulBarrierPlugIn.cs @@ -18,7 +18,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// This update adds Dark Horse options, fixes Gold Fenrir options and Soul Barrier effects. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("3E362629-AAF3-40E0-BC6D-32230285FB03")] public class FixHorseFenrirOptionsSoulBarrierPlugIn : UpdatePlugInBase { diff --git a/src/Persistence/Initialization/Updates/FixIgnoreDefenseSkillUpdatePlugIn.cs b/src/Persistence/Initialization/Updates/FixIgnoreDefenseSkillUpdatePlugIn.cs index e5b161720..d1f5f3f88 100644 --- a/src/Persistence/Initialization/Updates/FixIgnoreDefenseSkillUpdatePlugIn.cs +++ b/src/Persistence/Initialization/Updates/FixIgnoreDefenseSkillUpdatePlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// This update sets the right settings for the ignore defense skill. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("8DEC7BC2-E6A0-4E46-B123-C92CB43B9ED5")] public class FixIgnoreDefenseSkillUpdatePlugIn : UpdatePlugInBase { diff --git a/src/Persistence/Initialization/Updates/FixItemOptionsAndAttackSpeedPlugIn075.cs b/src/Persistence/Initialization/Updates/FixItemOptionsAndAttackSpeedPlugIn075.cs index e3e2d66ca..cadf46109 100644 --- a/src/Persistence/Initialization/Updates/FixItemOptionsAndAttackSpeedPlugIn075.cs +++ b/src/Persistence/Initialization/Updates/FixItemOptionsAndAttackSpeedPlugIn075.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// This update fixes some item options (damage, defense rate) and weapons attack speed. /// It also refactors attack speed attributes for simplification. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("7733CDA9-6F4B-48D2-94F1-796C937F032A")] public class FixItemOptionsAndAttackSpeedPlugIn075 : FixItemOptionsAndAttackSpeedPlugInBase { diff --git a/src/Persistence/Initialization/Updates/FixItemOptionsAndAttackSpeedPlugIn095d.cs b/src/Persistence/Initialization/Updates/FixItemOptionsAndAttackSpeedPlugIn095d.cs index 5a6cbf3b7..47be2d412 100644 --- a/src/Persistence/Initialization/Updates/FixItemOptionsAndAttackSpeedPlugIn095d.cs +++ b/src/Persistence/Initialization/Updates/FixItemOptionsAndAttackSpeedPlugIn095d.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// This update fixes some item options (damage, defense rate) and weapons attack speed. /// It also refactors attack speed attributes for simplification. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("C7F90EDB-EC00-467D-826F-9DEFFEA1206A")] public class FixItemOptionsAndAttackSpeedPlugIn095D : FixItemOptionsAndAttackSpeedPlugInBase { diff --git a/src/Persistence/Initialization/Updates/FixItemOptionsAndAttackSpeedPlugInSeason6.cs b/src/Persistence/Initialization/Updates/FixItemOptionsAndAttackSpeedPlugInSeason6.cs index 80642450d..c28f78a52 100644 --- a/src/Persistence/Initialization/Updates/FixItemOptionsAndAttackSpeedPlugInSeason6.cs +++ b/src/Persistence/Initialization/Updates/FixItemOptionsAndAttackSpeedPlugInSeason6.cs @@ -18,7 +18,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// This update fixes some item options (damage, defense rate), weapons attack speed, third wings defense, and some AA weapon values. /// It also refactors attack speed attributes for simplification. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("EEEAA884-4704-48DE-825A-8E588A47E2CC")] public class FixItemOptionsAndAttackSpeedPlugInSeason6 : FixItemOptionsAndAttackSpeedPlugInBase { diff --git a/src/Persistence/Initialization/Updates/FixItemRequirementsPlugIn.cs b/src/Persistence/Initialization/Updates/FixItemRequirementsPlugIn.cs index 89d71f18c..eaa0876e8 100644 --- a/src/Persistence/Initialization/Updates/FixItemRequirementsPlugIn.cs +++ b/src/Persistence/Initialization/Updates/FixItemRequirementsPlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// Updates some item requirements for elf bows which were intialized wrongly. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("9E8DB2CB-1972-40D3-9129-6964ABFEB4DC")] public class FixItemRequirementsPlugIn : UpdatePlugInBase { diff --git a/src/Persistence/Initialization/Updates/FixItemRequirementsPlugIn2.cs b/src/Persistence/Initialization/Updates/FixItemRequirementsPlugIn2.cs index 4ae952c06..cb3a16177 100644 --- a/src/Persistence/Initialization/Updates/FixItemRequirementsPlugIn2.cs +++ b/src/Persistence/Initialization/Updates/FixItemRequirementsPlugIn2.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// Updates some item requirements for elf bows which were initialized wrongly. /// This plugin fixes configurations that were created after the initial fix but before the base data was corrected. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("A7C9D4E1-8F2B-4A3C-9E6D-7B8F9A0E1C2D")] public class FixItemRequirementsPlugIn2 : UpdatePlugInBase { diff --git a/src/Persistence/Initialization/Updates/FixJeweleryPetsDamageCalcsPlugIn075.cs b/src/Persistence/Initialization/Updates/FixJeweleryPetsDamageCalcsPlugIn075.cs index 725021b55..0204476b2 100644 --- a/src/Persistence/Initialization/Updates/FixJeweleryPetsDamageCalcsPlugIn075.cs +++ b/src/Persistence/Initialization/Updates/FixJeweleryPetsDamageCalcsPlugIn075.cs @@ -10,7 +10,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// This update fixes jewelery items and pet options related to damage. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("46F50226-B0A2-4FE7-B708-AEB3F306A7C0")] public class FixJeweleryPetsDamageCalcsPlugIn075 : FixJeweleryPetsDamageCalcsPlugInBase { diff --git a/src/Persistence/Initialization/Updates/FixJeweleryPetsDamageCalcsPlugIn095d.cs b/src/Persistence/Initialization/Updates/FixJeweleryPetsDamageCalcsPlugIn095d.cs index a30504385..1ced34dd1 100644 --- a/src/Persistence/Initialization/Updates/FixJeweleryPetsDamageCalcsPlugIn095d.cs +++ b/src/Persistence/Initialization/Updates/FixJeweleryPetsDamageCalcsPlugIn095d.cs @@ -10,7 +10,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// This update fixes jewelery items and pet options related to damage. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("BF56A0E2-D7B3-4456-81F7-249440489607")] public class FixJeweleryPetsDamageCalcsPlugIn095D : FixJeweleryPetsDamageCalcsPlugInBase { diff --git a/src/Persistence/Initialization/Updates/FixJeweleryPetsDamageCalcsPlugInSeason6.cs b/src/Persistence/Initialization/Updates/FixJeweleryPetsDamageCalcsPlugInSeason6.cs index 200364df4..9d15bc971 100644 --- a/src/Persistence/Initialization/Updates/FixJeweleryPetsDamageCalcsPlugInSeason6.cs +++ b/src/Persistence/Initialization/Updates/FixJeweleryPetsDamageCalcsPlugInSeason6.cs @@ -17,7 +17,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// This update fixes jewelery items and pet options related to damage, and jewelery resistance values. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("DD5B0424-89DB-4DE4-A1BB-B294F2C1FCE6")] public class FixJeweleryPetsDamageCalcsPlugInSeason6 : FixJeweleryPetsDamageCalcsPlugInBase { diff --git a/src/Persistence/Initialization/Updates/FixLevelDiv20ExcOptionUpdatePlugIn.cs b/src/Persistence/Initialization/Updates/FixLevelDiv20ExcOptionUpdatePlugIn.cs index 90900511f..18393e192 100644 --- a/src/Persistence/Initialization/Updates/FixLevelDiv20ExcOptionUpdatePlugIn.cs +++ b/src/Persistence/Initialization/Updates/FixLevelDiv20ExcOptionUpdatePlugIn.cs @@ -14,7 +14,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// The chaos castle update plugin. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("B0F275DC-B3C2-4826-8263-FFDC8A8AFAEA")] public class FixLevelDiv20ExcOptionUpdatePlugIn : UpdatePlugInBase { diff --git a/src/Persistence/Initialization/Updates/FixLifeSwellEffectUpdatePlugIn.cs b/src/Persistence/Initialization/Updates/FixLifeSwellEffectUpdatePlugIn.cs index 5fb820481..7694d7cd5 100644 --- a/src/Persistence/Initialization/Updates/FixLifeSwellEffectUpdatePlugIn.cs +++ b/src/Persistence/Initialization/Updates/FixLifeSwellEffectUpdatePlugIn.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// This update sets the right settings for the life swell effect. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("FD521A61-D5B4-4CF2-B203-6FFF12C80E51")] public class FixLifeSwellEffectUpdatePlugIn : UpdatePlugInBase { diff --git a/src/Persistence/Initialization/Updates/FixMaxManaAndAbilityJewelryOptionsUpdateSeason6.cs b/src/Persistence/Initialization/Updates/FixMaxManaAndAbilityJewelryOptionsUpdateSeason6.cs index 24eda9dcc..62ef27e8b 100644 --- a/src/Persistence/Initialization/Updates/FixMaxManaAndAbilityJewelryOptionsUpdateSeason6.cs +++ b/src/Persistence/Initialization/Updates/FixMaxManaAndAbilityJewelryOptionsUpdateSeason6.cs @@ -13,7 +13,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// This update fixes the calculation for max mana/AG % increase provided by Ring of Magic/Pendant of Ability options. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("EAC7C809-D4B8-443F-BE52-E56560003483")] public class FixMaxManaAndAbilityJewelryOptionsUpdateSeason6 : UpdatePlugInBase { diff --git a/src/Persistence/Initialization/Updates/FixSetBonusesPlugIn.cs b/src/Persistence/Initialization/Updates/FixSetBonusesPlugIn.cs index 945c9ab70..3efcee32c 100644 --- a/src/Persistence/Initialization/Updates/FixSetBonusesPlugIn.cs +++ b/src/Persistence/Initialization/Updates/FixSetBonusesPlugIn.cs @@ -50,7 +50,8 @@ protected override async ValueTask ApplyAsync(IContext context, GameConfiguratio /// /// The for season 6. /// - [PlugIn(PlugInName, PlugInDescription)] + [PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("F858E471-B76D-4AAF-8886-8DEB45BC1AB8")] public class Season6 : FixSetBonusesPlugIn { @@ -64,7 +65,8 @@ public class Season6 : FixSetBonusesPlugIn /// /// The for version 0.95d. /// - [PlugIn(PlugInName, PlugInDescription)] + [PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("3D0201C3-D956-4BDD-9D57-3F6FD921EDF7")] public class V095d : FixSetBonusesPlugIn { @@ -78,7 +80,8 @@ public class V095d : FixSetBonusesPlugIn /// /// The for version 0.75. /// - [PlugIn(PlugInName, PlugInDescription)] + [PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("2E009ADF-1580-4E03-BA59-C9C51DC109BA")] public class V075 : FixSetBonusesPlugIn { diff --git a/src/Persistence/Initialization/Updates/FixSocketSeedCraftingUpdatePlugIn.cs b/src/Persistence/Initialization/Updates/FixSocketSeedCraftingUpdatePlugIn.cs index 331d0b2fb..62f2c9995 100644 --- a/src/Persistence/Initialization/Updates/FixSocketSeedCraftingUpdatePlugIn.cs +++ b/src/Persistence/Initialization/Updates/FixSocketSeedCraftingUpdatePlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// This update sets the right settings for the socket seed crafting. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("C802EFC2-1D42-4218-871E-8886D115F3ED")] public class FixSocketSeedCraftingUpdatePlugIn : UpdatePlugInBase { diff --git a/src/Persistence/Initialization/Updates/FixWarpLevelUpdatePlugIn.cs b/src/Persistence/Initialization/Updates/FixWarpLevelUpdatePlugIn.cs index 5976bcb07..5f9fe3dcf 100644 --- a/src/Persistence/Initialization/Updates/FixWarpLevelUpdatePlugIn.cs +++ b/src/Persistence/Initialization/Updates/FixWarpLevelUpdatePlugIn.cs @@ -11,7 +11,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// updating LevelWarpRequirementReductionPercent plugin. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("F4342D86-7042-477A-BC3B-475C1F2A79FF")] public class FixWarpLevelUpdatePlugIn : UpdatePlugInBase { diff --git a/src/Persistence/Initialization/Updates/FixWarriorMorningStarPlugIn.cs b/src/Persistence/Initialization/Updates/FixWarriorMorningStarPlugIn.cs index 94959e88a..5874ae66f 100644 --- a/src/Persistence/Initialization/Updates/FixWarriorMorningStarPlugIn.cs +++ b/src/Persistence/Initialization/Updates/FixWarriorMorningStarPlugIn.cs @@ -8,7 +8,8 @@ /// /// This update fixes the weapon of the warrior ancient set. The Hand Axe is replaced by the Morning Star. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("65BA79B5-1DBF-4C97-9628-0D8A429A8C88")] public class FixWarriorMorningStarPlugIn : UpdatePlugInBase { diff --git a/src/Persistence/Initialization/Updates/FixWeaponRisePercentagePlugIn075.cs b/src/Persistence/Initialization/Updates/FixWeaponRisePercentagePlugIn075.cs index 109072901..cf1adbb9e 100644 --- a/src/Persistence/Initialization/Updates/FixWeaponRisePercentagePlugIn075.cs +++ b/src/Persistence/Initialization/Updates/FixWeaponRisePercentagePlugIn075.cs @@ -10,7 +10,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// This update fixes weapons (staff) rise percentage. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("5B63534D-E5DF-46B1-992D-C1637B197EE1")] public class FixWeaponRisePercentagePlugIn075 : FixWeaponRisePercentagePlugInBase { diff --git a/src/Persistence/Initialization/Updates/FixWeaponRisePercentagePlugIn095d.cs b/src/Persistence/Initialization/Updates/FixWeaponRisePercentagePlugIn095d.cs index 8a1aefe36..ec3d795b1 100644 --- a/src/Persistence/Initialization/Updates/FixWeaponRisePercentagePlugIn095d.cs +++ b/src/Persistence/Initialization/Updates/FixWeaponRisePercentagePlugIn095d.cs @@ -10,7 +10,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// This update fixes weapons (staff) rise percentage. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("33259706-F3DF-4F4D-9935-3DEF7E53BF81")] public class FixWeaponRisePercentagePlugIn095D : FixWeaponRisePercentagePlugInBase { diff --git a/src/Persistence/Initialization/Updates/FixWeaponRisePercentagePlugInSeason6.cs b/src/Persistence/Initialization/Updates/FixWeaponRisePercentagePlugInSeason6.cs index ef7eae966..2b162cfd5 100644 --- a/src/Persistence/Initialization/Updates/FixWeaponRisePercentagePlugInSeason6.cs +++ b/src/Persistence/Initialization/Updates/FixWeaponRisePercentagePlugInSeason6.cs @@ -19,7 +19,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// This update fixes weapons (staff, stick, book, scepter) rise percentage increase; Summoner weapons and wings wizardry/curse options; and Wing of Dimension (inc/dec), Cape of Overrule (inc/dec), Cape of Emperor (dec) damage rates.. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("58740F26-6496-4CCA-8C90-C4749E09DDB2")] public class FixWeaponRisePercentagePlugInSeason6 : FixWeaponRisePercentagePlugInBase { diff --git a/src/Persistence/Initialization/Updates/FixWingsAndCapesCraftingsUpdatePlugIn.cs b/src/Persistence/Initialization/Updates/FixWingsAndCapesCraftingsUpdatePlugIn.cs index eef2e713e..d99c6dd4d 100644 --- a/src/Persistence/Initialization/Updates/FixWingsAndCapesCraftingsUpdatePlugIn.cs +++ b/src/Persistence/Initialization/Updates/FixWingsAndCapesCraftingsUpdatePlugIn.cs @@ -11,7 +11,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// This update sets the right settings for the wings and capes craftings. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("618A53AF-ED2A-4C78-A103-BAD061FFB0D2")] public class FixWingsAndCapesCraftingsUpdatePlugIn : UpdatePlugInBase { diff --git a/src/Persistence/Initialization/Updates/FixWingsDmgRatesUpdatePlugIn075.cs b/src/Persistence/Initialization/Updates/FixWingsDmgRatesUpdatePlugIn075.cs index 6992be509..cdafeb32e 100644 --- a/src/Persistence/Initialization/Updates/FixWingsDmgRatesUpdatePlugIn075.cs +++ b/src/Persistence/Initialization/Updates/FixWingsDmgRatesUpdatePlugIn075.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// This update fixes the wings damage absorption and increase bonus level tables values for a (sum) calculation, instead of a compound calculation /// for version 075. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("3821267A-9C37-40E5-B023-BAB1A8E4DAB7")] public class FixWingsDmgRatesUpdatePlugIn075 : FixWingsDmgRatesUpdatePlugInBase { diff --git a/src/Persistence/Initialization/Updates/FixWingsDmgRatesUpdatePlugIn095d.cs b/src/Persistence/Initialization/Updates/FixWingsDmgRatesUpdatePlugIn095d.cs index 9c3192a95..3ffb3a83c 100644 --- a/src/Persistence/Initialization/Updates/FixWingsDmgRatesUpdatePlugIn095d.cs +++ b/src/Persistence/Initialization/Updates/FixWingsDmgRatesUpdatePlugIn095d.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// This update fixes the wings damage absorption and increase bonus level tables values for a (sum) calculation, instead of a compound calculation /// for version 095d. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("F45FA4D0-B19B-48E2-9592-A37F3B36348A")] public class FixWingsDmgRatesUpdatePlugIn095D : FixWingsDmgRatesUpdatePlugInBase { diff --git a/src/Persistence/Initialization/Updates/FixWingsDmgRatesUpdatePlugInSeason6.cs b/src/Persistence/Initialization/Updates/FixWingsDmgRatesUpdatePlugInSeason6.cs index 8adabb9ca..29754ae4c 100644 --- a/src/Persistence/Initialization/Updates/FixWingsDmgRatesUpdatePlugInSeason6.cs +++ b/src/Persistence/Initialization/Updates/FixWingsDmgRatesUpdatePlugInSeason6.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// This update fixes the wings damage absorption and increase bonus level tables values for a (sum) calculation, instead of a compound calculation /// for season 6. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("03F49890-CB0E-40B7-A590-174BBA1962F4")] public class FixWingsDmgRatesUpdatePlugInSeason6 : FixWingsDmgRatesUpdatePlugInBase { diff --git a/src/Persistence/Initialization/Updates/InfinityArrowSkillOnQuestCompletionPlugIn.cs b/src/Persistence/Initialization/Updates/InfinityArrowSkillOnQuestCompletionPlugIn.cs index 16de5c3f9..14cf1a277 100644 --- a/src/Persistence/Initialization/Updates/InfinityArrowSkillOnQuestCompletionPlugIn.cs +++ b/src/Persistence/Initialization/Updates/InfinityArrowSkillOnQuestCompletionPlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// This update adds the infinity arrow skill as quest reward for 'Gain Hero Status (Muse Elf)'. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("A78B7540-75AC-494C-9AEC-BC943D929C98")] public class InfinityArrowSkillOnQuestCompletionPlugIn : UpdatePlugInBase { diff --git a/src/Persistence/Initialization/Updates/SpawnFixesUpdatePlugIn.cs b/src/Persistence/Initialization/Updates/SpawnFixesUpdatePlugIn.cs index 3c6bbe999..fef6d66f2 100644 --- a/src/Persistence/Initialization/Updates/SpawnFixesUpdatePlugIn.cs +++ b/src/Persistence/Initialization/Updates/SpawnFixesUpdatePlugIn.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// The chaos castle update plugin. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("15FB42DE-A032-49B5-98B8-4CF34744B3A6")] public class SpawnFixesUpdatePlugIn : UpdatePlugInBase { diff --git a/src/Persistence/Initialization/Updates/SystemConfigurationAddedPlugIn075.cs b/src/Persistence/Initialization/Updates/SystemConfigurationAddedPlugIn075.cs index dacc0b929..a1cb23713 100644 --- a/src/Persistence/Initialization/Updates/SystemConfigurationAddedPlugIn075.cs +++ b/src/Persistence/Initialization/Updates/SystemConfigurationAddedPlugIn075.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// This updates adds the new with default settings /// for Version 0.75. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("F1151FDE-14F7-4945-AEE9-57DAB6449CFF")] public class SystemConfigurationAddedPlugIn075 : SystemConfigurationAddedPlugInBase { diff --git a/src/Persistence/Initialization/Updates/SystemConfigurationAddedPlugIn095d.cs b/src/Persistence/Initialization/Updates/SystemConfigurationAddedPlugIn095d.cs index 6b9669bca..5d2d74f79 100644 --- a/src/Persistence/Initialization/Updates/SystemConfigurationAddedPlugIn095d.cs +++ b/src/Persistence/Initialization/Updates/SystemConfigurationAddedPlugIn095d.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// This updates adds the new with default settings /// for version 0.95d. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("EC9FE71E-5C6C-456A-AC75-428EBA3FF626")] public class SystemConfigurationAddedPlugIn095d : SystemConfigurationAddedPlugInBase { diff --git a/src/Persistence/Initialization/Updates/SystemConfigurationAddedPlugInSeason6.cs b/src/Persistence/Initialization/Updates/SystemConfigurationAddedPlugInSeason6.cs index 406f199c2..0de4009a9 100644 --- a/src/Persistence/Initialization/Updates/SystemConfigurationAddedPlugInSeason6.cs +++ b/src/Persistence/Initialization/Updates/SystemConfigurationAddedPlugInSeason6.cs @@ -12,7 +12,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// This updates adds the new with default settings /// for season 6. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("7231172F-51AD-4129-9003-C1ACC7E04147")] public class SystemConfigurationAddedPlugInSeason6 : SystemConfigurationAddedPlugInBase { diff --git a/src/Persistence/Initialization/Updates/WizEnhanceAndRagefighterSkillsUpdatePlugIn.cs b/src/Persistence/Initialization/Updates/WizEnhanceAndRagefighterSkillsUpdatePlugIn.cs index 431c74d45..89656b036 100644 --- a/src/Persistence/Initialization/Updates/WizEnhanceAndRagefighterSkillsUpdatePlugIn.cs +++ b/src/Persistence/Initialization/Updates/WizEnhanceAndRagefighterSkillsUpdatePlugIn.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Updates; /// /// This update sets the right settings for the chain lightning skill. /// -[PlugIn(PlugInName, PlugInDescription)] +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] [Guid("426497DB-A1D7-4EC5-BE6A-C8AEABC288E2")] public class WizEnhanceAndRagefighterSkillsUpdatePlugIn : UpdatePlugInBase { diff --git a/src/Persistence/Initialization/Version075/DataInitialization.cs b/src/Persistence/Initialization/Version075/DataInitialization.cs index b8e67017d..3be74ff88 100644 --- a/src/Persistence/Initialization/Version075/DataInitialization.cs +++ b/src/Persistence/Initialization/Version075/DataInitialization.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Version075; /// Data initialization plugin for Version 0.75. /// [Guid("420F8E50-0ACB-4A90-AF86-E1035D97F84D")] -[PlugIn("Version 0.75 Initialization", "Provides initial data for Version 0.75")] +[PlugIn] +[Display(Name = "Version 0.75 Initialization", Description = "Provides initial data for Version 0.75")] public class DataInitialization : DataInitializationBase { /// diff --git a/src/Persistence/Initialization/Version095d/DataInitialization.cs b/src/Persistence/Initialization/Version095d/DataInitialization.cs index 51ad958dd..4ff37d32f 100644 --- a/src/Persistence/Initialization/Version095d/DataInitialization.cs +++ b/src/Persistence/Initialization/Version095d/DataInitialization.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.Version095d; /// Data initialization plugin for Version 0.95d. /// [Guid("D24791DC-5808-42A9-AFEA-7C398C0D8C84")] -[PlugIn("Version 0.95d Initialization", "Provides initial data for Version 0.95d")] +[PlugIn] +[Display(Name = "Version 0.95d Initialization", Description = "Provides initial data for Version 0.95d")] public class DataInitialization : DataInitializationBase { /// diff --git a/src/Persistence/Initialization/VersionSeasonSix/DataInitialization.cs b/src/Persistence/Initialization/VersionSeasonSix/DataInitialization.cs index ad9859777..7303404c3 100644 --- a/src/Persistence/Initialization/VersionSeasonSix/DataInitialization.cs +++ b/src/Persistence/Initialization/VersionSeasonSix/DataInitialization.cs @@ -15,7 +15,8 @@ namespace MUnique.OpenMU.Persistence.Initialization.VersionSeasonSix; /// Provides initial data for Season 6 Episode 3. /// [Guid("9C21C359-F192-4AF5-8C05-1AC4AFD10897")] -[PlugIn("Season 6 Episode 3 Initialization", "Provides initial data for Season 6 Episode 3.")] +[PlugIn] +[Display(Name = "Season 6 Episode 3 Initialization", Description = "Provides initial data for Season 6 Episode 3.")] public class DataInitialization : DataInitializationBase { /// diff --git a/src/PlugIns/PlugInAttribute.cs b/src/PlugIns/PlugInAttribute.cs index 736719bd2..0c4cf77a3 100644 --- a/src/PlugIns/PlugInAttribute.cs +++ b/src/PlugIns/PlugInAttribute.cs @@ -9,26 +9,4 @@ namespace MUnique.OpenMU.PlugIns; /// May be helpful for debugging and the user interface. /// [AttributeUsage(AttributeTargets.Class)] -public class PlugInAttribute : Attribute -{ - /// - /// Initializes a new instance of the class. - /// - /// The name. - /// The description. - public PlugInAttribute(string name, string description) - { - this.Name = name; - this.Description = description; - } - - /// - /// Gets the name of the plugin. - /// - public string Name { get; } - - /// - /// Gets the description of the plugin. - /// - public string Description { get; } -} \ No newline at end of file +public class PlugInAttribute : Attribute; diff --git a/src/PlugIns/PlugInConfiguration.cs b/src/PlugIns/PlugInConfiguration.cs index c3485feb5..93251010c 100644 --- a/src/PlugIns/PlugInConfiguration.cs +++ b/src/PlugIns/PlugInConfiguration.cs @@ -5,6 +5,7 @@ namespace MUnique.OpenMU.PlugIns; using System.ComponentModel; +using System.ComponentModel.DataAnnotations; using System.Reflection; using System.Runtime.CompilerServices; using System.Text.Json.Serialization; @@ -82,7 +83,7 @@ public string Name var plugInType = AppDomain.CurrentDomain.GetAssemblies() .SelectMany(assembly => assembly.DefinedTypes) .FirstOrDefault(t => t.GUID == this.TypeId); - var plugInAttribute = plugInType?.GetCustomAttribute(inherit: false); + var plugInAttribute = plugInType?.GetCustomAttribute(inherit: false); return plugInAttribute?.Name ?? this.TypeId.ToString(); } diff --git a/src/PlugIns/PlugInPointAttribute.cs b/src/PlugIns/PlugInPointAttribute.cs index 3395eea17..baa88eba8 100644 --- a/src/PlugIns/PlugInPointAttribute.cs +++ b/src/PlugIns/PlugInPointAttribute.cs @@ -9,6 +9,10 @@ namespace MUnique.OpenMU.PlugIns; /// May be helpful for debugging and the user interface. /// A proxy class is automatically generated which executes all plugins which implement the marked interface. /// +/// +/// It's not possible to apply DisplayAttribute to interfaces. +/// Therefore, this attribute still has and properties. +/// [AttributeUsage(AttributeTargets.Interface)] public class PlugInPointAttribute : Attribute { diff --git a/src/PlugIns/Readme.md b/src/PlugIns/Readme.md index 484a4f41e..d9b35b97e 100644 --- a/src/PlugIns/Readme.md +++ b/src/PlugIns/Readme.md @@ -197,7 +197,8 @@ using MUnique.OpenMU.PlugIns; /// /// [Guid("9FCA692F-2BD5-4310-8755-E20761F94180")] -[PlugIn(nameof(ExamplePlugIn), "Just an example plugin.")] +[PlugIn] +[Display(Name = nameof(ExamplePlugIn), Description = "Just an example plugin.")] internal class ExamplePlugIn : IExamplePlugIn { /// diff --git a/src/Web/AdminPanel/Services/PlugInController.cs b/src/Web/AdminPanel/Services/PlugInController.cs index e0a4f0e91..a17905f9d 100644 --- a/src/Web/AdminPanel/Services/PlugInController.cs +++ b/src/Web/AdminPanel/Services/PlugInController.cs @@ -4,6 +4,7 @@ namespace MUnique.OpenMU.Web.AdminPanel.Services; +using System.ComponentModel.DataAnnotations; using System.Reflection; using Blazored.Modal; using Blazored.Modal.Services; @@ -218,7 +219,7 @@ private static IEnumerable GetPluginTypes() private static string GetPlugInName(Type plugInType) { - return plugInType.GetCustomAttribute()!.Name; + return plugInType.GetCustomAttribute()?.Name ?? plugInType.Name; } private static Type? GetPlugInExtensionPointType(Type plugInType) @@ -230,7 +231,7 @@ private static string GetPlugInName(Type plugInType) private static PlugInConfigurationViewItem BuildConfigurationDto(Type plugInType, GameConfiguration gameConfiguration, PlugInConfiguration plugInConfiguration) { - var plugInAttribute = plugInType.GetCustomAttribute(); + var plugInAttribute = plugInType.GetCustomAttribute(); var plugInPoint = plugInType.GetInterfaces().FirstOrDefault(i => i.GetCustomAttribute() != null)?.GetCustomAttribute(); var customPlugInContainer = plugInType.GetInterfaces().FirstOrDefault(i => i.GetCustomAttribute() != null)?.GetCustomAttribute(); diff --git a/tests/MUnique.OpenMU.PlugIns.Tests/ExamplePlugIn.cs b/tests/MUnique.OpenMU.PlugIns.Tests/ExamplePlugIn.cs index 96b4ff059..0d25335c4 100644 --- a/tests/MUnique.OpenMU.PlugIns.Tests/ExamplePlugIn.cs +++ b/tests/MUnique.OpenMU.PlugIns.Tests/ExamplePlugIn.cs @@ -4,6 +4,7 @@ namespace MUnique.OpenMU.PlugIns.Tests; +using System.ComponentModel.DataAnnotations; using System.Runtime.InteropServices; using MUnique.OpenMU.GameLogic; using MUnique.OpenMU.PlugIns; @@ -13,7 +14,8 @@ namespace MUnique.OpenMU.PlugIns.Tests; /// /// [Guid("9FCA692F-2BD5-4310-8755-E20761F94180")] -[PlugIn(nameof(ExamplePlugIn), "Just an example plugin.")] +[PlugIn] +[Display(Name = nameof(ExamplePlugIn), Description = "Just an example plugin.")] internal class ExamplePlugIn : IExamplePlugIn { /// @@ -33,7 +35,8 @@ public void DoStuff(Player player, string text, MyEventArgs args) /// /// [Guid("B6D7E11D-E99D-4466-BAE1-87B043ED345D")] - [PlugIn(nameof(NestedPlugIn), "A nested example plugin.")] + [PlugIn] + [Display(Name = nameof(NestedPlugIn), Description = "A nested example plugin.")] internal class NestedPlugIn : IExamplePlugIn { /// @@ -47,7 +50,8 @@ public void DoStuff(Player player, string text, MyEventArgs args) /// A plugin of a nested type which doesn't have a guid. /// /// - [PlugIn(nameof(NestedPlugIn), "A nested example plugin without Guid.")] + [PlugIn] + [Display(Name = nameof(NestedPlugIn), Description = "A nested example plugin without Guid.")] internal class NestedWithoutGuid : IExamplePlugIn { /// diff --git a/tests/MUnique.OpenMU.PlugIns.Tests/ExampleStrategyPlugIn.cs b/tests/MUnique.OpenMU.PlugIns.Tests/ExampleStrategyPlugIn.cs index 6d215fd02..a7a447021 100644 --- a/tests/MUnique.OpenMU.PlugIns.Tests/ExampleStrategyPlugIn.cs +++ b/tests/MUnique.OpenMU.PlugIns.Tests/ExampleStrategyPlugIn.cs @@ -4,6 +4,7 @@ namespace MUnique.OpenMU.PlugIns.Tests; +using System.ComponentModel.DataAnnotations; using System.Runtime.InteropServices; /// @@ -11,7 +12,8 @@ namespace MUnique.OpenMU.PlugIns.Tests; /// /// [Guid("69A6FCD1-E828-4841-BE91-E064231ED7B9")] -[PlugIn(nameof(ExampleStrategyPlugIn), "A test strategy plugin.")] +[PlugIn] +[Display(Name = nameof(ExampleStrategyPlugIn), Description = "A test strategy plugin.")] public class ExampleStrategyPlugIn : IExampleStrategyPlugIn { /// diff --git a/tests/MUnique.OpenMU.PlugIns.Tests/TestCustomPlugIn.cs b/tests/MUnique.OpenMU.PlugIns.Tests/TestCustomPlugIn.cs index d482411ea..0af65dfb1 100644 --- a/tests/MUnique.OpenMU.PlugIns.Tests/TestCustomPlugIn.cs +++ b/tests/MUnique.OpenMU.PlugIns.Tests/TestCustomPlugIn.cs @@ -4,13 +4,13 @@ namespace MUnique.OpenMU.PlugIns.Tests; +using System.ComponentModel.DataAnnotations; using System.Runtime.InteropServices; /// /// A test implementation of . /// -[PlugIn(nameof(TestCustomPlugIn), "")] +[PlugIn] +[Display(Name = nameof(TestCustomPlugIn))] [Guid("77CF382A-2F87-4642-889A-85BF6D76E218")] -public class TestCustomPlugIn : ITestCustomPlugIn -{ -} \ No newline at end of file +public class TestCustomPlugIn : ITestCustomPlugIn; \ No newline at end of file diff --git a/tests/MUnique.OpenMU.PlugIns.Tests/TestCustomPlugIn2.cs b/tests/MUnique.OpenMU.PlugIns.Tests/TestCustomPlugIn2.cs index 60f1f8ded..b860a52e4 100644 --- a/tests/MUnique.OpenMU.PlugIns.Tests/TestCustomPlugIn2.cs +++ b/tests/MUnique.OpenMU.PlugIns.Tests/TestCustomPlugIn2.cs @@ -4,12 +4,14 @@ namespace MUnique.OpenMU.PlugIns.Tests; +using System.ComponentModel.DataAnnotations; using System.Runtime.InteropServices; /// /// A second test implementation of . /// -[PlugIn(nameof(TestCustomPlugIn2), "")] +[PlugIn] +[Display(Name = nameof(TestCustomPlugIn2))] [Guid("9431C449-1F0C-47C1-BE5D-F9E356090DAB")] public class TestCustomPlugIn2 : ITestCustomPlugIn, IAnotherCustomPlugIn { diff --git a/tests/MUnique.OpenMU.Tests/ViewPlugInContainerTest.cs b/tests/MUnique.OpenMU.Tests/ViewPlugInContainerTest.cs index dfd3666b2..fe37b4257 100644 --- a/tests/MUnique.OpenMU.Tests/ViewPlugInContainerTest.cs +++ b/tests/MUnique.OpenMU.Tests/ViewPlugInContainerTest.cs @@ -4,6 +4,7 @@ namespace MUnique.OpenMU.Tests; +using System.ComponentModel.DataAnnotations; using System.Runtime.InteropServices; using Microsoft.Extensions.Logging.Abstractions; using Moq; @@ -130,7 +131,8 @@ private RemotePlayer CreatePlayer(PlugInManager plugInManager) /// /// A plugin which is version/language invariant. /// - [PlugIn("Season Invariant Test PlugIn", "")] + [PlugIn] + [Display(Name = "Season Invariant Test PlugIn")] [Guid("96A3FED8-0112-4CFC-A717-70EEEEBE859A")] public class InvariantSeasonPlugIn : ISomeViewPlugIn { @@ -146,7 +148,8 @@ public InvariantSeasonPlugIn(RemotePlayer player) /// /// A test plugin for season 1. /// - [PlugIn("Season 1 Test PlugIn", "")] + [PlugIn] + [Display(Name = "Season 1 Test PlugIn")] [Guid("8CA21647-85D5-43BB-A8F9-3543D0E02176")] [MinimumClient(1, 0, ClientLanguage.English)] public class Season1PlugIn : ISomeViewPlugIn @@ -163,7 +166,8 @@ public Season1PlugIn(RemotePlayer player) /// /// A test plugin for season 6. /// - [PlugIn("Season 6 Test PlugIn", "")] + [PlugIn] + [Display(Name = "Season 6 Test PlugIn")] [Guid("7C029691-BB22-4B5D-BE96-924537E43EB2")] [MinimumClient(6, 3, ClientLanguage.English)] public class Season6PlugIn : ISomeViewPlugIn @@ -180,7 +184,8 @@ public Season6PlugIn(RemotePlayer player) /// /// A test plugin for season 6, with invariant language. /// - [PlugIn("Season 6 Test PlugIn, Invariant language", "")] + [PlugIn] + [Display(Name = "Season 6 Test PlugIn, Invariant language")] [Guid("D58A6AC6-A804-4321-9422-0911EDC82867")] [MinimumClient(6, 3, ClientLanguage.Invariant)] public class Season6PlugInInvariant : ISomeViewPlugIn @@ -197,7 +202,8 @@ public Season6PlugInInvariant(RemotePlayer player) /// /// A test plugin for season 6, but for another client language. /// - [PlugIn("Season 6 Test PlugIn", "")] + [PlugIn] + [Display(Name = "Season 6 Test PlugIn")] [Guid("05C47D9E-F0A0-48B3-9FFF-22CF43B20494")] [MinimumClient(6, 3, (ClientLanguage)42)] public class Season6PlugInOfSomeOtherLanguage : ISomeViewPlugIn @@ -214,7 +220,8 @@ public Season6PlugInOfSomeOtherLanguage(RemotePlayer player) /// /// Test plugin for season 9. /// - [PlugIn("Season 9 Test PlugIn", "")] + [PlugIn] + [Display(Name = "Season 9 Test PlugIn")] [Guid("82AC1C9A-F3D0-4196-A3CD-6CB36AA2D914")] [MinimumClient(9, 2, ClientLanguage.English)] public class Season9PlugIn : ISomeViewPlugIn From 43a79d207a2d9cb5eed1d247d6f101f43cab5a35 Mon Sep 17 00:00:00 2001 From: sven-n Date: Thu, 18 Dec 2025 21:22:45 +0100 Subject: [PATCH 05/32] ResourceGenerator needs to runs deterministic Otherwise we might get different results after each compile which are hard to track for real changes --- src/DataModel/Properties/ModelResources.resx | 5536 +++++++++--------- src/SourceGenerators/ResourceGenerator.cs | 39 +- 2 files changed, 2798 insertions(+), 2777 deletions(-) diff --git a/src/DataModel/Properties/ModelResources.resx b/src/DataModel/Properties/ModelResources.resx index 3f7221252..d583c917d 100644 --- a/src/DataModel/Properties/ModelResources.resx +++ b/src/DataModel/Properties/ModelResources.resx @@ -13,904 +13,892 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Fruit Calculation Strategy - - - + + Account - - Default + + Accounts - + - - Magic Gladiator + + Login Name - + - - Dark Lord + + Password Hash - + - - Power Ups - - - Power Ups + + Security Code - + - - Target Attribute + + EMail - + - - Boost + + Language Iso Code - + - - Item Option Types - - - Item Option Types + + Chat Ban Until - + - - Excellent + + Unlocked Character Classes - + - - Wing + + Registration Date - + - - Luck + + State - + - - Option + + Time Zone - + - - Harmony Option + + Vault Password - + - - Ancient Option + + Vault - + - - Ancient Bonus + + Is Vault Extended - + - - Guardian Option + + Is Template - + - - Socket Option + + Characters - + - - Socket Bonus Option + + Attributes - + - - Blue Fenrir + + Account State - + - - Black Fenrir + + Normal - + - - Gold Fenrir + + Spectator - + - - Dark Horse + + Game Master - + - - Item Crafting - - - Item Craftings + + Game Master Invisible - + - - Number + + Banned - + - - Name + + Temporarily Banned - + - - Item Crafting Handler Class Name - - - + + Aggregate Root Attribute - - Simple Crafting Settings + + Aggregate Root Attributes - + - - Game Clients + + Appearance Data - - Game Clients + + Appearance Datas - + - - Season + + Character Class - + - - Episode + + Character Status - + - - Language + + Pose - + - - Version + + Full Ancient Set Equipped - + - - Serial + + Equipped Items - + - - Description + + Area Skill Settings - - + + Area Skill Settings - - Character Class + + - - Character Class + + Use Frustum Filter - + - - Number + + Frustum Start Width - + - - Name + + Frustum End Width - + - - Can Get Created + + Frustum Distance - + - - Level Requirement By Creation + + Use Target Area Filter - + - - Creation Allowed Flag + + Target Area Diameter - + - - Next Generation Class + + Use Deferred Hits - + - - Is Master Class + + Delay Per One Distance - + - - Level Warp Requirement Reduction Percent + + Delay Between Hits - + - - Fruit Calculation + + Minimum Number Of Hits Per Target - + - - Stat Attributes + + Maximum Number Of Hits Per Target - + - - Attribute Combinations + + Maximum Number Of Hits Per Attack - + - - Base Attribute Values + + Hit Chance Per Distance Multiplier - + - - Home Map - - - + + Assignable Extensions - - Combos + + Assignable Extensions - + - - Warp Info + + Attribute Requirement - - Warp Infos + + Attribute Requirements - + - - Index + + Attribute - + - - Name + + Minimum Value - + - - Costs + + Battle Type - + - - Level Requirement + + Normal - + - - Gate + + Soccer - + - - Master Skills + + Battle Zones - - Master Skills + + Battle Zones - + - - Root + + Type - + - - Required Master Skills + + Left Team Spawn Point X - + - - Rank + + Left Team Spawn Point Y - + - - Maximum Level + + Right Team Spawn Point X - + - - Minimum Level + + Right Team Spawn Point Y - + - - Value Formula + + Ground - + - - Display Value Formula + + Left Goal - + - - Target Attribute + + Right Goal - + - - Aggregation + + Character - + + Characters + + - - Replaced Skill + + Id - + - - Extends Duration + + Name - + - - Terrain Attribute Type + + Character Class - + - - Safezone + + Character Slot - + - - Character + + Create Date - + - - Blocked + + Experience - + - - No Ground + + Master Experience - + - - Water + + Level Up Points - + - - Item Option - - - Item Options + + Master Level Up Points - + - - Number + + Current Map - + - - Sub Option Type + + Position X - + - - Option Type + + Position Y - + - - Power Ups + + Player Kill Count - + - - Guild + + State Remaining Seconds - - Guilds + + - - - - - Id + + State - + - - Members + + Character Status - + - - Result Item Selection + + Pose - + - - Any + + Used Fruit Points - + - - All + + Used Neg Fruit Points - + - - Game Server Configuration - - - Game Server Configurations + + Inventory Extensions - + - - Maximum Players + + Key Configuration - + - - Maps + + Mu Helper Configuration - + - - Game Configuration - - - Game Configurations + + Store Name - + - - Maximum Level + + Is Store Opened - + - - Maximum Master Level + + Attributes - + - - Experience Rate + + Letters - + - - Minimum Monster Level For Master Experience + + Learned Skills - + - - Info Range + + Inventory - + - - Area Skill Hits Player + + Drop Item Groups - + - - Maximum Inventory Money + + Quest States - + - - Maximum Vault Money + + Character Class - + + Character Class + + - - Experience Formula + + Number - + - - Master Experience Formula + + Name - + - - Recovery Interval + + Can Get Created - + - - Maximum Letters + + Level Requirement By Creation - + - - Letter Send Price + + Creation Allowed Flag - + - - Maximum Characters Per Account + + Next Generation Class - + - - Character Name Regex + + Is Master Class - + - - Maximum Password Length + + Level Warp Requirement Reduction Percent - + - - Maximum Party Size + + Fruit Calculation - + - - Should Drop Money + + Stat Attributes - + - - Item Drop Duration + + Attribute Combinations - + - - Maximum Item Option Level Drop + + Base Attribute Values - + - - Damage Per One Item Durability + + Home Map - + - - Damage Per One Pet Durability + + Combos - + - - Hits Per One Item Durability + + Character Pose - + - - Duel Configuration + + Standing - + - - Jewel Mixes + + Sitting - + - - Warp List + + Leaning - + - - Drop Item Groups + + Hanging - + - - Skills + + Character Quest State - + + Character Quest States + + - - Character Classes + + Group - + - - Items + + Client Action Performed - + - - Item Level Bonus Tables + + Last Finished Quest - + - - Item Slot Types + + Active Quest - + - - Item Options + + Requirement States - + - - Item Option Types + + Character Status - + - - Item Set Groups + + Normal - + - - Item Option Combination Bonuses + + Banned - + - - Maps + + Game Master - + - - Monsters + + Chat Servers - + + Chat Servers + + - - Attributes + + Server Id - + - - Magic Effects + + Description - + - - Master Skill Roots + + Maximum Connections - + - - Plug In Configurations + + Client Timeout - + - - Mini Games + + Client Clean Up Interval - + - - Quest Reward Type + + Room Clean Up Interval - + - - Undefined + + Endpoints - + - - Experience + + Chat Server Endpoint - + + Chat Server Endpoints + + - - Money + + Combination Bonus Requirement - + + Combination Bonus Requirements + + - - Item + + Option Type - + - - Gens Attribution + + Sub Option Type - + - - Level Up Points + + Minimum Count - + - - Character Evolution First To Second + + Configuration Update - + + Configuration Updates + + - - Character Evolution Second To Third + + Version - + - - Attribute + + Name - + - - Skill + + Description - + - - Game Server Endpoint - - - Game Server Endpoints + + Created At - + - - Alternative Published Port + + Installed At - + @@ -934,2230 +922,2158 @@ - - Item Level Bonus Table + + Connect Servers - - Item Level Bonus Tables + + Connect Servers - + - - Name + + Id - + - - Description + + Configuration Id - + - - Bonus Per Level + + Server Id - + - - Monster Attribute - - - Monster Attributes + + Description - + - - Attributes + + Client - + - - Value + + Disconnect On Unknown Packet - + - - Member Of Aggregate Attribute - - - Member Of Aggregate Attributes + + Maximum Receive Size - + - - Item Option Link - - - Item Option Links + + Client Listener Port - + - - Item Option + + Timeout - + - - Level + + Current Patch Version - + - - Index + + Patch Address - + - - Aggregate Root Attribute - - - Aggregate Root Attributes + + Max Connections Per Address - - - - - Magic Effects - - - Magic Effects - - + - - Number + + Check Max Connections Per Address - + - - Name + + Max Connections - + - - Sub Type + + Listener Backlog - + - - Inform Observers + + Max Ftp Requests - + - - Stop By Death + + Max Ip Requests - + - - Send Duration + + Max Server List Requests - + - - Duration + + Damage Type - + - - Power Ups + + None - + - - Transient Attribute - - - Transient Attributes + + Physical - + - - Skill Entry - - - Skill Entrys + + Wizardry - + - - Skill + + Curse - + - - Level + + Summoned Monster - + - - Power Ups + + Fenrir - + - - Power Up Duration + + All - + - - Attributes + + Direction - + - - Item Storage - - - Item Storages + + Undefined - + - - Items + + West - + - - Money + + South West - + - - Appearance Data - - - Appearance Datas + + South - + - - Character Class + + South East - + - - Character Status + + East - + - - Pose + + North East - + - - Full Ancient Set Equipped + + North - + - - Equipped Items + + North West - + - - Jewel Mix + + Drop Item Group - - Jewel Mixs + + Drop Item Groups - + - - Number + + Description - + - - Single Jewel + + Chance - + - - Mixed Jewel + + Minimum Monster Level - + - - Items - - - Items + + Maximum Monster Level - + - - Number + + Monster - + - - Item Slot + + Item Level - + - - Width + + Item Type - + - - Height + + Possible Items - + - - Drops From Monsters + + Duel Area - + + Duel Areas + + - - Is Ammunition + + Index - + - - Is Bound To Character + + First Player Gate - + - - Storage Limit Per Character + + Second Player Gate - + - - Name + + Spectators Gate - + - - Drop Level - - - + + Duel Configuration - - Maximum Item Level + + Duel Configurations - + - - Durability + + Maximum Score - + - - Group + + Entrance Fee - + - - Value + + Minimum Character Level - + - - Pet Experience Formula + + Maximum Spectators Per Duel Room - + - - Consume Effect + + Exit - + - - Maximum Sockets + + Duel Areas - + - - Skill + + Enter Gate - + + Enter Gates + + - - Qualified Characters + + Target Gate - + - - Possible Item Set Groups + + Level Requirement - + - - Possible Item Options + + Number - + - - Requirements + + Error - + + Errors + + - - Base Power Up Attributes + + Exit Gate - + + Exit Gates + + - - Drop Items + + Direction - + - - Battle Zones - - - Battle Zones + + Map - + - - Type + + Is Spawn Gate - + - - Left Team Spawn Point X + + Fruit Calculation Strategy - + - - Left Team Spawn Point Y + + Default - + - - Right Team Spawn Point X + + Magic Gladiator - + - - Right Team Spawn Point Y + + Dark Lord - + - - Ground + + Game Clients - + + Game Clients + + - - Left Goal + + Season - + - - Right Goal + + Episode - + - - Game Maps - - - Game Maps + + Language - + - - Number + + Version - + - - Name + + Serial - + - - Terrain Data + + Description - + - - Monster Spawns + + Game Configuration - + + Game Configurations + + - - Enter Gates + + Maximum Level - + - - Exp Multiplier + + Maximum Master Level - + - - Discriminator + + Experience Rate - + - - Safezone Map + + Minimum Monster Level For Master Experience - + - - Battle Zone + + Info Range - + - - Exit Gates + + Area Skill Hits Player - + - - Drop Item Groups + + Maximum Inventory Money - + - - Map Requirements + + Maximum Vault Money - + - - Character Power Ups + + Experience Formula - + - - Hidden At Creation Attribute - - - Hidden At Creation Attributes + + Master Experience Formula - + - - Simple Crafting Settings - - - Simple Crafting Settings + + Recovery Interval - + - - Money + + Maximum Letters - + - - Money Per Final Success Percentage + + Letter Send Price - + - - Npc Price Divisor + + Maximum Characters Per Account - + - - Success Percent + + Character Name Regex - + - - Maximum Success Percent + + Maximum Password Length - + - - Multiple Allowed + + Maximum Party Size - + - - Required Items + + Should Drop Money - + - - Result Items + + Item Drop Duration - + - - Result Item Select + + Maximum Item Option Level Drop - + - - Success Percentage Addition For Luck + + Damage Per One Item Durability - + - - Success Percentage Addition For Excellent Item + + Damage Per One Pet Durability - + - - Success Percentage Addition For Ancient Item + + Hits Per One Item Durability - + - - Success Percentage Addition For Guardian Item + + Duel Configuration - + - - Success Percentage Addition For Socket Item + + Jewel Mixes - + - - Result Item Luck Option Chance + + Warp List - + - - Result Item Skill Chance + + Drop Item Groups - + - - Result Item Excellent Option Chance + + Skills - + - - Result Item Max Exc Option Count + + Character Classes - + - - Item Appearance - - - Item Appearances + + Items - + - - Item Slot + + Item Level Bonus Tables - + - - Definition + + Item Slot Types - + - - Level + + Item Options - + - - Visible Options + + Item Option Types - + - - Item Base Power Ups - - - Item Base Power Ups + + Item Set Groups - + - - Target Attribute + + Item Option Combination Bonuses - + - - Base Value Element + + Maps - + - - Bonus Per Level Table + + Monsters - + - - Base Value + + Attributes - + - - Aggregate Type + + Magic Effects - + - - Quests + + Master Skill Roots - - Quests + + - + + Plug In Configurations + + - - Quest Giver + + Mini Games - + - - Name + + Game Configuration Helper - + + Game Configuration Helpers + + - - Group + + Game Maps - + + Game Maps + + - + Number - + - - Starting Number + + Name - + - - Refuse Number + + Terrain Data - + - - Repeatable + + Monster Spawns - + - - Requires Client Action + + Enter Gates - + - - Required Start Money + + Exp Multiplier - + - - Minimum Character Level + + Discriminator - + - - Maximum Character Level + + Safezone Map - + - - Qualified Character + + Battle Zone - + - - Required Monster Kills + + Exit Gates - + - - Required Items + + Drop Item Groups - + - - Rewards + + Map Requirements - + - - Level Bonus + + Character Power Ups - - Level Bonus + + - + + Game Server Configuration + + + Game Server Configurations + + - - Level + + Maximum Players - + - - Additional Value + + Maps - + - - Enter Gate + + Game Servers - - Enter Gates + + Game Servers - + - - Target Gate + + Server ID - + - - Level Requirement + + Description - + - - Number + + Experience Rate - + - - Item Option Of Level - - - Item Option Of Levels + + Pvp Enabled - + - - Level + + Server Configuration - + - - Required Item Level + + Game Configuration - + - - Power Ups + + Endpoints - + - - Skill + + Game Server Endpoint - - Skills + + Game Server Endpoints - + - - Number + + Alternative Published Port - + - - Name - - - + + Gate - - Attack Damage + + Gates - + - - Requirements + + X1 - + - - Consume Requirements + + Y1 - + - - Attribute Relationships + + X2 - + - - Range + + Y2 - + - - Damage Type + + Guild - + + Guilds + + - - Skill Type + + Id - + - - Target + + Members - + - - Implicit Target Range + + Guild Member - + + Guild Members + + - - Target Restriction + + Id - + - - Moves To Target + + Guild Id - + - - Moves Target + + Status - + - - Elemental Modifier Target + + Hero State - + - - Magic Effect Def + + New - + - - Qualified Characters + + Hero - + - - Masters + + Light Hero - + - - Area Skill Settings + + Normal - + - - Damage Type + + Player Kill Warning - + - - None + + Player Killer1st Stage - + - - Physical + + Player Killer2nd Stage - + - - Wizardry - - - + + Hidden At Creation Attribute - - Curse + + Hidden At Creation Attributes - + - - Summoned Monster - - - + + Increasable Item Option - - Fenrir + + Increasable Item Options - + - - All + + Level Type - + - - Skill Type + + Weight - + - - Direct Hit + + Level Dependent Options - + - - Castle Siege Special - - - + + Inventory Constants - - Castle Siege Skill + + Inventory Constants - + - - Area Skill Automatic Hits + + Item - + + Items + + - - Area Skill Explicit Hits + + Item Slot - + - - Area Skill Explicit Target + + Definition - + - - Buff + + Durability - + - - Regeneration + + Level - + - - Passive Boost + + Has Skill - + - - Summon Monster + + Item Options - + - - Other + + Item Set Groups - + - - Skill Target + + Socket Count - + - - Undefined + + Store Price - + - - Explicit + + Pet Experience - + - - Implicit Party + + Item Appearance - + + Item Appearances + + - - Implicit Players In Range + + Item Slot - + - - Implicit Npcs In Range + + Definition - + - - Implicit All In Range + + Level - + - - Explicit With Implicit In Range + + Visible Options - + - - Implicit Player + + Item Base Power Ups - + + Item Base Power Ups + + - - Skill Target Restriction + + Target Attribute - + - - Undefined + + Base Value Element - + - - Self + + Bonus Per Level Table - + - - Party + + Base Value - + - - Player + + Aggregate Type - + - - Item Crafting Result Item + + Item Crafting - - Item Crafting Result Items + + Item Craftings - + - - Items + + Number - + - - Random Minimum Level + + Name - + - - Random Maximum Level + + Item Crafting Handler Class Name - + - - Durability + + Simple Crafting Settings - + - - Reference - - - + + Item Crafting Required Item - - Add Level + + Item Crafting Required Items - + - - Mix Result + + Possible Items - + - - Disappear + + Minimum Item Level - + - - Stays As Is + + Maximum Item Level - + - - Chaos Weapon And First Wings Downgraded Random + + Required Item Options - + - - Third Wings Downgraded Random + + Minimum Amount - + - - Item Set Group - - - Item Set Groups + + Maximum Amount - + - - Name + + Success Result - + - - Always Applies + + Fail Result - + - - Count Distinct + + Npc Price Divisor - + - - Minimum Item Count + + Add Percentage - + - - Set Level + + Reference - + - - Options + + Item Crafting Result Item - + + Item Crafting Result Items + + - + Items - + - - Mini Game Terrain Change - - - Mini Game Terrain Changes + + Random Minimum Level - + - - Terrain Attribute + + Random Maximum Level - + - - Set Terrain Attribute + + Durability - + - - Is Client Update Required + + Reference - + - - Start X + + Add Level - + - - Start Y + + Items - + + Items + + - - End X + + Number - + - - End Y + + Item Slot - + - - Rectangle - - - Rectangles + + Width - + - - X1 + + Height - + - - Y1 + + Drops From Monsters - + - - X2 + + Is Ammunition - + - - Y2 + + Is Bound To Character - + - - Item Of Item Set - - - Item Of Item Sets + + Storage Limit Per Character - + - - Ancient Set Discriminator + + Name - + - - Item Set Group + + Drop Level - + - - Items + + Maximum Item Level - + - - Bonus Option + + Durability - + - - Name + + Group - + - - Quest Monster Kill Requirement - - - Quest Monster Kill Requirements + + Value - + - - Monster + + Pet Experience Formula - + - - Minimum Number + + Consume Effect - + - - Assignable Extensions - - - Assignable Extensions + + Maximum Sockets - + - - Character + + Skill - - Characters - - + - - Id + + Qualified Characters - + - - Name + + Possible Item Set Groups - + - - Character Class + + Possible Item Options - + - - Character Slot + + Requirements - + - - Create Date + + Base Power Up Attributes - + - - Experience + + Drop Items - + - - Master Experience + + Item Drop Effect - + - - Level Up Points + + Undefined - + - - Master Level Up Points + + Fireworks - + - - Current Map + + Christmas Fireworks - + - - Position X + + Fanfare Sound - + - - Position Y + + Swirl - + - - Player Kill Count + + Item Drop Item Group - + + Item Drop Item Groups + + - - State Remaining Seconds + + Source Item Level - + - - State + + Money Amount - + - - Character Status + + Minimum Level - + - - Pose + + Maximum Level - + - - Used Fruit Points + + Required Character Level - + - - Used Neg Fruit Points + + Drop Effect - + - - Inventory Extensions + + Item Extensions - + + Item Extensions + + - - Key Configuration + + Item Level Bonus Table - + + Item Level Bonus Tables + + - - Mu Helper Configuration + + Name - + - - Store Name + + Description - + - - Is Store Opened + + Bonus Per Level - + - - Attributes + + Item Of Item Set - + + Item Of Item Sets + + - - Letters + + Ancient Set Discriminator - + - - Learned Skills + + Item Set Group - + - - Inventory + + Items - + - - Drop Item Groups + + Bonus Option - + - - Quest States + + Name - + - - Hero State + + Item Option - + + Item Options + + - - New + + Number - + - - Hero + + Sub Option Type - + - - Light Hero + + Option Type - + - - Normal + + Power Ups - + - - Player Kill Warning + + Item Option Combination Bonus - + + Item Option Combination Bonus + + - - Player Killer1st Stage + + Description - + - - Player Killer2nd Stage + + Number - + - - Character Status + + Applies Multiple Times - + - - Normal + + Requirements - + - - Banned + + Bonus - + - - Game Master + + Item Options - + + Item Options + + - - Character Pose + + Name - + - - Standing + + Adds Randomly - + - - Sitting + + Add Chance - + - - Leaning + + Maximum Options Per Item - + - - Hanging + + Possible Options - + - - Game Configuration Helper + + Item Option Link - - Game Configuration Helpers + + Item Option Links - + - - Duel Configuration - - - Duel Configurations + + Item Option - + - - Maximum Score + + Level - + - - Entrance Fee + + Index - + - - Minimum Character Level + + Item Option Of Level - + + Item Option Of Levels + + - - Maximum Spectators Per Duel Room + + Level - + - - Exit + + Required Item Level - + - - Duel Areas + + Power Ups - + - - Increasable Item Option + + Item Option Type - - Increasable Item Options + + Item Option Types - + - - Level Type + + Id - + - - Weight + + Name - + - - Level Dependent Options + + Description - + - - Level Type + + Is Visible - + - - Option Level + + Item Option Types - + + Item Option Types + + - - Item Level + + Excellent - + - - Item Options - - - Item Options + + Wing - + - - Name + + Luck - + - - Adds Randomly + + Option - + - - Add Chance + + Harmony Option - + - - Maximum Options Per Item + + Ancient Option - + - - Possible Options + + Ancient Bonus - + - - Mini Game Type + + Guardian Option - + - - Undefined + + Socket Option - + - - Devil Square + + Socket Bonus Option - + - - Blood Castle + + Blue Fenrir - + - - Chaos Castle + + Black Fenrir - + - - Illusion Temple + + Gold Fenrir - + - - Doppelganger + + Dark Horse - + - - Connect Servers + + Item Set Group - - Connect Servers + + Item Set Groups - + - - Id + + Name - + - - Configuration Id - - - - - - Server Id - - - - - - Description - - - - - - Client - - - - - - Disconnect On Unknown Packet - - - - - - Maximum Receive Size - - - - - - Client Listener Port - - - - - - Timeout + + Always Applies - + - - Current Patch Version + + Count Distinct - + - - Patch Address + + Minimum Item Count - + - - Max Connections Per Address + + Set Level - + - - Check Max Connections Per Address + + Options - + - - Max Connections + + Items - + - - Listener Backlog - - - + + Item Slot Type - - Max Ftp Requests + + Item Slot Types - + - - Max Ip Requests + + Description - + - - Max Server List Requests + + Item Slots - + - - Error + + Item Storage - - Errors + + Item Storages - + - - Item - - + Items - + - - Item Slot + + Money - + - - Definition - - - + + Jewel Mix - - Durability + + Jewel Mixs - + - - Level + + Number - + - - Has Skill + + Single Jewel - + - - Item Options + + Mixed Jewel - + - - Item Set Groups + + Kill Target - + - - Socket Count + + Any Object - + - - Store Price + + Any Monster - + - - Pet Experience + + Specific - + @@ -3205,229 +3121,226 @@ - - Mini Game Ranking Entry + + Level Bonus - - Mini Game Ranking Entrys + + Level Bonus - + - - Game Instance Id + + Level - + - - Timestamp + + Additional Value - + - - Score - - - + + Level Dependent Damage - - Rank + + Level Dependent Damages - + - - Character + + Level - + - - Mini Game + + Damage - + - - Character Quest State - - - Character Quest States + + Level Type - + - - Group + + Option Level - + - - Client Action Performed + + Item Level - + - - Last Finished Quest + + Magic Effects - - + + Magic Effects - - Active Quest - - + - - Requirement States + + Number - + - - Gate - - - Gates + + Name - + - - X1 + + Sub Type - + - - Y1 + + Inform Observers - + - - X2 + + Stop By Death - + - - Y2 + + Send Duration - + - - Item Option Type - - - Item Option Types + + Duration - + - - Id + + Power Ups - + - - Name + + Master Skills - + + Master Skills + + - - Description + + Root - + - - Is Visible + + Required Master Skills - + - - Item Crafting Required Item + + Rank - - Item Crafting Required Items + + - + + Maximum Level + + - - Possible Items + + Minimum Level - + - - Minimum Item Level + + Value Formula - + - - Maximum Item Level + + Display Value Formula - + - - Required Item Options + + Target Attribute - + - - Minimum Amount + + Aggregation - + - - Maximum Amount + + Replaced Skill - + - - Success Result + + Extends Duration - + - - Fail Result + + Master Skill Root - + + Master Skill Roots + + - - Npc Price Divisor + + Id - + - - Add Percentage + + Name - + - - Reference + + Member Of Aggregate Attribute - + + Member Of Aggregate Attributes + + @@ -3499,319 +3412,226 @@ - - Kill Target + + Mini Games - + + Mini Games + + - - Any Object + + Type - + - - Any Monster + + Name - + - - Specific + + Description - + - - Account - - - Accounts + + Game Level - + - - Login Name + + Map Creation Policy - + - - Password Hash + + Enter Duration - + - - Security Code + + Game Duration - + - - EMail + + Exit Duration - + - - Language Iso Code + + Maximum Player Count - + - - Chat Ban Until + + Save Ranking Statistics - + - - Unlocked Character Classes + + Requires Master Class - + - - Registration Date + + Minimum Character Level - + - - State + + Maximum Character Level - + - - Time Zone - - - - - - Vault Password - - - - - - Vault - - - - - - Is Vault Extended - - - - - - Is Template - - - - - - Characters - - - - - - Attributes - - - - - - Account State - - - - - - Normal - - - - - - Spectator - - - - - - Game Master - - - - - - Game Master Invisible - - - - - - Banned - - - - - - Temporarily Banned + + Minimum Special Character Level - + - - Quest Item Requirement - - - Quest Item Requirements + + Maximum Special Character Level - + - - Item + + Ticket Item Level - + - - Drop Item Group + + Entrance Fee - + - - Minimum Number + + Are Player Killers Allowed To Enter - + - - Stat Attributes - - - Stat Attributes + + Allow Party - + - - Attribute + + Entrance - + - - Base Value + + Ticket Item - + - - Increasable By Player + + Rewards - + - - Direction + + Spawn Waves - + - - Undefined + + Change Events - + - - West + + Mini Game Map Creation Policy - + - - South West + + One Per Party - + - - South + + One Per Player - + - - South East + + Shared - + - - East - - - + + Mini Game Ranking Entry - - North East + + Mini Game Ranking Entrys - + - - North + + Game Instance Id - + - - North West + + Timestamp - + - - Inventory Constants - - - Inventory Constants + + Score - + - - Level Dependent Damage - - - Level Dependent Damages + + Rank - + - - Level + + Character - + - - Damage + + Mini Game - + @@ -3859,370 +3679,304 @@ - - Mini Game Success Flags + + Mini Game Reward Type - + - - None + + Undefined - + - - Winner + + Money - + - - Winning Party + + Experience - + - - Winner Or In Winning Party + + Experience Per Remaining Seconds - + - - Loser + + Item - + - - Alive + + Item Drop - + - - Dead + + Score - + - - Winner Exists + + Mini Game Spawn Wave - + + Mini Game Spawn Waves + + - - Winner Not Exists + + Wave Number - + - - Skill Combo Step - - - Skill Combo Steps + + Description - + - - Order + + Message - + - - Is Final Step + + Start Time - + - - Skill + + End Time - + - - Combination Bonus Requirement - - - Combination Bonus Requirements + + Mini Game Success Flags - + - - Option Type + + None - + - - Sub Option Type + + Winner - + - - Minimum Count + + Winning Party - + - - Drop Item Group - - - Drop Item Groups + + Winner Or In Winning Party - + - - Description + + Loser - + - - Chance + + Alive - + - - Minimum Monster Level + + Dead - + - - Maximum Monster Level + + Winner Exists - + - - Monster + + Winner Not Exists - + - - Item Level + + Mini Game Terrain Change - + + Mini Game Terrain Changes + + - - Item Type + + Terrain Attribute - + - - Possible Items + + Set Terrain Attribute - + - - Special Item Type + + Is Client Update Required - + - - None + + Start X - + - - Ancient + + Start Y - + - - Excellent + + End X - + - - Random Item + + End Y - + - - Socket Item + + Mini Game Type - + - - Money + + Undefined - + - - Mini Games - - - Mini Games + + Devil Square - + - - Type + + Blood Castle - + - - Name + + Chaos Castle - + - - Description + + Illusion Temple - + - - Game Level + + Doppelganger - + - - Map Creation Policy + + Mix Result - + - - Enter Duration + + Disappear - + - - Game Duration + + Stays As Is - + - - Exit Duration + + Chaos Weapon And First Wings Downgraded Random - + - - Maximum Player Count + + Third Wings Downgraded Random - + - - Save Ranking Statistics - - - - - - Requires Master Class - - - - - - Minimum Character Level - - - - - - Maximum Character Level - - - - - - Minimum Special Character Level - - - - - - Maximum Special Character Level - - - - - - Ticket Item Level - - - - - - Entrance Fee - - - - - - Are Player Killers Allowed To Enter - - - - - - Allow Party - - - + + Model Resource Provider - - Entrance + + Model Resource Providers - + - - Ticket Item - - - + + Monster Attribute - - Rewards + + Monster Attributes - + - - Spawn Waves + + Attributes - + - - Change Events + + Value - + @@ -4354,6 +4108,135 @@ + + Monster Spawn Area + + + Monster Spawn Areas + + + + + + Monsters + + + + + + Game Map + + + + + + X1 + + + + + + Y1 + + + + + + X2 + + + + + + Y2 + + + + + + Direction + + + + + + Quantity + + + + + + Spawn Trigger + + + + + + Wave Number + + + + + + Maximum Health Override + + + + + + Npc Object Kind + + + + + + Monster + + + + + + Passive Npc + + + + + + Guard + + + + + + Trap + + + + + + Gate + + + + + + Statue + + + + + + Soccer Ball + + + + + + Destructible + + + + Npc Window @@ -4534,409 +4417,463 @@ - - Npc Object Kind + + Power Ups - + + Power Ups + + - - Monster + + Target Attribute - + - - Passive Npc + + Boost - + - - Guard + + Power Ups Value - + + Power Ups Values + + - - Trap + + Constant Value - + - - Gate + + Related Values - + - - Statue + + Quests - + + Quests + + - - Soccer Ball + + Quest Giver - + - - Destructible + + Name - + - - Monster Spawn Area - - - Monster Spawn Areas + + Group - + - - Monsters + + Number - + - - Game Map + + Starting Number - + - - X1 + + Refuse Number - + - - Y1 + + Repeatable - + - - X2 + + Requires Client Action - + - - Y2 + + Required Start Money - + - - Direction + + Minimum Character Level - + - - Quantity + + Maximum Character Level - + - - Spawn Trigger + + Qualified Character - + - - Wave Number + + Required Monster Kills - + - - Maximum Health Override + + Required Items - + - - Spawn Trigger + + Rewards - + - - Automatic + + Quest Item Requirement - + + Quest Item Requirements + + - - Automatic During Event + + Item - + - - Once At Event Start + + Drop Item Group - + - - Automatic During Wave + + Minimum Number - + - - Once At Wave Start + + Quest Monster Kill Requirement - + + Quest Monster Kill Requirements + + - - Manually For Event + + Monster - + - - Wandering + + Minimum Number - + - - System Configuration + + Quest Monster Kill Requirement State - - System Configurations + + Quest Monster Kill Requirement States - + - - Ip Resolver + + Requirement - + - - Ip Resolver Parameter + + Kill Count - + - - Auto Start + + Quest Reward - + + Quest Rewards + + - - Auto Update Schema + + Reward Type - + - - Read Console Input + + Value - + - - Item Slot Type + + Item Reward - - Item Slot Types + + - + + Attribute Reward + + - - Description + + Skill Reward - + - - Item Slots + + Quest Reward Type - + - - Skill Combos + + Undefined - - Skill Combos + + - + + Experience + + - - Name + + Money - + - - Maximum Completion Time + + Item - + - - Steps + + Gens Attribution - + - - Model Resource Provider + + Level Up Points - - Model Resource Providers + + - + + Character Evolution First To Second + + - - Guild Member + + Character Evolution Second To Third - - Guild Members + + - + + Attribute + + - - Id + + Skill - + - - Guild Id + + Rectangle - + + Rectangles + + - - Status + + X1 - + - - Item Extensions + + Y1 - - Item Extensions + + - + + X2 + + - - Power Ups Value + + Y2 - - Power Ups Values + + - + + Resources + + + Resources + + - - Constant Value + + Resource Manager - + - - Related Values + + Culture - + - - Mini Game Map Creation Policy + + System Configuration_Auto Start_Description - + - - One Per Party + + System Configuration_Auto Start_Name - + - - One Per Player + + System Configuration_Auto Update Schema_Description - + - - Shared + + System Configuration_Auto Update Schema_Name - + - - Attribute Requirement + + System Configuration_Description - - Attribute Requirements + + - + + System Configuration_Ip Resolver_Description + + - - Attribute + + System Configuration_Ip Resolver_Name - + - - Minimum Value + + System Configuration_Ip Resolver Parameter_Description - + - - Chat Server Endpoint + + System Configuration_Ip Resolver Parameter_Name - - Chat Server Endpoints + + - + + System Configuration_Name + + - - Quest Monster Kill Requirement State + + System Configuration_Read Console Input_Description + + + + + + System Configuration_Read Console Input_Name + + + - - Quest Monster Kill Requirement States + + Result Item Selection - + - - Requirement + + Any - + - - Kill Count + + All - + @@ -4960,670 +4897,733 @@ - - Exit Gate + + Simple Crafting Settings - - Exit Gates + + Simple Crafting Settings - + - - Direction + + Money - + - - Map + + Money Per Final Success Percentage - + - - Is Spawn Gate + + Npc Price Divisor - + - - Item Option Combination Bonus + + Success Percent - - Item Option Combination Bonus + + - + + Maximum Success Percent + + - - Description + + Multiple Allowed - + - - Number + + Required Items - + - - Applies Multiple Times + + Result Items - + - - Requirements + + Result Item Select - + - - Bonus + + Success Percentage Addition For Luck - + - - Item Drop Item Group + + Success Percentage Addition For Excellent Item - - Item Drop Item Groups + + - + + Success Percentage Addition For Ancient Item + + - - Source Item Level + + Success Percentage Addition For Guardian Item - + - - Money Amount + + Success Percentage Addition For Socket Item - + - - Minimum Level + + Result Item Luck Option Chance - + - - Maximum Level + + Result Item Skill Chance - + - - Required Character Level + + Result Item Excellent Option Chance - + - - Drop Effect + + Result Item Max Exc Option Count - + - - Item Drop Effect + + Skill - + + Skills + + - - Undefined + + Number - + - - Fireworks + + Name - + - - Christmas Fireworks + + Attack Damage - + - - Fanfare Sound + + Requirements - + - - Swirl + + Consume Requirements - + - - Area Skill Settings + + Attribute Relationships - - Area Skill Settings + + - + + Range + + - - Use Frustum Filter + + Damage Type - + - - Frustum Start Width + + Skill Type - + - - Frustum End Width + + Target - + - - Frustum Distance + + Implicit Target Range - + + + + + Target Restriction + + + + + + Moves To Target + + + + + + Moves Target + + + + + + Elemental Modifier Target + + + + + + Magic Effect Def + + + + + + Qualified Characters + + + + + + Masters + + - - Use Target Area Filter + + Area Skill Settings - + - - Target Area Diameter + + Skill Combos - + + Skill Combos + + - - Use Deferred Hits + + Name - + - - Delay Per One Distance + + Maximum Completion Time - + - - Delay Between Hits + + Steps - + - - Minimum Number Of Hits Per Target + + Skill Combo Step - + + Skill Combo Steps + + - - Maximum Number Of Hits Per Target + + Order - + - - Maximum Number Of Hits Per Attack + + Is Final Step - + - - Hit Chance Per Distance Multiplier + + Skill - + - - Chat Servers + + Skill Entry - - Chat Servers + + Skill Entrys - + - - Server Id + + Skill - + - - Description + + Level - + - - Maximum Connections + + Power Ups - + - - Client Timeout + + Power Up Duration - + - - Client Clean Up Interval + + Attributes - + - - Room Clean Up Interval + + Skill Target - + - - Endpoints + + Undefined - + - - Mini Game Reward Type + + Explicit - + - - Undefined + + Implicit Party - + - - Money + + Implicit Players In Range - + - - Experience + + Implicit Npcs In Range - + - - Experience Per Remaining Seconds + + Implicit All In Range - + - - Item + + Explicit With Implicit In Range - + - - Item Drop + + Implicit Player - + - - Score + + Skill Target Restriction - + - - Game Servers - - - Game Servers + + Undefined - + - - Server ID + + Self - + - - Description + + Party - + - - Experience Rate + + Player - + - - Pvp Enabled + + Skill Type - + - - Server Configuration + + Direct Hit - + - - Game Configuration + + Castle Siege Special - + - - Endpoints + + Castle Siege Skill - + - - Master Skill Root + + Area Skill Automatic Hits - - Master Skill Roots + + - + + Area Skill Explicit Hits + + - - Id + + Area Skill Explicit Target - + - - Name + + Buff - + - - Configuration Update + + Regeneration - - Configuration Updates + + - + + Passive Boost + + - - Version + + Summon Monster - + - - Name + + Other - + - - Description + + Spawn Trigger - + - - Created At + + Automatic - + - - Installed At + + Automatic During Event - + - - Battle Type + + Once At Event Start - + - - Normal + + Automatic During Wave - + - - Soccer + + Once At Wave Start - + - - Mini Game Spawn Wave - - - Mini Game Spawn Waves + + Manually For Event - + - - Wave Number + + Wandering - + - - Description + + Special Item Type - + - - Message + + None - + - - Start Time + + Ancient - + - - End Time + + Excellent - + - - Resources - - - Resources + + Random Item - + - - Resource Manager + + Socket Item - + - - Culture + + Money - + - - System Configuration_Auto Start_Description + + Stat Attributes - + + Stat Attributes + + - - System Configuration_Auto Start_Name + + Attribute - + - - System Configuration_Auto Update Schema_Description + + Base Value - + - - System Configuration_Auto Update Schema_Name + + Increasable By Player - + - - System Configuration_Description + + System Configuration - + + System Configurations + + - - System Configuration_Ip Resolver_Description + + Ip Resolver - + - - System Configuration_Ip Resolver_Name + + Ip Resolver Parameter - + - - System Configuration_Ip Resolver Parameter_Description + + Auto Start - + - - System Configuration_Ip Resolver Parameter_Name + + Auto Update Schema - + - - System Configuration_Name + + Read Console Input - + - - System Configuration_Read Console Input_Description + + Terrain Attribute Type - + - - System Configuration_Read Console Input_Name + + Safezone - + - - Duel Area - - - Duel Areas + + Character - + - - Index + + Blocked - + - - First Player Gate + + No Ground - + - - Second Player Gate + + Water - + - - Spectators Gate + + Transient Attribute - + + Transient Attributes + + - - Quest Reward + + Warp Info - - Quest Rewards + + Warp Infos - + - - Reward Type + + Index - + - - Value + + Name - + - - Item Reward + + Costs - + - - Attribute Reward + + Level Requirement - + - - Skill Reward + + Gate - + diff --git a/src/SourceGenerators/ResourceGenerator.cs b/src/SourceGenerators/ResourceGenerator.cs index c111662b9..86eca77a3 100644 --- a/src/SourceGenerators/ResourceGenerator.cs +++ b/src/SourceGenerators/ResourceGenerator.cs @@ -2,16 +2,14 @@ // Licensed under the MIT License. See LICENSE file in the project root for full license information. // -using System.IO; - namespace MUnique.OpenMU.SourceGenerators; +using System.Diagnostics; +using System.IO; +using System.Text.RegularExpressions; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CSharp; using Microsoft.CodeAnalysis.CSharp.Syntax; -using System.Diagnostics; -using System.Reflection; -using System.Text.RegularExpressions; /// /// A which creates resource strings for all classes and properties of @@ -39,6 +37,8 @@ public void Execute(GeneratorExecutionContext context) //// Debugger.Launch(); } + var declaredTypes = new List<(BaseTypeDeclarationSyntax, INamedTypeSymbol)>(); + var sb = this.StartResourceFile(); foreach (SyntaxTree tree in context.Compilation.SyntaxTrees) { @@ -46,7 +46,8 @@ public void Execute(GeneratorExecutionContext context) foreach (var declaredClass in tree .GetRoot() .DescendantNodes() - .OfType()) + .OfType() + .OrderBy(c => c.Identifier.Text)) { var declaredClassSymbol = semanticModel.GetDeclaredSymbol(declaredClass); if (declaredClassSymbol is null) @@ -54,13 +55,14 @@ public void Execute(GeneratorExecutionContext context) continue; } - this.AppendResourceStrings(sb, declaredClass, declaredClassSymbol); + declaredTypes.Add((declaredClass, declaredClassSymbol)); } foreach (var declaredClass in tree .GetRoot() .DescendantNodes() - .OfType()) + .OfType() + .OrderBy(c => c.Identifier.Text)) { var declaredClassSymbol = semanticModel.GetDeclaredSymbol(declaredClass); if (declaredClassSymbol is null) @@ -68,10 +70,16 @@ public void Execute(GeneratorExecutionContext context) continue; } - this.AppendResourceStrings(sb, declaredClass, declaredClassSymbol); + declaredTypes.Add((declaredClass, declaredClassSymbol)); } } + foreach (var (declarationSyntax, namedTypeSymbol) in declaredTypes + .OrderBy(tuple => tuple.Item1.Identifier.Text)) + { + this.AppendResourceStrings(sb, declarationSyntax, namedTypeSymbol); + } + sb.AppendLine(""); if (context.AnalyzerConfigOptions.GlobalOptions.TryGetValue("build_property.projectdir", out var projectDir)) @@ -106,6 +114,19 @@ private StringBuilder StartResourceFile() return sb; } + private void AppendResourceStrings(StringBuilder sb, BaseTypeDeclarationSyntax annotatedClass, INamedTypeSymbol declaredClassSymbol) + { + switch (annotatedClass) + { + case ClassDeclarationSyntax classDecl: + this.AppendResourceStrings(sb, classDecl, declaredClassSymbol); + break; + case EnumDeclarationSyntax enumDecl: + this.AppendResourceStrings(sb, enumDecl, declaredClassSymbol); + break; + } + } + private void AppendResourceStrings(StringBuilder sb, ClassDeclarationSyntax annotatedClass, INamedTypeSymbol declaredClassSymbol) { var className = annotatedClass.Identifier.Text; From 2d4ad28f2369b75933cc417aff36cc5a75aa3fad Mon Sep 17 00:00:00 2001 From: sven-n Date: Thu, 18 Dec 2025 21:23:29 +0100 Subject: [PATCH 06/32] Localized a player message --- src/GameLogic/PlugIns/ChatCommands/BanCharChatCommandPlugIn.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/GameLogic/PlugIns/ChatCommands/BanCharChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/BanCharChatCommandPlugIn.cs index 3e343109d..154325938 100644 --- a/src/GameLogic/PlugIns/ChatCommands/BanCharChatCommandPlugIn.cs +++ b/src/GameLogic/PlugIns/ChatCommands/BanCharChatCommandPlugIn.cs @@ -30,6 +30,6 @@ protected override async ValueTask DoHandleCommandAsync(Player gameMaster, BanCh { await this.ChangeAccountStateByCharacterNameAsync(gameMaster, arguments.CharacterName ?? string.Empty, AccountState.Banned).ConfigureAwait(false); - await this.ShowMessageToAsync(gameMaster, $"[{this.Key}] Account from {arguments.CharacterName} has been banned.").ConfigureAwait(false); + await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.AccountOfHasBeenBanned), this.Key, arguments.CharacterName).ConfigureAwait(false); } } \ No newline at end of file From 7e5144028fd172ff60c436c718e3d270be9c8b72 Mon Sep 17 00:00:00 2001 From: sven-n Date: Thu, 18 Dec 2025 21:27:45 +0100 Subject: [PATCH 07/32] Added resource strings in the admin panel --- src/GameLogic/MiniGames/MiniGameContext.cs | 4 +- .../ConnectServerConfiguration.razor | 80 ++ .../ConnectServerConfiguration.razor.cs | 3 +- .../ConnectServerConfigurationViewItem.cs | 2 +- .../ConnectServerConfiguration.razor | 79 -- .../Components/ExitGatePicker.razor | 16 +- .../Components/Form/FieldLabel.razor | 19 +- src/Web/AdminPanel/Components/Install.razor | 27 +- .../Components/ItemEdit/ItemEdit.razor | 11 +- .../Components/ItemEdit/ItemEdit.razor.cs | 4 +- .../{ViewModel.cs => ItemViewModel.cs} | 6 +- .../Components/ItemEdit/SocketViewModel.cs | 3 +- src/Web/AdminPanel/Components/MapEditor.razor | 32 +- .../AdminPanel/Components/MapEditor.razor.cs | 2 +- .../AdminPanel/Components/ModalQuestion.razor | 7 +- .../PlugInExtensionPointSelection.razor | 2 +- .../AdminPanel/Components/ServerItem.razor | 47 +- .../Components/TotalOnlineCounter.razor | 5 +- .../MUnique.OpenMU.Web.AdminPanel.csproj | 28 +- src/Web/AdminPanel/Pages/Accounts.razor | 25 +- src/Web/AdminPanel/Pages/AdminUsers.razor | 23 +- .../Pages/CreateConnectServerConfig.razor | 13 +- .../Pages/CreateConnectServerConfig.razor.cs | 17 +- .../Pages/CreateGameServerConfig.razor | 13 +- .../Pages/CreateGameServerConfig.razor.cs | 21 +- src/Web/AdminPanel/Pages/EditBase.cs | 16 +- src/Web/AdminPanel/Pages/EditConfig.cs | 3 +- src/Web/AdminPanel/Pages/EditConfigGrid.razor | 22 +- .../AdminPanel/Pages/EditConnectionServer.cs | 2 +- src/Web/AdminPanel/Pages/EditMap.cs | 11 +- src/Web/AdminPanel/Pages/Error.razor | 16 +- src/Web/AdminPanel/Pages/GameServer.razor | 5 +- src/Web/AdminPanel/Pages/Index.razor | 8 +- src/Web/AdminPanel/Pages/LogFiles.razor | 11 +- src/Web/AdminPanel/Pages/LoggedIn.razor | 11 +- src/Web/AdminPanel/Pages/MapPage.razor | 7 +- src/Web/AdminPanel/Pages/Merchants.razor | 20 +- src/Web/AdminPanel/Pages/Merchants.razor.cs | 11 +- src/Web/AdminPanel/Pages/Plugins.razor | 19 +- src/Web/AdminPanel/Pages/Servers.razor | 26 +- src/Web/AdminPanel/Pages/Setup.razor | 25 +- src/Web/AdminPanel/Pages/Setup.razor.cs | 3 +- src/Web/AdminPanel/Pages/Updates.razor | 29 +- src/Web/AdminPanel/Pages/_Host.cshtml | 6 +- .../Properties/Resources.Designer.cs | 1263 +++++++++++++++++ src/Web/AdminPanel/Properties/Resources.resx | 502 +++++++ src/Web/Map/Components/Map.razor | 4 +- src/Web/Map/Components/MapCard.razor | 8 +- src/Web/Map/Components/MapCards.razor | 4 +- src/Web/Map/Components/MapList.razor | 10 +- src/Web/Map/Components/MapPlayerList.razor | 13 +- src/Web/Map/MUnique.OpenMU.Web.Map.csproj | 19 +- src/Web/Map/Properties/Resources.Designer.cs | 225 +++ src/Web/Map/Properties/Resources.resx | 174 +++ src/Web/Map/Shared/MainLayout.razor | 5 +- src/Web/Map/Shared/NavMenu.razor | 5 +- 56 files changed, 2605 insertions(+), 367 deletions(-) create mode 100644 src/Web/AdminPanel/Components/ConnectServer/ConnectServerConfiguration.razor rename src/Web/AdminPanel/Components/{ => ConnectServer}/ConnectServerConfiguration.razor.cs (93%) rename src/Web/AdminPanel/{Models => Components/ConnectServer}/ConnectServerConfigurationViewItem.cs (98%) delete mode 100644 src/Web/AdminPanel/Components/ConnectServerConfiguration.razor rename src/Web/AdminPanel/Components/ItemEdit/{ViewModel.cs => ItemViewModel.cs} (99%) create mode 100644 src/Web/AdminPanel/Properties/Resources.Designer.cs create mode 100644 src/Web/AdminPanel/Properties/Resources.resx create mode 100644 src/Web/Map/Properties/Resources.Designer.cs create mode 100644 src/Web/Map/Properties/Resources.resx diff --git a/src/GameLogic/MiniGames/MiniGameContext.cs b/src/GameLogic/MiniGames/MiniGameContext.cs index cef1142b1..1cc38f74d 100644 --- a/src/GameLogic/MiniGames/MiniGameContext.cs +++ b/src/GameLogic/MiniGames/MiniGameContext.cs @@ -535,7 +535,7 @@ protected async ValueTask SaveRankingAsync(IEnumerable<(int Rank, Character Char case MiniGameRewardType.Money: if (!player.TryAddMoney(reward.RewardAmount)) { - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.AwardMoneyFailByFullInventory)).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.AwardMoneyFailByFullInventory)).ConfigureAwait(false); } return (0, reward.RewardAmount); @@ -1020,7 +1020,7 @@ private async ValueTask AreEquippedItemsAllowedAsync(Player player) { if (!this.IsItemAllowedToEquip(item)) { - await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CantEnterEventWithItem), item.Definition?.Name ?? item.ToString()).ConfigureAwait(false); + await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CantEnterEventWithItem), item.Definition?.Name ?? item.ToString()).ConfigureAwait(false); result = false; } } diff --git a/src/Web/AdminPanel/Components/ConnectServer/ConnectServerConfiguration.razor b/src/Web/AdminPanel/Components/ConnectServer/ConnectServerConfiguration.razor new file mode 100644 index 000000000..f32b3ec64 --- /dev/null +++ b/src/Web/AdminPanel/Components/ConnectServer/ConnectServerConfiguration.razor @@ -0,0 +1,80 @@ +@using MUnique.OpenMU.DataModel +@using MUnique.OpenMU.Web.AdminPanel.Properties +@using MUnique.OpenMU.DataModel.Configuration + +@if (this.Configuration is null) +{ + @Resources.Loading +} +else +{ + + + + + +
+ +
+
+ @Resources.MajorVersion +
+ + +
+
+
+ @Resources.MinorVersion +
+ + +
+
+
+ @Resources.Patch +
+ + +
+
+
+ +
+
+ ftp:// +
+ +
+
+ + +
+ +
+
+ + + +
+ + +
+
+ + + + + + + + +
+ + @if (this.OnCancel != null) + { + + } +
+ +
+} \ No newline at end of file diff --git a/src/Web/AdminPanel/Components/ConnectServerConfiguration.razor.cs b/src/Web/AdminPanel/Components/ConnectServer/ConnectServerConfiguration.razor.cs similarity index 93% rename from src/Web/AdminPanel/Components/ConnectServerConfiguration.razor.cs rename to src/Web/AdminPanel/Components/ConnectServer/ConnectServerConfiguration.razor.cs index 6d9e346f5..df0ea5e49 100644 --- a/src/Web/AdminPanel/Components/ConnectServerConfiguration.razor.cs +++ b/src/Web/AdminPanel/Components/ConnectServer/ConnectServerConfiguration.razor.cs @@ -2,12 +2,11 @@ // Licensed under the MIT License. See LICENSE file in the project root for full license information. // -namespace MUnique.OpenMU.Web.AdminPanel.Components; +namespace MUnique.OpenMU.Web.AdminPanel.Components.ConnectServer; using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components.Forms; using MUnique.OpenMU.DataModel.Configuration; -using MUnique.OpenMU.Web.AdminPanel.Models; /// /// Edit component for the . diff --git a/src/Web/AdminPanel/Models/ConnectServerConfigurationViewItem.cs b/src/Web/AdminPanel/Components/ConnectServer/ConnectServerConfigurationViewItem.cs similarity index 98% rename from src/Web/AdminPanel/Models/ConnectServerConfigurationViewItem.cs rename to src/Web/AdminPanel/Components/ConnectServer/ConnectServerConfigurationViewItem.cs index ab1ebff37..3f53a983d 100644 --- a/src/Web/AdminPanel/Models/ConnectServerConfigurationViewItem.cs +++ b/src/Web/AdminPanel/Components/ConnectServer/ConnectServerConfigurationViewItem.cs @@ -2,7 +2,7 @@ // Licensed under the MIT License. See LICENSE file in the project root for full license information. // -namespace MUnique.OpenMU.Web.AdminPanel.Models; +namespace MUnique.OpenMU.Web.AdminPanel.Components.ConnectServer; using System.ComponentModel; using System.ComponentModel.DataAnnotations; diff --git a/src/Web/AdminPanel/Components/ConnectServerConfiguration.razor b/src/Web/AdminPanel/Components/ConnectServerConfiguration.razor deleted file mode 100644 index 4368167a3..000000000 --- a/src/Web/AdminPanel/Components/ConnectServerConfiguration.razor +++ /dev/null @@ -1,79 +0,0 @@ -@using MUnique.OpenMU.Web.AdminPanel.Services -@using MUnique.OpenMU.DataModel.Configuration - -@if (this.Configuration is null) -{ - Loading ... -} -else -{ - - - - - -
- -
-
- Major -
- - -
-
-
- Minor -
- - -
-
-
- Patch -
- - -
-
-
- -
-
- ftp:// -
- -
-
- - -
- -
-
- - - -
- - -
-
- - - - - - - - -
- - @if (this.OnCancel != null) - { - - } -
- -
-} \ No newline at end of file diff --git a/src/Web/AdminPanel/Components/ExitGatePicker.razor b/src/Web/AdminPanel/Components/ExitGatePicker.razor index 347e6892f..f55721ea6 100644 --- a/src/Web/AdminPanel/Components/ExitGatePicker.razor +++ b/src/Web/AdminPanel/Components/ExitGatePicker.razor @@ -1,36 +1,38 @@ -@using MUnique.OpenMU.DataModel.Configuration +@using MUnique.OpenMU.DataModel +@using MUnique.OpenMU.DataModel.Configuration @using MUnique.OpenMU.Persistence +@using MUnique.OpenMU.Web.AdminPanel.Properties
- Target: + @Resources.Target:
@if (!this._maps.Any()) {
- Loading... + @Resources.Loading
} else {
- @foreach (var map in this._maps) { - + }
@if (this.Map?.ExitGates.Any() ?? false) {
- @foreach (var gate in this.Map?.ExitGates ?? []) { - + }
diff --git a/src/Web/AdminPanel/Components/Form/FieldLabel.razor b/src/Web/AdminPanel/Components/Form/FieldLabel.razor index 6195c66ca..1488534c3 100644 --- a/src/Web/AdminPanel/Components/Form/FieldLabel.razor +++ b/src/Web/AdminPanel/Components/Form/FieldLabel.razor @@ -1,6 +1,6 @@ -@using System.ComponentModel.DataAnnotations -@using System.Linq.Expressions -@using System.Reflection +@using System.Linq.Expressions +@using MUnique.OpenMU.DataModel +@using MUnique.OpenMU.DataModel.Properties @typeparam TValue @if (!string.IsNullOrWhiteSpace(this._actualLabel)) @@ -39,11 +39,12 @@ { base.OnParametersSet(); this._fieldIdentifier = FieldIdentifier.Create(this.ValueExpression); - var property = this._fieldIdentifier.Model.GetType().GetProperty(this._fieldIdentifier.FieldName); - var displayAttribute = property?.GetCustomAttribute(); - this._actualLabel = (string.IsNullOrWhiteSpace(this.Text) ? null : this.Text) - ?? displayAttribute?.GetName() - ?? CaptionHelper.SeparateWords(this._fieldIdentifier.FieldName); - this._description = displayAttribute?.GetDescription(); + var type = this._fieldIdentifier.Model.GetType(); + var property = type.GetProperty(this._fieldIdentifier.FieldName); + if (property is not null) + { + this._actualLabel = type.GetPropertyCaption(property.Name); + this._description = type.GetPropertyDescription(property.Name); + } } } diff --git a/src/Web/AdminPanel/Components/Install.razor b/src/Web/AdminPanel/Components/Install.razor index 389730349..f80f51c92 100644 --- a/src/Web/AdminPanel/Components/Install.razor +++ b/src/Web/AdminPanel/Components/Install.razor @@ -1,33 +1,34 @@ -
+@using MUnique.OpenMU.Web.AdminPanel.Properties +
@if (this.SelectedVersion is null) { - Loading ... + @Resources.Loading } else if (this.IsInstalling) { - Installing, please wait ... + @Resources.InstallingPleaseWait } else if (this.IsInstalled) { -

Finished! Have fun :)

+

@Resources.FinishedHaveFun

if (!AdminPanelEnvironment.IsHostingEmbedded) { -

Please restart the connect and game server containers.

+

@Resources.PleaseRestartTheConnectAndGameServerContainers

} - + } else { if (this.CurrentConnections > 0) { }

-

Select the game version

+

@Resources.SelectTheGameVersion

@foreach (var initializer in this.SetupService.Versions) @@ -40,18 +41,18 @@ else

-

How many game servers do you want?

+

@Resources.HowManyGameServersQuestion

-

Do you want test accounts?

+

@Resources.TestAccountsQuestion

@@ -59,11 +60,11 @@ else

@if (this.CurrentConnections == 0) { - + } else { - + }

} diff --git a/src/Web/AdminPanel/Components/ItemEdit/ItemEdit.razor b/src/Web/AdminPanel/Components/ItemEdit/ItemEdit.razor index 57e5bc8c7..9bf46e6d7 100644 --- a/src/Web/AdminPanel/Components/ItemEdit/ItemEdit.razor +++ b/src/Web/AdminPanel/Components/ItemEdit/ItemEdit.razor @@ -1,6 +1,7 @@ @using MUnique.OpenMU.DataModel @using MUnique.OpenMU.DataModel.Configuration.Items @using MUnique.OpenMU.GameLogic +@using MUnique.OpenMU.Web.AdminPanel.Properties @using MUnique.OpenMU.Web.AdminPanel.Services @if (this._viewModel is null) @@ -52,9 +53,9 @@ @if (this._viewModel.AncientBonus is { } ancientBonus) {
- + - Bonus: @ancientBonus + @MUnique.OpenMU.Web.AdminPanel.Properties.Resources.Bonus: @ancientBonus
} } @@ -165,7 +166,7 @@ + Label="@(Resources.OptionLevel + ":")" @bind-Value="socket.Level" /> } else { @@ -189,12 +190,12 @@ { + ExplicitLookupController="@(new EnumerableLookupController(ItemViewModel.FenrirOptions))" /> } @if (this._viewModel.PossibleGuardianOption is { }) { - + } diff --git a/src/Web/AdminPanel/Components/ItemEdit/ItemEdit.razor.cs b/src/Web/AdminPanel/Components/ItemEdit/ItemEdit.razor.cs index 7525ad5a5..5c3f54638 100644 --- a/src/Web/AdminPanel/Components/ItemEdit/ItemEdit.razor.cs +++ b/src/Web/AdminPanel/Components/ItemEdit/ItemEdit.razor.cs @@ -18,7 +18,7 @@ namespace MUnique.OpenMU.Web.AdminPanel.Components.ItemEdit; ///
public sealed partial class ItemEdit : IDisposable { - private ViewModel? _viewModel; + private ItemViewModel? _viewModel; /// /// Gets or sets the item. @@ -70,7 +70,7 @@ protected override void OnParametersSet() oldModel.PropertyChanged -= this.OnItemPropertyChanged; } - this._viewModel = new ViewModel(this.Item, this.PersistenceContext); + this._viewModel = new ItemViewModel(this.Item, this.PersistenceContext); this._viewModel.PropertyChanged += this.OnItemPropertyChanged; base.OnParametersSet(); } diff --git a/src/Web/AdminPanel/Components/ItemEdit/ViewModel.cs b/src/Web/AdminPanel/Components/ItemEdit/ItemViewModel.cs similarity index 99% rename from src/Web/AdminPanel/Components/ItemEdit/ViewModel.cs rename to src/Web/AdminPanel/Components/ItemEdit/ItemViewModel.cs index b99c74402..38a6f8d57 100644 --- a/src/Web/AdminPanel/Components/ItemEdit/ViewModel.cs +++ b/src/Web/AdminPanel/Components/ItemEdit/ItemViewModel.cs @@ -17,16 +17,16 @@ namespace MUnique.OpenMU.Web.AdminPanel.Components.ItemEdit; /// /// The view model for an . /// -public class ViewModel : INotifyPropertyChanged +public class ItemViewModel : INotifyPropertyChanged { private readonly IContext _persistenceContext; /// - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// /// The item. /// The persistence context. - public ViewModel(Item item, IContext persistenceContext) + public ItemViewModel(Item item, IContext persistenceContext) { this._persistenceContext = persistenceContext ?? throw new ArgumentNullException(nameof(persistenceContext)); this.Item = item ?? throw new ArgumentNullException(nameof(item)); diff --git a/src/Web/AdminPanel/Components/ItemEdit/SocketViewModel.cs b/src/Web/AdminPanel/Components/ItemEdit/SocketViewModel.cs index 64fefeef9..e294d40f5 100644 --- a/src/Web/AdminPanel/Components/ItemEdit/SocketViewModel.cs +++ b/src/Web/AdminPanel/Components/ItemEdit/SocketViewModel.cs @@ -7,6 +7,7 @@ namespace MUnique.OpenMU.Web.AdminPanel.Components.ItemEdit; using MUnique.OpenMU.DataModel.Configuration.Items; using MUnique.OpenMU.DataModel.Entities; using MUnique.OpenMU.Persistence; +using MUnique.OpenMU.Web.AdminPanel.Properties; using Nito.AsyncEx.Synchronous; /// @@ -66,7 +67,7 @@ public int Level /// /// Gets the field caption for the socket. /// - public string Caption => $"Socket {this.SocketIndex + 1}:"; + public string Caption => string.Format(Resources.SocketNumber, this.SocketIndex + 1) + ":"; /// /// Gets or sets the option. diff --git a/src/Web/AdminPanel/Components/MapEditor.razor b/src/Web/AdminPanel/Components/MapEditor.razor index 1bfde2453..13e2e849d 100644 --- a/src/Web/AdminPanel/Components/MapEditor.razor +++ b/src/Web/AdminPanel/Components/MapEditor.razor @@ -1,5 +1,7 @@ -@using MUnique.OpenMU.DataModel.Configuration +@using MUnique.OpenMU.DataModel +@using MUnique.OpenMU.DataModel.Configuration @using MUnique.OpenMU.Persistence +@using MUnique.OpenMU.Web.AdminPanel.Properties @using SixLabors.ImageSharp @using SixLabors.ImageSharp.Formats.Png @@ -11,28 +13,28 @@

@this.SelectedMap.Name

- +
-