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/Dapr/Common/DaprService.cs b/src/Dapr/Common/DaprService.cs
index 865f0868f..5af73ccf1 100644
--- a/src/Dapr/Common/DaprService.cs
+++ b/src/Dapr/Common/DaprService.cs
@@ -9,10 +9,13 @@ namespace MUnique.OpenMU.Dapr.Common;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.OpenApi.Models;
+using MUnique.OpenMU.Interfaces;
+using MUnique.OpenMU.Persistence.EntityFramework;
+using MUnique.OpenMU.Persistence.EntityFramework.Json;
+using MUnique.OpenMU.PlugIns;
using OpenTelemetry.Logs;
using OpenTelemetry.Resources;
using OpenTelemetry.Trace;
-using MUnique.OpenMU.Persistence.EntityFramework;
///
/// Helper class to create an which predefined common
@@ -30,6 +33,9 @@ public static class DaprService
///
public static WebApplicationBuilder CreateBuilder(string serviceName, string[] args)
{
+ JsonConverterRegistry.RegisterConverter(new LocalizedStringJsonConverter());
+ JsonConverterRegistry.RegisterConverter(new BinaryAsHexJsonConverter());
+
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.UseUrls($"http://*:8080");
diff --git a/src/DataModel/Attributes/PowerUpDefinition.cs b/src/DataModel/Attributes/PowerUpDefinition.cs
index dcdcd4536..0c08883cf 100644
--- a/src/DataModel/Attributes/PowerUpDefinition.cs
+++ b/src/DataModel/Attributes/PowerUpDefinition.cs
@@ -38,11 +38,11 @@ public override string ToString()
var relation = this.Boost.RelatedValues.First();
if (relation.InputOperator == InputOperator.ExponentiateByAttribute)
{
- value = relation.InputOperand + relation.InputOperator.AsString() + relation.InputAttribute?.Designation;
+ value = relation.InputOperand + relation.InputOperator.AsString() + new LocalizedString(relation.InputAttribute?.Designation).ToString();
}
else
{
- value = relation.InputAttribute?.Designation + relation.InputOperator.AsString() + relation.InputOperand;
+ value = new LocalizedString(relation.InputAttribute?.Designation).ToString() + relation.InputOperator.AsString() + relation.InputOperand;
}
}
else
@@ -51,6 +51,6 @@ public override string ToString()
value = "0";
}
- return value + " " + this.TargetAttribute?.Designation;
+ return value + " " + new LocalizedString(this.TargetAttribute?.Designation).ToString();
}
}
\ No newline at end of file
diff --git a/src/DataModel/Configuration/CharacterClass.cs b/src/DataModel/Configuration/CharacterClass.cs
index ab499c288..d6c321c1e 100644
--- a/src/DataModel/Configuration/CharacterClass.cs
+++ b/src/DataModel/Configuration/CharacterClass.cs
@@ -7,6 +7,7 @@ namespace MUnique.OpenMU.DataModel.Configuration;
using MUnique.OpenMU.Annotations;
using MUnique.OpenMU.AttributeSystem;
using MUnique.OpenMU.DataModel.Entities;
+using MUnique.OpenMU.Interfaces;
///
/// Defines a character class.
@@ -24,7 +25,7 @@ public partial class CharacterClass
///
/// Gets or sets the name of the character class.
///
- public string Name { get; set; } = string.Empty;
+ public LocalizedString Name { get; set; }
///
/// Gets or sets a value indicating whether this character class can get created by the user.
diff --git a/src/DataModel/Configuration/ConfigurationUpdate.cs b/src/DataModel/Configuration/ConfigurationUpdate.cs
index 6e6b7675e..b4bd3beab 100644
--- a/src/DataModel/Configuration/ConfigurationUpdate.cs
+++ b/src/DataModel/Configuration/ConfigurationUpdate.cs
@@ -4,6 +4,8 @@
namespace MUnique.OpenMU.DataModel.Configuration;
+using MUnique.OpenMU.Interfaces;
+
///
/// Describes an applied configuration update.
/// Based on this information, the program can decide which updates are need to
@@ -21,12 +23,12 @@ public class ConfigurationUpdate
///
/// Gets or sets the name of the update.
///
- public string? Name { get; set; }
+ public LocalizedString? Name { get; set; }
///
/// Gets or sets the description of the update with further information.
///
- public string? Description { get; set; }
+ public LocalizedString? Description { get; set; }
///
/// Gets or sets the release date.
diff --git a/src/DataModel/Configuration/DropItemGroup.cs b/src/DataModel/Configuration/DropItemGroup.cs
index 69ff5ba91..35ec995ea 100644
--- a/src/DataModel/Configuration/DropItemGroup.cs
+++ b/src/DataModel/Configuration/DropItemGroup.cs
@@ -54,7 +54,7 @@ public partial class DropItemGroup
///
/// Gets or sets the description.
///
- public string Description { get; set; } = string.Empty;
+ public LocalizedString Description { get; set; }
///
/// Gets or sets the chance of the item drop group to apply. From 0.0 to 1.0.
diff --git a/src/DataModel/Configuration/GameMapDefinition.cs b/src/DataModel/Configuration/GameMapDefinition.cs
index 0fac62325..fec41ba2f 100644
--- a/src/DataModel/Configuration/GameMapDefinition.cs
+++ b/src/DataModel/Configuration/GameMapDefinition.cs
@@ -34,7 +34,7 @@ public partial class GameMapDefinition
///
/// Gets or sets the name of the map.
///
- public string Name { get; set; } = string.Empty;
+ public LocalizedString Name { get; set; }
///
/// Gets or sets the terrain data.
diff --git a/src/DataModel/Configuration/ItemCrafting/ItemCrafting.cs b/src/DataModel/Configuration/ItemCrafting/ItemCrafting.cs
index 8679e3811..2710956f5 100644
--- a/src/DataModel/Configuration/ItemCrafting/ItemCrafting.cs
+++ b/src/DataModel/Configuration/ItemCrafting/ItemCrafting.cs
@@ -5,6 +5,7 @@
namespace MUnique.OpenMU.DataModel.Configuration.ItemCrafting;
using MUnique.OpenMU.Annotations;
+using MUnique.OpenMU.Interfaces;
///
/// Description of IItemCrafting.
@@ -23,7 +24,7 @@ public partial class ItemCrafting
///
/// Gets or sets the name.
///
- public string Name { get; set; } = string.Empty;
+ public LocalizedString Name { get; set; }
///
/// Gets or sets the name of the item crafting handler class.
diff --git a/src/DataModel/Configuration/Items/ItemDefinition.cs b/src/DataModel/Configuration/Items/ItemDefinition.cs
index 318dfdd49..b1acfaa3f 100644
--- a/src/DataModel/Configuration/Items/ItemDefinition.cs
+++ b/src/DataModel/Configuration/Items/ItemDefinition.cs
@@ -6,6 +6,7 @@ namespace MUnique.OpenMU.DataModel.Configuration.Items;
using MUnique.OpenMU.Annotations;
using MUnique.OpenMU.DataModel.Configuration;
+using MUnique.OpenMU.Interfaces;
///
/// Defines an item.
@@ -60,7 +61,7 @@ public partial class ItemDefinition
///
/// Gets or sets the name of the item.
///
- public string Name { get; set; } = string.Empty;
+ public LocalizedString Name { get; set; }
///
/// Gets or sets the item drop level, which indicates the minimum monster lvl of which this item can be dropped.
@@ -165,7 +166,7 @@ public override string ToString()
/// The name of the item of a certain level.
public string GetNameForLevel(byte itemLevel)
{
- var itemName = this.Name;
+ var itemName = this.Name.ToString();
if (itemName?.Contains(';') ?? false)
{
var tokens = itemName.Split(';');
diff --git a/src/DataModel/Configuration/Items/ItemLevelBonusTable.cs b/src/DataModel/Configuration/Items/ItemLevelBonusTable.cs
index bb246979b..2ae34bfe2 100644
--- a/src/DataModel/Configuration/Items/ItemLevelBonusTable.cs
+++ b/src/DataModel/Configuration/Items/ItemLevelBonusTable.cs
@@ -5,6 +5,7 @@
namespace MUnique.OpenMU.DataModel.Configuration.Items;
using MUnique.OpenMU.Annotations;
+using MUnique.OpenMU.Interfaces;
///
/// Defines a table of item level related bonus values for s.
@@ -15,12 +16,12 @@ public partial class ItemLevelBonusTable
///
/// Gets or sets the name.
///
- public string Name { get; set; } = string.Empty;
+ public LocalizedString Name { get; set; }
///
/// Gets or sets the description.
///
- public string Description { get; set; } = string.Empty;
+ public LocalizedString Description { get; set; }
///
/// Gets or sets the bonus per level.
diff --git a/src/DataModel/Configuration/Items/ItemOptionCombinationBonus.cs b/src/DataModel/Configuration/Items/ItemOptionCombinationBonus.cs
index ec5011d16..632263a05 100644
--- a/src/DataModel/Configuration/Items/ItemOptionCombinationBonus.cs
+++ b/src/DataModel/Configuration/Items/ItemOptionCombinationBonus.cs
@@ -6,6 +6,7 @@ namespace MUnique.OpenMU.DataModel.Configuration.Items;
using MUnique.OpenMU.Annotations;
using MUnique.OpenMU.DataModel.Attributes;
+using MUnique.OpenMU.Interfaces;
///
/// Defines a bonus which gets granted when the equipped items
@@ -20,7 +21,7 @@ public partial class ItemOptionCombinationBonus
///
/// Gets or sets the description.
///
- public string Description { get; set; } = string.Empty;
+ public LocalizedString Description { get; set; }
///
/// Gets or sets the number.
diff --git a/src/DataModel/Configuration/Items/ItemOptionDefinition.cs b/src/DataModel/Configuration/Items/ItemOptionDefinition.cs
index bf6e1ad19..a566cd518 100644
--- a/src/DataModel/Configuration/Items/ItemOptionDefinition.cs
+++ b/src/DataModel/Configuration/Items/ItemOptionDefinition.cs
@@ -5,6 +5,7 @@
namespace MUnique.OpenMU.DataModel.Configuration.Items;
using MUnique.OpenMU.Annotations;
+using MUnique.OpenMU.Interfaces;
///
/// The definition of an item option.
@@ -15,7 +16,7 @@ public partial class ItemOptionDefinition
///
/// Gets or sets the name of the option, for example "Luck", "Skill", "Normal Option".
///
- public string Name { get; set; } = string.Empty;
+ public LocalizedString Name { get; set; }
///
/// Gets or sets a value indicating whether this option adds randomly.
diff --git a/src/DataModel/Configuration/Items/ItemOptionType.cs b/src/DataModel/Configuration/Items/ItemOptionType.cs
index 71bda43a1..e80419c34 100644
--- a/src/DataModel/Configuration/Items/ItemOptionType.cs
+++ b/src/DataModel/Configuration/Items/ItemOptionType.cs
@@ -5,6 +5,7 @@
namespace MUnique.OpenMU.DataModel.Configuration.Items;
using MUnique.OpenMU.Annotations;
+using MUnique.OpenMU.Interfaces;
///
/// Type of an item option.
@@ -21,12 +22,12 @@ public partial class ItemOptionType
///
/// Gets or sets the name.
///
- public string Name { get; set; } = string.Empty;
+ public LocalizedString Name { get; set; }
///
/// Gets or sets the description.
///
- public string Description { get; set; } = string.Empty;
+ public LocalizedString Description { get; set; }
///
/// Gets or sets a value indicating whether this item option is visible to other players.
diff --git a/src/DataModel/Configuration/Items/ItemSetGroup.cs b/src/DataModel/Configuration/Items/ItemSetGroup.cs
index 4e993f05a..1648722b4 100644
--- a/src/DataModel/Configuration/Items/ItemSetGroup.cs
+++ b/src/DataModel/Configuration/Items/ItemSetGroup.cs
@@ -6,6 +6,7 @@ namespace MUnique.OpenMU.DataModel.Configuration.Items;
using MUnique.OpenMU.Annotations;
using MUnique.OpenMU.DataModel.Entities;
+using MUnique.OpenMU.Interfaces;
///
/// Defines an item set group. With (partial) completion of the set, additional options are getting applied.
@@ -26,7 +27,7 @@ public partial class ItemSetGroup
///
/// The name.
///
- public string Name { get; set; } = string.Empty;
+ public LocalizedString Name { get; set; }
///
/// Gets or sets a value indicating whether the options of this item set always apply to an item,
@@ -36,7 +37,7 @@ public partial class ItemSetGroup
public bool AlwaysApplies { get; set; }
///
- /// Gets or sets a value indicating whether the items are counted distincly.
+ /// Gets or sets a value indicating whether the items are counted distinctly.
///
///
/// For example, for the double wear bonus this has to be non-distinct, else we wouldn't get the bonus for wearing two of the same kind of swords.
diff --git a/src/DataModel/Configuration/Items/ItemSlotType.cs b/src/DataModel/Configuration/Items/ItemSlotType.cs
index 81cc7dd8f..d699d5171 100644
--- a/src/DataModel/Configuration/Items/ItemSlotType.cs
+++ b/src/DataModel/Configuration/Items/ItemSlotType.cs
@@ -5,6 +5,7 @@
namespace MUnique.OpenMU.DataModel.Configuration.Items;
using MUnique.OpenMU.Annotations;
+using MUnique.OpenMU.Interfaces;
///
/// The item slot type. Each of this may have one or more actual item slots.
@@ -15,7 +16,7 @@ public partial class ItemSlotType
///
/// Gets or sets the description.
///
- public string Description { get; set; } = string.Empty;
+ public LocalizedString Description { get; set; }
///
/// Gets or sets the item slots of this slot type.
diff --git a/src/DataModel/Configuration/MagicEffectDefinition.cs b/src/DataModel/Configuration/MagicEffectDefinition.cs
index 2d4f1d0e6..5a301ee5a 100644
--- a/src/DataModel/Configuration/MagicEffectDefinition.cs
+++ b/src/DataModel/Configuration/MagicEffectDefinition.cs
@@ -6,6 +6,7 @@ namespace MUnique.OpenMU.DataModel.Configuration;
using MUnique.OpenMU.Annotations;
using MUnique.OpenMU.DataModel.Attributes;
+using MUnique.OpenMU.Interfaces;
///
/// Magic Effect Definition. It can be an effect from a consumed item, a buff, or the result of an attack skill.
@@ -25,7 +26,7 @@ public partial class MagicEffectDefinition
///
/// Gets or sets the name.
///
- public string Name { get; set; } = string.Empty;
+ public LocalizedString Name { get; set; }
///
/// Gets or sets the sub type.
diff --git a/src/DataModel/Configuration/MasterSkillRoot.cs b/src/DataModel/Configuration/MasterSkillRoot.cs
index 1bb115f5d..799ad7cef 100644
--- a/src/DataModel/Configuration/MasterSkillRoot.cs
+++ b/src/DataModel/Configuration/MasterSkillRoot.cs
@@ -4,8 +4,6 @@
namespace MUnique.OpenMU.DataModel.Configuration;
-using MUnique.OpenMU.Annotations;
-
///
/// The root of a master skill tree. One character can have more than one root.
///
@@ -20,11 +18,11 @@ public partial class MasterSkillRoot
///
/// Gets or sets the name.
///
- public string Name { get; set; } = string.Empty;
+ public LocalizedString Name { get; set; }
///
- public override string ToString()
+ public override string? ToString()
{
- return this.Name;
+ return this.Name.ToString();
}
}
\ No newline at end of file
diff --git a/src/DataModel/Configuration/MiniGameChangeEvent.cs b/src/DataModel/Configuration/MiniGameChangeEvent.cs
index d4f203872..fb5f0e924 100644
--- a/src/DataModel/Configuration/MiniGameChangeEvent.cs
+++ b/src/DataModel/Configuration/MiniGameChangeEvent.cs
@@ -5,6 +5,7 @@
namespace MUnique.OpenMU.DataModel.Configuration;
using MUnique.OpenMU.Annotations;
+using MUnique.OpenMU.Interfaces;
///
/// Defines the kind of targets for the .
@@ -44,13 +45,13 @@ public partial class MiniGameChangeEvent
///
/// Gets or sets the description about the event.
///
- public string? Description { get; set; }
+ public LocalizedString? Description { get; set; }
///
/// Gets or sets the (golden) message which should be shown to the player.
/// One placeholder can be used to show the triggering player name.
///
- public string? Message { get; set; }
+ public LocalizedString? Message { get; set; }
///
/// Gets or sets the targets which need to be killed to reach the required .
diff --git a/src/DataModel/Configuration/MiniGameDefinition.cs b/src/DataModel/Configuration/MiniGameDefinition.cs
index e8804d8e5..5dde513b7 100644
--- a/src/DataModel/Configuration/MiniGameDefinition.cs
+++ b/src/DataModel/Configuration/MiniGameDefinition.cs
@@ -24,12 +24,12 @@ public partial class MiniGameDefinition
///
/// Gets or sets the name of the mini game.
///
- public string Name { get; set; } = string.Empty;
+ public LocalizedString Name { get; set; }
///
/// Gets or sets the description of the mini game.
///
- public string Description { get; set; } = string.Empty;
+ public LocalizedString Description { get; set; }
///
/// Gets or sets the level of the mini game.
diff --git a/src/DataModel/Configuration/MiniGameSpawnWave.cs b/src/DataModel/Configuration/MiniGameSpawnWave.cs
index e141dc9b8..052081b24 100644
--- a/src/DataModel/Configuration/MiniGameSpawnWave.cs
+++ b/src/DataModel/Configuration/MiniGameSpawnWave.cs
@@ -5,6 +5,7 @@
namespace MUnique.OpenMU.DataModel.Configuration;
using MUnique.OpenMU.Annotations;
+using MUnique.OpenMU.Interfaces;
///
/// Defines a spawn wave of a .
@@ -20,12 +21,12 @@ public partial class MiniGameSpawnWave
///
/// Gets or sets the description about this wave.
///
- public string? Description { get; set; }
+ public LocalizedString? Description { get; set; }
///
/// Gets or sets a message which is shown to the player when the wave starts.
///
- public string? Message { get; set; }
+ public LocalizedString? Message { get; set; }
///
/// Gets or sets the starting time of the wave.
diff --git a/src/DataModel/Configuration/MonsterDefinition.cs b/src/DataModel/Configuration/MonsterDefinition.cs
index 4df050426..d511a62cc 100644
--- a/src/DataModel/Configuration/MonsterDefinition.cs
+++ b/src/DataModel/Configuration/MonsterDefinition.cs
@@ -8,6 +8,7 @@ namespace MUnique.OpenMU.DataModel.Configuration;
using MUnique.OpenMU.AttributeSystem;
using MUnique.OpenMU.DataModel.Configuration.Quests;
using MUnique.OpenMU.DataModel.Entities;
+using MUnique.OpenMU.Interfaces;
///
/// Type of the window which will be openend when talking to the npc.
@@ -227,7 +228,7 @@ public partial class MonsterDefinition
/// Gets or sets the designation of this monster.
/// Not relevant for the server, however helpful for debugging/logging.
///
- public string Designation { get; set; } = string.Empty;
+ public LocalizedString Designation { get; set; }
///
/// Gets or sets the range in which a monster will move randomly?
diff --git a/src/DataModel/Configuration/Quests/QuestDefinition.cs b/src/DataModel/Configuration/Quests/QuestDefinition.cs
index e994c4c3b..2312caf3f 100644
--- a/src/DataModel/Configuration/Quests/QuestDefinition.cs
+++ b/src/DataModel/Configuration/Quests/QuestDefinition.cs
@@ -20,7 +20,7 @@ public partial class QuestDefinition
///
/// Gets or sets the name of the quest.
///
- public string Name { get; set; } = string.Empty;
+ public LocalizedString Name { get; set; }
///
/// Gets or sets the group identifier of the quest.
@@ -100,8 +100,8 @@ public partial class QuestDefinition
public virtual ICollection Rewards { get; protected set; } = null!;
///
- public override string ToString()
+ public override string? ToString()
{
- return this.Name;
+ return this.Name.ToString();
}
}
\ No newline at end of file
diff --git a/src/DataModel/Configuration/Skill.cs b/src/DataModel/Configuration/Skill.cs
index dee56455e..054e7cb81 100644
--- a/src/DataModel/Configuration/Skill.cs
+++ b/src/DataModel/Configuration/Skill.cs
@@ -199,7 +199,7 @@ public partial class Skill
///
/// Gets or sets the name.
///
- public string Name { get; set; } = string.Empty;
+ public LocalizedString Name { get; set; }
///
/// Gets or sets the attack damage. Only relevant for attack skills.
@@ -309,8 +309,8 @@ public partial class Skill
public virtual AreaSkillSettings? AreaSkillSettings { get; set; }
///
- public override string ToString()
+ public override string? ToString()
{
- return this.Name;
+ return this.Name.ToString();
}
}
\ No newline at end of file
diff --git a/src/DataModel/Configuration/SkillComboDefinition.cs b/src/DataModel/Configuration/SkillComboDefinition.cs
index 8a872032b..39afcc70d 100644
--- a/src/DataModel/Configuration/SkillComboDefinition.cs
+++ b/src/DataModel/Configuration/SkillComboDefinition.cs
@@ -15,7 +15,7 @@ public partial class SkillComboDefinition
///
/// Gets or sets the name of the combo sequence.
///
- public string Name { get; set; } = string.Empty;
+ public LocalizedString Name { get; set; }
///
/// Gets or sets the maximum time until the final step has to be done.
@@ -29,8 +29,8 @@ public partial class SkillComboDefinition
public virtual ICollection Steps { get; protected set; } = null!;
///
- public override string ToString()
+ public override string? ToString()
{
- return this.Name;
+ return this.Name.ToString();
}
}
\ No newline at end of file
diff --git a/src/DataModel/Configuration/WarpInfo.cs b/src/DataModel/Configuration/WarpInfo.cs
index 9ddf29193..8e9dccad9 100644
--- a/src/DataModel/Configuration/WarpInfo.cs
+++ b/src/DataModel/Configuration/WarpInfo.cs
@@ -20,7 +20,7 @@ public partial class WarpInfo
///
/// Gets or sets the name.
///
- public string Name { get; set; } = string.Empty;
+ public LocalizedString Name { get; set; }
///
/// Gets or sets the warp costs.
@@ -39,8 +39,8 @@ public partial class WarpInfo
public virtual ExitGate? Gate { get; set; }
///
- public override string ToString()
+ public override string? ToString()
{
- return this.Name;
+ return this.Name.ToString();
}
}
\ No newline at end of file
diff --git a/src/DataModel/CultureHelper.cs b/src/DataModel/CultureHelper.cs
new file mode 100644
index 000000000..b061d9a9e
--- /dev/null
+++ b/src/DataModel/CultureHelper.cs
@@ -0,0 +1,57 @@
+//
+// Licensed under the MIT License. See LICENSE file in the project root for full license information.
+//
+
+namespace MUnique.OpenMU.DataModel;
+
+using System.Globalization;
+using System.Resources;
+using Nito.Disposables;
+using Nito.Disposables.Internals;
+
+///
+/// Helper class for culture related operations.
+///
+public static class CultureHelper
+{
+ ///
+ /// Sets the temporary culture for the current thread.
+ /// Should be disposed after usage to revert to the previous culture.
+ /// Should not be used between async calls.
+ ///
+ /// The culture information.
+ /// A disposable to revert to the previous culture.
+ public static IDisposable SetTemporaryCulture(CultureInfo cultureInfo)
+ {
+ var oldUiCulture = CultureInfo.CurrentUICulture;
+ var oldCulture = CultureInfo.CurrentCulture;
+ CultureInfo.CurrentUICulture = cultureInfo;
+ CultureInfo.CurrentCulture = cultureInfo;
+
+ return Disposable.Create(() =>
+ {
+ CultureInfo.CurrentUICulture = oldUiCulture;
+ CultureInfo.CurrentCulture = oldCulture;
+ });
+ }
+
+ ///
+ /// Gets the available cultures for a specific resource.
+ ///
+ /// The type of the resources.
+ /// An enumeration of of available cultures of the given resource type.
+ public static IEnumerable GetAvailableCultures()
+ {
+ var resourceManager = new ResourceManager(typeof(TResources));
+
+ var cultures = CultureInfo.GetCultures(CultureTypes.AllCultures);
+ var result = cultures
+ .Except([CultureInfo.InvariantCulture])
+ .Where(culture => culture is { IsNeutralCulture: true, TwoLetterISOLanguageName: "en" }
+ || !object.Equals(resourceManager.GetResourceSet(culture, true, false), null))
+ .WhereNotNull()
+ .ToList();
+
+ return result;
+ }
+}
\ No newline at end of file
diff --git a/src/DataModel/Entities/Account.cs b/src/DataModel/Entities/Account.cs
index 160e4961b..7b1d6fe89 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.
///
@@ -121,7 +129,6 @@ public class Account
/// Gets or sets a value indicating whether this instance is a template account
/// and therefore read-only within the game server.
///
- [Display(Name = "Is template account", Description = "A template account can login multiple times for test purposes and is read-only.")]
public bool IsTemplate { get; set; }
///
diff --git a/src/DataModel/Entities/Item.cs b/src/DataModel/Entities/Item.cs
index d63e7e64b..6f11bf2ce 100644
--- a/src/DataModel/Entities/Item.cs
+++ b/src/DataModel/Entities/Item.cs
@@ -4,8 +4,10 @@
namespace MUnique.OpenMU.DataModel.Entities;
+using System.Globalization;
using MUnique.OpenMU.Annotations;
using MUnique.OpenMU.DataModel.Configuration.Items;
+using MUnique.OpenMU.DataModel.Properties;
///
/// The item.
@@ -152,6 +154,62 @@ public override string ToString()
return stringBuilder.ToString();
}
+ ///
+ public string ToString(CultureInfo culture)
+ {
+ using var cultureHelper = CultureHelper.SetTemporaryCulture(culture);
+ var stringBuilder = new StringBuilder();
+ stringBuilder.Append(Resources.Slot).Append(" ").Append(this.ItemSlot).Append(": ");
+
+ if (this.ItemOptions.Any(o => o.ItemOption?.OptionType == ItemOptionTypes.Excellent))
+ {
+ stringBuilder.Append(Resources.Excellent).Append(" ");
+ }
+
+ var ancientSet = this.ItemSetGroups.FirstOrDefault(s => s.AncientSetDiscriminator != 0)?.ItemSetGroup;
+ if (ancientSet != null)
+ {
+ stringBuilder.Append(ancientSet.Name.ToString()).Append(" ");
+ }
+
+ var itemName = this.Definition?.GetNameForLevel(this.Level);
+
+ stringBuilder.Append(itemName);
+ if (this.Level > 0)
+ {
+ stringBuilder.Append("+").Append(this.Level);
+ }
+
+ foreach (var option in this.ItemOptions
+ .Where(o => o.ItemOption?.OptionType != ItemOptionTypes.Luck)
+ .OrderBy(o => o.ItemOption?.OptionType == ItemOptionTypes.Option))
+ {
+ var levelOption = option.ItemOption?.LevelDependentOptions.FirstOrDefault(o => o.Level == (option.ItemOption.LevelType == LevelType.ItemLevel ? this.Level : option.Level));
+ var powerUpDefinition = levelOption?.PowerUpDefinition ?? option.ItemOption?.PowerUpDefinition;
+ if (powerUpDefinition is not null)
+ {
+ stringBuilder.Append("+").Append(powerUpDefinition);
+ }
+ }
+
+ if (this.HasSkill)
+ {
+ stringBuilder.Append("+").Append(Resources.Skill);
+ }
+
+ if (this.ItemOptions.Any(opt => opt.ItemOption?.OptionType == ItemOptionTypes.Luck))
+ {
+ stringBuilder.Append("+").Append(Resources.Luck);
+ }
+
+ if (this.SocketCount > 0)
+ {
+ stringBuilder.Append("+").Append(this.SocketCount).Append(Resources.SocketAbbreviation);
+ }
+
+ return stringBuilder.ToString();
+ }
+
///
/// Clones the item option link.
///
diff --git a/src/DataModel/GlobalUsings.cs b/src/DataModel/GlobalUsings.cs
index ecab3025c..2771f7d33 100644
--- a/src/DataModel/GlobalUsings.cs
+++ b/src/DataModel/GlobalUsings.cs
@@ -6,7 +6,9 @@
global using System.ComponentModel.DataAnnotations;
+global using MUnique.OpenMU.Annotations;
global using MUnique.OpenMU.DataModel.Composition;
+global using MUnique.OpenMU.Interfaces;
#pragma warning restore SA1200
#pragma warning restore IDE0005
\ No newline at end of file
diff --git a/src/DataModel/ModelResourceProvider.cs b/src/DataModel/ModelResourceProvider.cs
new file mode 100644
index 000000000..41e96179c
--- /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.CurrentUICulture;
+ 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.CurrentUICulture;
+ 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.CurrentUICulture;
+ 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.CurrentUICulture;
+ 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.CurrentUICulture;
+ 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.CurrentUICulture;
+ 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.CurrentUICulture;
+ 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..4e9d96a6c
--- /dev/null
+++ b/src/DataModel/Properties/ModelResources.resx
@@ -0,0 +1,5713 @@
+
+
+
+ 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
+
+
+
+ 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 account
+
+
+ A template account can log in multiple times for test purposes and is read-only.
+
+
+ Characters
+
+
+
+
+
+ Attributes
+
+
+
+
+
+ Account State
+
+
+
+
+
+ Normal
+
+
+
+
+
+ Spectator
+
+
+
+
+
+ Game Master
+
+
+
+
+
+ Game Master Invisible
+
+
+
+
+
+ Banned
+
+
+
+
+
+ Temporarily Banned
+
+
+
+
+
+ Aggregate Root Attribute
+
+
+ Aggregate Root Attributes
+
+
+
+
+
+ Appearance Data
+
+
+ Appearance Datas
+
+
+
+
+
+ Character Class
+
+
+
+
+
+ Character Status
+
+
+
+
+
+ Pose
+
+
+
+
+
+ Full Ancient Set Equipped
+
+
+
+
+
+ Equipped Items
+
+
+
+
+
+ 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
+
+
+
+
+
+ Assignable Extensions
+
+
+ Assignable Extensions
+
+
+
+
+
+ Attribute Requirement
+
+
+ Attribute Requirements
+
+
+
+
+
+ Attribute
+
+
+
+
+
+ Minimum Value
+
+
+
+
+
+ Battle Type
+
+
+
+
+
+ Normal
+
+
+
+
+
+ Soccer
+
+
+
+
+
+ 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
+
+
+
+
+
+ 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
+
+
+
+
+
+ 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
+
+
+
+
+
+ Character Pose
+
+
+
+
+
+ Standing
+
+
+
+
+
+ Sitting
+
+
+
+
+
+ Leaning
+
+
+
+
+
+ Hanging
+
+
+
+
+
+ Character Quest State
+
+
+ Character Quest States
+
+
+
+
+
+ Group
+
+
+
+
+
+ Client Action Performed
+
+
+
+
+
+ Last Finished Quest
+
+
+
+
+
+ Active Quest
+
+
+
+
+
+ Requirement States
+
+
+
+
+
+ Character Status
+
+
+
+
+
+ Normal
+
+
+
+
+
+ Banned
+
+
+
+
+
+ Game Master
+
+
+
+
+
+ Chat Servers
+
+
+ Chat Servers
+
+
+
+
+
+ Server Id
+
+
+
+
+
+ Description
+
+
+
+
+
+ Maximum Connections
+
+
+
+
+
+ Client Timeout
+
+
+
+
+
+ Client Clean Up Interval
+
+
+
+
+
+ Room Clean Up Interval
+
+
+
+
+
+ Endpoints
+
+
+
+
+
+ Chat Server Endpoint
+
+
+ Chat Server Endpoints
+
+
+
+
+
+ Combination Bonus Requirement
+
+
+ Combination Bonus Requirements
+
+
+
+
+
+ Option Type
+
+
+
+
+
+ Sub Option Type
+
+
+
+
+
+ Minimum Count
+
+
+
+
+
+ Configuration Update
+
+
+ Configuration Updates
+
+
+
+
+
+ Version
+
+
+
+
+
+ Name
+
+
+
+
+
+ Description
+
+
+
+
+
+ Created At
+
+
+
+
+
+ Installed At
+
+
+
+
+
+ Configuration Update State
+
+
+ Configuration Update States
+
+
+
+
+
+ Initialization Key
+
+
+
+
+
+ Current Installed Version
+
+
+
+
+
+ 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
+
+
+
+
+
+ Damage Type
+
+
+
+
+
+ None
+
+
+
+
+
+ Physical
+
+
+
+
+
+ Wizardry
+
+
+
+
+
+ Curse
+
+
+
+
+
+ Summoned Monster
+
+
+
+
+
+ Fenrir
+
+
+
+
+
+ All
+
+
+
+
+
+ Direction
+
+
+
+
+
+ Undefined
+
+
+
+
+
+ West
+
+
+
+
+
+ South West
+
+
+
+
+
+ South
+
+
+
+
+
+ South East
+
+
+
+
+
+ East
+
+
+
+
+
+ North East
+
+
+
+
+
+ North
+
+
+
+
+
+ North West
+
+
+
+
+
+ Drop Item Group
+
+
+ Drop Item Groups
+
+
+
+
+
+ Description
+
+
+
+
+
+ Chance
+
+
+
+
+
+ Minimum Monster Level
+
+
+
+
+
+ Maximum Monster Level
+
+
+
+
+
+ Monster
+
+
+
+
+
+ Item Level
+
+
+
+
+
+ Item Type
+
+
+
+
+
+ Possible Items
+
+
+
+
+
+ Duel Area
+
+
+ Duel Areas
+
+
+
+
+
+ Index
+
+
+
+
+
+ First Player Gate
+
+
+
+
+
+ Second Player Gate
+
+
+
+
+
+ Spectators Gate
+
+
+
+
+
+ Duel Configuration
+
+
+ Duel Configurations
+
+
+
+
+
+ Maximum Score
+
+
+
+
+
+ Entrance Fee
+
+
+
+
+
+ Minimum Character Level
+
+
+
+
+
+ Maximum Spectators Per Duel Room
+
+
+
+
+
+ Exit
+
+
+
+
+
+ Duel Areas
+
+
+
+
+
+ Enter Gate
+
+
+ Enter Gates
+
+
+
+
+
+ Target Gate
+
+
+
+
+
+ Level Requirement
+
+
+
+
+
+ Number
+
+
+
+
+
+ Error
+
+
+ Errors
+
+
+
+
+
+ Exit Gate
+
+
+ Exit Gates
+
+
+
+
+
+ Direction
+
+
+
+
+
+ Map
+
+
+
+
+
+ Is Spawn Gate
+
+
+
+
+
+ Fruit Calculation Strategy
+
+
+
+
+
+ Default
+
+
+
+
+
+ Magic Gladiator
+
+
+
+
+
+ Dark Lord
+
+
+
+
+
+ Game Clients
+
+
+ Game Clients
+
+
+
+
+
+ Season
+
+
+
+
+
+ Episode
+
+
+
+
+
+ Language
+
+
+
+
+
+ Version
+
+
+
+
+
+ Serial
+
+
+
+
+
+ Description
+
+
+
+
+
+ Game Configuration
+
+
+ Game Configurations
+
+
+
+
+
+ Maximum Level
+
+
+
+
+
+ Maximum Master Level
+
+
+
+
+
+ Experience Rate
+
+
+
+
+
+ Prevent Experience Overflow
+
+
+
+
+
+ Minimum Monster Level For Master Experience
+
+
+
+
+
+ Info Range
+
+
+
+
+
+ Area Skill Hits Player
+
+
+
+
+
+ Maximum Inventory Money
+
+
+
+
+
+ Maximum Vault Money
+
+
+
+
+
+ Clamp Money On Pickup
+
+
+
+
+
+ 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
+
+
+
+
+
+ Game Configuration Helper
+
+
+ Game Configuration Helpers
+
+
+
+
+
+ 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
+
+
+
+
+
+ Game Server Configuration
+
+
+ Game Server Configurations
+
+
+
+
+
+ Maximum Players
+
+
+
+
+
+ Maps
+
+
+
+
+
+ Game Servers
+
+
+ Game Servers
+
+
+
+
+
+ Server ID
+
+
+
+
+
+ Description
+
+
+
+
+
+ Experience Rate
+
+
+
+
+
+ Pvp Enabled
+
+
+
+
+
+ Server Configuration
+
+
+
+
+
+ Game Configuration
+
+
+
+
+
+ Endpoints
+
+
+
+
+
+ Game Server Endpoint
+
+
+ Game Server Endpoints
+
+
+
+
+
+ Alternative Published Port
+
+
+
+
+
+ Gate
+
+
+ Gates
+
+
+
+
+
+ X1
+
+
+
+
+
+ Y1
+
+
+
+
+
+ X2
+
+
+
+
+
+ Y2
+
+
+
+
+
+ Guild
+
+
+ Guilds
+
+
+
+
+
+ Id
+
+
+
+
+
+ Members
+
+
+
+
+
+ Guild Member
+
+
+ Guild Members
+
+
+
+
+
+ Id
+
+
+
+
+
+ Guild Id
+
+
+
+
+
+ Status
+
+
+
+
+
+ Hero State
+
+
+
+
+
+ New
+
+
+
+
+
+ Hero
+
+
+
+
+
+ Light Hero
+
+
+
+
+
+ Normal
+
+
+
+
+
+ Player Kill Warning
+
+
+
+
+
+ Player Killer1st Stage
+
+
+
+
+
+ Player Killer2nd Stage
+
+
+
+
+
+ Hidden At Creation Attribute
+
+
+ Hidden At Creation Attributes
+
+
+
+
+
+ Increasable Item Option
+
+
+ Increasable Item Options
+
+
+
+
+
+ Level Type
+
+
+
+
+
+ Weight
+
+
+
+
+
+ Level Dependent Options
+
+
+
+
+
+ Inventory Constants
+
+
+ Inventory Constants
+
+
+
+
+
+ Item
+
+
+ Items
+
+
+
+
+
+ Item Slot
+
+
+
+
+
+ Definition
+
+
+
+
+
+ Durability
+
+
+
+
+
+ Level
+
+
+
+
+
+ Has Skill
+
+
+
+
+
+ Item Options
+
+
+
+
+
+ Item Set Groups
+
+
+
+
+
+ Socket Count
+
+
+
+
+
+ Store Price
+
+
+
+
+
+ Pet Experience
+
+
+
+
+
+ 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
+
+
+
+
+
+ Item Crafting
+
+
+ Item Craftings
+
+
+
+
+
+ Number
+
+
+
+
+
+ Name
+
+
+
+
+
+ Item Crafting Handler Class Name
+
+
+
+
+
+ Simple Crafting Settings
+
+
+
+
+
+ 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
+
+
+
+
+
+ Item Crafting Result Item
+
+
+ Item Crafting Result Items
+
+
+
+
+
+ Items
+
+
+
+
+
+ Random Minimum Level
+
+
+
+
+
+ Random Maximum Level
+
+
+
+
+
+ Durability
+
+
+
+
+
+ Reference
+
+
+
+
+
+ Add Level
+
+
+
+
+
+ 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
+
+
+
+
+
+ Item Drop Effect
+
+
+
+
+
+ Undefined
+
+
+
+
+
+ Fireworks
+
+
+
+
+
+ Christmas Fireworks
+
+
+
+
+
+ Fanfare Sound
+
+
+
+
+
+ Swirl
+
+
+
+
+
+ Item Drop Item Group
+
+
+ Item Drop Item Groups
+
+
+
+
+
+ Source Item Level
+
+
+
+
+
+ Money Amount
+
+
+
+
+
+ Minimum Level
+
+
+
+
+
+ Maximum Level
+
+
+
+
+
+ Required Character Level
+
+
+
+
+
+ Drop Effect
+
+
+
+
+
+ Item Extensions
+
+
+ Item Extensions
+
+
+
+
+
+ Item Level Bonus Table
+
+
+ Item Level Bonus Tables
+
+
+
+
+
+ Name
+
+
+
+
+
+ Description
+
+
+
+
+
+ Bonus Per Level
+
+
+
+
+
+ Item Of Item Set
+
+
+ Item Of Item Sets
+
+
+
+
+
+ Ancient Set Discriminator
+
+
+
+
+
+ Item Set Group
+
+
+
+
+
+ Items
+
+
+
+
+
+ Bonus Option
+
+
+
+
+
+ Name
+
+
+
+
+
+ Item Option
+
+
+ Item Options
+
+
+
+
+
+ Number
+
+
+
+
+
+ Sub Option Type
+
+
+
+
+
+ Option Type
+
+
+
+
+
+ Power Ups
+
+
+
+
+
+ Item Option Combination Bonus
+
+
+ Item Option Combination Bonus
+
+
+
+
+
+ Description
+
+
+
+
+
+ Number
+
+
+
+
+
+ Applies Multiple Times
+
+
+
+
+
+ Requirements
+
+
+
+
+
+ Bonus
+
+
+
+
+
+ Item Options
+
+
+ Item Options
+
+
+
+
+
+ Name
+
+
+
+
+
+ Adds Randomly
+
+
+
+
+
+ Add Chance
+
+
+
+
+
+ Maximum Options Per Item
+
+
+
+
+
+ Possible Options
+
+
+
+
+
+ Item Option Link
+
+
+ Item Option Links
+
+
+
+
+
+ Item Option
+
+
+
+
+
+ Level
+
+
+
+
+
+ Index
+
+
+
+
+
+ Item Option Of Level
+
+
+ Item Option Of Levels
+
+
+
+
+
+ Level
+
+
+
+
+
+ Required Item Level
+
+
+
+
+
+ Power Ups
+
+
+
+
+
+ Item Option Type
+
+
+ Item Option Types
+
+
+
+
+
+ Id
+
+
+
+
+
+ Name
+
+
+
+
+
+ Description
+
+
+
+
+
+ Is Visible
+
+
+
+
+
+ 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 Set Group
+
+
+ Item Set Groups
+
+
+
+
+
+ Name
+
+
+
+
+
+ Always Applies
+
+
+
+
+
+ Count Distinct
+
+
+
+
+
+ Minimum Item Count
+
+
+
+
+
+ Set Level
+
+
+
+
+
+ Options
+
+
+
+
+
+ Items
+
+
+
+
+
+ Item Slot Type
+
+
+ Item Slot Types
+
+
+
+
+
+ Description
+
+
+
+
+
+ Item Slots
+
+
+
+
+
+ Item Storage
+
+
+ Item Storages
+
+
+
+
+
+ Items
+
+
+
+
+
+ Money
+
+
+
+
+
+ Jewel Mix
+
+
+ Jewel Mixs
+
+
+
+
+
+ Number
+
+
+
+
+
+ Single Jewel
+
+
+
+
+
+ Mixed Jewel
+
+
+
+
+
+ Kill Target
+
+
+
+
+
+ Any Object
+
+
+
+
+
+ Any Monster
+
+
+
+
+
+ Specific
+
+
+
+
+
+ Letter Body
+
+
+ Letter Bodys
+
+
+
+
+
+ Id
+
+
+
+
+
+ Header
+
+
+
+
+
+ Message
+
+
+
+
+
+ Rotation
+
+
+
+
+
+ Animation
+
+
+
+
+
+ Sender Appearance
+
+
+
+
+
+ Level Bonus
+
+
+ Level Bonus
+
+
+
+
+
+ Level
+
+
+
+
+
+ Additional Value
+
+
+
+
+
+ Level Dependent Damage
+
+
+ Level Dependent Damages
+
+
+
+
+
+ Level
+
+
+
+
+
+ Damage
+
+
+
+
+
+ Level Type
+
+
+
+
+
+ Option Level
+
+
+
+
+
+ Item Level
+
+
+
+
+
+ Magic Effects
+
+
+ Magic Effects
+
+
+
+
+
+ Number
+
+
+
+
+
+ Name
+
+
+
+
+
+ Sub Type
+
+
+
+
+
+ Inform Observers
+
+
+
+
+
+ Stop By Death
+
+
+
+
+
+ Send Duration
+
+
+
+
+
+ Duration Depends On Target Level
+
+
+
+
+
+ Monster Target Level Divisor
+
+
+
+
+
+ Player Target Level Divisor
+
+
+
+
+
+ Chance
+
+
+
+
+
+ Chance Pvp
+
+
+
+
+
+ Duration
+
+
+
+
+
+ Duration Pvp
+
+
+
+
+
+ Power Ups
+
+
+
+
+
+ Power Ups Pvp
+
+
+
+
+
+ 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
+
+
+
+
+
+ Master Skill Root
+
+
+ Master Skill Roots
+
+
+
+
+
+ Id
+
+
+
+
+
+ Name
+
+
+
+
+
+ Member Of Aggregate Attribute
+
+
+ Member Of Aggregate Attributes
+
+
+
+
+
+ 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
+
+
+
+
+
+ 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
+
+
+
+
+
+ Mini Game Map Creation Policy
+
+
+
+
+
+ One Per Party
+
+
+
+
+
+ One Per Player
+
+
+
+
+
+ Shared
+
+
+
+
+
+ Mini Game Ranking Entry
+
+
+ Mini Game Ranking Entrys
+
+
+
+
+
+ Game Instance Id
+
+
+
+
+
+ Timestamp
+
+
+
+
+
+ Score
+
+
+
+
+
+ Rank
+
+
+
+
+
+ Character
+
+
+
+
+
+ Mini Game
+
+
+
+
+
+ Mini Game Reward
+
+
+ Mini Game Rewards
+
+
+
+
+
+ Rank
+
+
+
+
+
+ Reward Type
+
+
+
+
+
+ Reward Amount
+
+
+
+
+
+ Required Success
+
+
+
+
+
+ Item Reward
+
+
+
+
+
+ Required Kill
+
+
+
+
+
+ Mini Game Reward Type
+
+
+
+
+
+ Undefined
+
+
+
+
+
+ Money
+
+
+
+
+
+ Experience
+
+
+
+
+
+ Experience Per Remaining Seconds
+
+
+
+
+
+ Item
+
+
+
+
+
+ Item Drop
+
+
+
+
+
+ Score
+
+
+
+
+
+ Mini Game Spawn Wave
+
+
+ Mini Game Spawn Waves
+
+
+
+
+
+ Wave Number
+
+
+
+
+
+ Description
+
+
+
+
+
+ Message
+
+
+
+
+
+ Start Time
+
+
+
+
+
+ End Time
+
+
+
+
+
+ Mini Game Success Flags
+
+
+
+
+
+ None
+
+
+
+
+
+ Winner
+
+
+
+
+
+ Winning Party
+
+
+
+
+
+ Winner Or In Winning Party
+
+
+
+
+
+ Loser
+
+
+
+
+
+ Alive
+
+
+
+
+
+ Dead
+
+
+
+
+
+ Winner Exists
+
+
+
+
+
+ Winner Not Exists
+
+
+
+
+
+ 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
+
+
+
+
+
+ Mini Game Type
+
+
+
+
+
+ Undefined
+
+
+
+
+
+ Devil Square
+
+
+
+
+
+ Blood Castle
+
+
+
+
+
+ Chaos Castle
+
+
+
+
+
+ Illusion Temple
+
+
+
+
+
+ Doppelganger
+
+
+
+
+
+ Mix Result
+
+
+
+
+
+ Disappear
+
+
+
+
+
+ Stays As Is
+
+
+
+
+
+ Chaos Weapon And First Wings Downgraded Random
+
+
+
+
+
+ Third Wings Downgraded Random
+
+
+
+
+
+ Model Resource Provider
+
+
+ Model Resource Providers
+
+
+
+
+
+ Monster Attribute
+
+
+ Monster Attributes
+
+
+
+
+
+ Attributes
+
+
+
+
+
+ Value
+
+
+
+
+
+ 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[]
+
+
+
+
+
+ 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
+
+
+
+
+
+ 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
+
+
+
+
+
+ Power Ups
+
+
+ Power Ups
+
+
+
+
+
+ Target Attribute
+
+
+
+
+
+ Boost
+
+
+
+
+
+ Power Ups Value
+
+
+ Power Ups Values
+
+
+
+
+
+ Constant Value
+
+
+
+
+
+ Related Values
+
+
+
+
+
+ Maximum Value
+
+
+
+
+
+ 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
+
+
+
+
+
+ Quest Item Requirement
+
+
+ Quest Item Requirements
+
+
+
+
+
+ Item
+
+
+
+
+
+ Drop Item Group
+
+
+
+
+
+ Minimum Number
+
+
+
+
+
+ Quest Monster Kill Requirement
+
+
+ Quest Monster Kill Requirements
+
+
+
+
+
+ Monster
+
+
+
+
+
+ Minimum Number
+
+
+
+
+
+ Quest Monster Kill Requirement State
+
+
+ Quest Monster Kill Requirement States
+
+
+
+
+
+ Requirement
+
+
+
+
+
+ Kill Count
+
+
+
+
+
+ Quest Reward
+
+
+ Quest Rewards
+
+
+
+
+
+ Reward Type
+
+
+
+
+
+ Value
+
+
+
+
+
+ Item Reward
+
+
+
+
+
+ Attribute Reward
+
+
+
+
+
+ Skill Reward
+
+
+
+
+
+ Quest Reward Type
+
+
+
+
+
+ Undefined
+
+
+
+
+
+ Experience
+
+
+
+
+
+ Money
+
+
+
+
+
+ Item
+
+
+
+
+
+ Gens Attribution
+
+
+
+
+
+ Level Up Points
+
+
+
+
+
+ Character Evolution First To Second
+
+
+
+
+
+ Character Evolution Second To Third
+
+
+
+
+
+ Attribute
+
+
+
+
+
+ Skill
+
+
+
+
+
+ Rectangle
+
+
+ Rectangles
+
+
+
+
+
+ X1
+
+
+
+
+
+ Y1
+
+
+
+
+
+ X2
+
+
+
+
+
+ Y2
+
+
+
+
+
+ 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
+
+
+
+
+
+ Result Item Selection
+
+
+
+
+
+ Any
+
+
+
+
+
+ All
+
+
+
+
+
+ Server Endpoint
+
+
+ Server Endpoints
+
+
+
+
+
+ Network Port
+
+
+
+
+
+ Client
+
+
+
+
+
+ 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
+
+
+
+
+
+ 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
+
+
+
+
+
+ Skill Combos
+
+
+ Skill Combos
+
+
+
+
+
+ Name
+
+
+
+
+
+ Maximum Completion Time
+
+
+
+
+
+ Steps
+
+
+
+
+
+ Skill Combo Step
+
+
+ Skill Combo Steps
+
+
+
+
+
+ Order
+
+
+
+
+
+ Is Final Step
+
+
+
+
+
+ Skill
+
+
+
+
+
+ Skill Entry
+
+
+ Skill Entrys
+
+
+
+
+
+ Skill
+
+
+
+
+
+ Level
+
+
+
+
+
+ Power Ups
+
+
+
+
+
+ Power Ups Pvp
+
+
+
+
+
+ Power Up Duration
+
+
+
+
+
+ Power Up Duration Pvp
+
+
+
+
+
+ Power Up Chance
+
+
+
+
+
+ Power Up Chance Pvp
+
+
+
+
+
+ Attributes
+
+
+
+
+
+ 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
+
+
+
+
+
+ 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
+
+
+
+
+
+ Spawn Trigger
+
+
+
+
+
+ Automatic
+
+
+
+
+
+ Automatic During Event
+
+
+
+
+
+ Once At Event Start
+
+
+
+
+
+ Automatic During Wave
+
+
+
+
+
+ Once At Wave Start
+
+
+
+
+
+ Manually For Event
+
+
+
+
+
+ Wandering
+
+
+
+
+
+ Special Item Type
+
+
+
+
+
+ None
+
+
+
+
+
+ Ancient
+
+
+
+
+
+ Excellent
+
+
+
+
+
+ Random Item
+
+
+
+
+
+ Socket Item
+
+
+
+
+
+ Money
+
+
+
+
+
+ Stat Attributes
+
+
+ Stat Attributes
+
+
+
+
+
+ Attribute
+
+
+
+
+
+ Base Value
+
+
+
+
+
+ Increasable By Player
+
+
+
+
+
+ System Configuration
+
+
+ System Configurations
+
+
+
+
+
+ Ip Resolver
+
+
+
+
+
+ Ip Resolver Parameter
+
+
+
+
+
+ Auto Start
+
+
+
+
+
+ Auto Update Schema
+
+
+
+
+
+ Read Console Input
+
+
+
+
+
+ Terrain Attribute Type
+
+
+
+
+
+ Safezone
+
+
+
+
+
+ Character
+
+
+
+
+
+ Blocked
+
+
+
+
+
+ No Ground
+
+
+
+
+
+ Water
+
+
+
+
+
+ Transient Attribute
+
+
+ Transient Attributes
+
+
+
+
+
+ Warp Info
+
+
+ Warp Infos
+
+
+
+
+
+ Index
+
+
+
+
+
+ Name
+
+
+
+
+
+ Costs
+
+
+
+
+
+ Level Requirement
+
+
+
+
+
+ Gate
+
+
+
+
+
diff --git a/src/DataModel/Properties/Resources.Designer.cs b/src/DataModel/Properties/Resources.Designer.cs
index e4b591218..a29ebbe99 100644
--- a/src/DataModel/Properties/Resources.Designer.cs
+++ b/src/DataModel/Properties/Resources.Designer.cs
@@ -19,7 +19,7 @@ namespace MUnique.OpenMU.DataModel.Properties {
// 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.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "18.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
public class Resources {
@@ -60,6 +60,51 @@ internal Resources() {
}
}
+ ///
+ /// Looks up a localized string similar to Excellent.
+ ///
+ public static string Excellent {
+ get {
+ return ResourceManager.GetString("Excellent", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Luck.
+ ///
+ public static string Luck {
+ get {
+ return ResourceManager.GetString("Luck", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Skill.
+ ///
+ public static string Skill {
+ get {
+ return ResourceManager.GetString("Skill", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Slot.
+ ///
+ public static string Slot {
+ get {
+ return ResourceManager.GetString("Slot", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to S.
+ ///
+ public static string SocketAbbreviation {
+ get {
+ return ResourceManager.GetString("SocketAbbreviation", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Defines, if the (sub-)servers should be automatically started then when server process starts. This setting applies only to the all-in-one server (MUnique.OpenMU.Startup)..
///
diff --git a/src/DataModel/Properties/Resources.resx b/src/DataModel/Properties/Resources.resx
index 4f14da1f6..bd451d8dd 100644
--- a/src/DataModel/Properties/Resources.resx
+++ b/src/DataModel/Properties/Resources.resx
@@ -139,4 +139,19 @@ or behind a firewall) and you want to use it within your computer or private net
Defines, if the all-in-one server (MUnique.OpenMU.Startup) automatically updates the database schema when the server process starts. In a distributed deployment, the user must start the update manually over the admin panel.
+
+ Slot
+
+
+ Excellent
+
+
+ Skill
+
+
+ Luck
+
+
+ S
+
\ No newline at end of file
diff --git a/src/GameLogic/DuelRoom.cs b/src/GameLogic/DuelRoom.cs
index 5292558f1..ae77e8797 100644
--- a/src/GameLogic/DuelRoom.cs
+++ b/src/GameLogic/DuelRoom.cs
@@ -5,9 +5,7 @@
namespace MUnique.OpenMU.GameLogic;
using System.Threading;
-using MUnique.OpenMU.GameLogic.Views;
using MUnique.OpenMU.GameLogic.Views.Duel;
-using MUnique.OpenMU.Interfaces;
using Nito.AsyncEx;
///
@@ -247,8 +245,8 @@ public async Task RunDuelAsync()
for (int i = 5; i > 0; i--)
{
- var message = $"The battle begins in {i} seconds";
- await this.AllPlayers.ForEachAsync(p => p.InvokeViewPlugInAsync(m => m.ShowMessageAsync(message, MessageType.GoldenCenter))).ConfigureAwait(false);
+ var seconds = i;
+ await this.AllPlayers.ForEachAsync(p => p.ShowLocalizedGoldenMessageAsync(nameof(PlayerMessage.DuelBattleBeginsInSecondsFormat), seconds)).ConfigureAwait(false);
await Task.Delay(1000, cancellationToken).ConfigureAwait(false);
}
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 7361433dc..e14128457 100644
--- a/src/GameLogic/MUnique.OpenMU.GameLogic.csproj
+++ b/src/GameLogic/MUnique.OpenMU.GameLogic.csproj
@@ -41,4 +41,28 @@
+
+
+
+ True
+ True
+ PlayerMessage.resx
+
+
+ True
+ True
+ PlugInResources.resx
+
+
+
+
+
+ PublicResXFileCodeGenerator
+ PlayerMessage.Designer.cs
+
+
+ PublicResXFileCodeGenerator
+ PlugInResources.Designer.cs
+
+
diff --git a/src/GameLogic/MiniGames/BloodCastleContext.cs b/src/GameLogic/MiniGames/BloodCastleContext.cs
index 8bfcb7f41..b5feffde7 100644
--- a/src/GameLogic/MiniGames/BloodCastleContext.cs
+++ b/src/GameLogic/MiniGames/BloodCastleContext.cs
@@ -161,12 +161,7 @@ protected override async void OnDestructibleDied(object? sender, DeathInformatio
if (destructible.Definition.Number == StatueOfSaintNumber)
{
- var message = e.KillerName + " has destroyed the Crystal Statue!";
- await this.ForEachPlayerAsync(async player =>
- {
- await player.InvokeViewPlugInAsync(p => p.ShowMessageAsync(message, Interfaces.MessageType.GoldenCenter)).
- ConfigureAwait(false);
- }).ConfigureAwait(false);
+ await this.ShowGoldenMessageAsync(nameof(PlayerMessage.BloodCastleCrystalStatusDestroyed), e.KillerName).ConfigureAwait(false);
}
else if (destructible.Definition.Number == CastleGateNumber)
{
@@ -190,10 +185,12 @@ protected override async ValueTask OnPlayerPickedUpItemAsync((Player Picker, ILo
if (args.DroppedItem is DroppedItem { Item.Definition: { } definition } && definition.IsArchangelQuestItem())
{
this._questItemOwner = args.Picker;
- var message = args.Picker.Name + " has acquired the " + definition.Name;
- await this.ForEachPlayerAsync(
- player => player.InvokeViewPlugInAsync(
- p => p.ShowMessageAsync(message, Interfaces.MessageType.GoldenCenter)).AsTask()).ConfigureAwait(false);
+ await this.ForEachPlayerAsync(player => player.ShowLocalizedGoldenMessageAsync(
+ nameof(PlayerMessage.BloodCastleArchangelAquiredMessageFormat),
+ args.Picker.Name,
+ definition.Name.GetTranslation(player.Culture))
+ .AsTask())
+ .ConfigureAwait(false);
}
}
diff --git a/src/GameLogic/MiniGames/MiniGameContext.cs b/src/GameLogic/MiniGames/MiniGameContext.cs
index 19931c625..643c6d49c 100644
--- a/src/GameLogic/MiniGames/MiniGameContext.cs
+++ b/src/GameLogic/MiniGames/MiniGameContext.cs
@@ -517,6 +517,38 @@ protected async ValueTask SaveRankingAsync(IEnumerable<(int Rank, Character Char
}
}
+ ///
+ /// Shows a golden center-screen message to all players in the mini game.
+ ///
+ ///
+ /// The localized message template to be shown. The template will be translated
+ /// using each player's culture before formatting.
+ ///
+ ///
+ /// Optional format arguments which will be applied to the translated message
+ /// using .
+ ///
+ protected async ValueTask ShowGoldenMessageAsync(LocalizedString message, params object?[] args)
+ {
+ await this.ForEachPlayerAsync(player => player.InvokeViewPlugInAsync(p => p.ShowMessageAsync(string.Format(message.GetTranslation(player.Culture), args), MessageType.GoldenCenter)).AsTask()).ConfigureAwait(false);
+ }
+
+ ///
+ /// Shows a golden center-screen message to all players in the mini game.
+ ///
+ ///
+ /// The key to a localized message template to be shown.
+ /// The template will be translated using each player's culture before formatting.
+ ///
+ ///
+ /// Optional format arguments which will be applied to the translated message
+ /// using .
+ ///
+ protected async ValueTask ShowGoldenMessageAsync(string messageKey, params object?[] args)
+ {
+ await this.ForEachPlayerAsync(player => player.ShowLocalizedGoldenMessageAsync(messageKey, args).AsTask()).ConfigureAwait(false);
+ }
+
private async ValueTask<(int BonusScore, int GivenMoney)> GiveRewardAsync(Player player, MiniGameReward reward)
{
switch (reward.RewardType)
@@ -535,7 +567,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);
@@ -635,7 +667,7 @@ private async Task RunSpawnWaveAsync(MiniGameSpawnWave spawnWave, CancellationTo
this.Logger.LogDebug("{context}: Starting next wave: {wave}", this, spawnWave.Description);
if (spawnWave.Message is { } message)
{
- await this.ShowMessageAsync(message).ConfigureAwait(false);
+ await this.ShowGoldenMessageAsync(message).ConfigureAwait(false);
}
if (!this._currentSpawnWaves.TryAdd(spawnWave.WaveNumber, spawnWave))
@@ -679,7 +711,7 @@ private async ValueTask RunGameAsync(CancellationToken cancellationToken)
{
if (this.Definition.MapCreationPolicy != MiniGameMapCreationPolicy.Shared)
{
- await this.ShowMessageAsync($"{this.Definition.Name} starts in {(int)enterDuration.TotalMinutes} minutes.").ConfigureAwait(false);
+ await this.ShowGoldenMessageAsync(nameof(PlayerMessage.MiniGameStartsInMinutesFormat), this.Definition.Name, (int)enterDuration.TotalMinutes).ConfigureAwait(false);
}
await Task.Delay(messagePeriod, cancellationToken).ConfigureAwait(false);
@@ -693,7 +725,7 @@ private async ValueTask RunGameAsync(CancellationToken cancellationToken)
await this.CloseEntranceAsync().ConfigureAwait(false);
if (this.PlayerCount < this.MinimumPlayerCount)
{
- await this.ShowMessageAsync($"Can't start with less than {this.MinimumPlayerCount} players.").ConfigureAwait(false);
+ await this.ShowGoldenMessageAsync(nameof(PlayerMessage.MiniGameCantStartWithLessThanPlayers), this.MinimumPlayerCount).ConfigureAwait(false);
if (this.Definition.EntranceFee > 0)
{
await this.ForEachPlayerAsync(async player => player.TryAddMoney(this.Definition.EntranceFee)).ConfigureAwait(false);
@@ -773,11 +805,6 @@ private async ValueTask ShowCountdownMessageAsync()
await this.ForEachPlayerAsync(player => player.InvokeViewPlugInAsync(p => p.UpdateStateAsync(this.Definition.Type, this.State)).AsTask()).ConfigureAwait(false);
}
- private async ValueTask ShowMessageAsync(string message, MessageType messageType = MessageType.GoldenCenter)
- {
- await this.ForEachPlayerAsync(player => player.InvokeViewPlugInAsync(p => p.ShowMessageAsync(message, messageType)).AsTask()).ConfigureAwait(false);
- }
-
private async ValueTask StopAsync()
{
using (await this._enterLock.WriterLockAsync().ConfigureAwait(false))
@@ -919,7 +946,7 @@ private async Task ApplyChangeEventAsync(MiniGameChangeEvent changeEvent, string
if (changeEvent.Message is { } message)
{
- await this.ShowMessageAsync(string.Format(message, triggeredBy)).ConfigureAwait(false);
+ await this.ShowGoldenMessageAsync(message, triggeredBy).ConfigureAwait(false);
}
}
catch (Exception ex)
@@ -1020,7 +1047,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.GetTranslation(player.Culture) ?? 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/MuHelper/MuHelperConfiguration.cs b/src/GameLogic/MuHelper/MuHelperConfiguration.cs
index c47995596..0fc50e5c6 100644
--- a/src/GameLogic/MuHelper/MuHelperConfiguration.cs
+++ b/src/GameLogic/MuHelper/MuHelperConfiguration.cs
@@ -13,6 +13,7 @@ public class MuHelperConfiguration
/// Gets or sets the cost of the helper per stage. This value is applied per
/// , and multiplied with the total character level.
///
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.MuHelperConfiguration_CostPerStage_Name), Description = nameof(PlugInResources.MuHelperConfiguration_CostPerStage_Description))]
public IList CostPerStage { get; set; } = new List
{
20, 50, 80, 100, 120,
@@ -21,6 +22,7 @@ public class MuHelperConfiguration
///
/// Gets or sets the pay interval.
///
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.MuHelperConfiguration_PayInterval_Name))]
public TimeSpan PayInterval { get; set; } = TimeSpan.FromMinutes(5);
///
@@ -28,15 +30,18 @@ public class MuHelperConfiguration
/// After each interval, the stage gets increased to the next level with
/// usually increasing costs.
///
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.MuHelperConfiguration_StageInterval_Name), Description = nameof(PlugInResources.MuHelperConfiguration_StageInterval_Description))]
public TimeSpan StageInterval { get; set; } = TimeSpan.FromMinutes(200);
///
/// Gets or sets the minimum character level.
///
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.MuHelperConfiguration_MinLevel_Name))]
public int MinLevel { get; set; } = 1;
///
/// Gets or sets the maximum character level.
///
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.MuHelperConfiguration_MaxLevel_Name))]
public int MaxLevel { get; set; } = 400;
}
\ No newline at end of file
diff --git a/src/GameLogic/MuHelper/MuHelperFeaturePlugIn.cs b/src/GameLogic/MuHelper/MuHelperFeaturePlugIn.cs
index 4c477b7d3..50ec1ccd4 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 = nameof(PlugInResources.MuHelperFeaturePlugIn_Name), Description = nameof(PlugInResources.MuHelperFeaturePlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..ffbebcb65 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(PlugInResources.UpdatePetCommandManagerOnItemMovePlugIn_Name), Description = nameof(PlugInResources.UpdatePetCommandManagerOnItemMovePlugIn_Description), ResourceType = typeof(PlugInResources))]
public class UpdatePetCommandManagerOnItemMovePlugIn : IItemMovedPlugIn
{
///
diff --git a/src/GameLogic/Player.cs b/src/GameLogic/Player.cs
index 2ce747927..4cda5d326 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,53 @@ 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
[Guid("58518298-42BC-48D1-AB07-17A9D83A2103")]
-[PlugIn(nameof(AppleConsumeHandlerPlugIn), "Plugin which handles the apple consumption.")]
+[PlugIn]
+[Display(Name = nameof(PlugInResources.AppleConsumeHandlerPlugIn_Name), Description = nameof(PlugInResources.AppleConsumeHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
public class AppleConsumeHandlerPlugIn : HealthPotionConsumeHandlerPlugIn
{
///
diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/BlessJewelConsumeHandlerPlugIn.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/BlessJewelConsumeHandlerPlugIn.cs
index e192fa7fa..57af2828c 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(PlugInResources.BlessJewelConsumeHandlerPlugIn_Name), Description = nameof(PlugInResources.BlessJewelConsumeHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
public class BlessJewelConsumeHandlerPlugIn : UpgradeItemLevelJewelConsumeHandlerPlugIn
{
///
diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/FruitConsumeHandlerPlugIn.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/FruitConsumeHandlerPlugIn.cs
index 2216f42bf..4be50fd20 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(PlugInResources.FruitConsumeHandlerPlugIn_Name), Description = nameof(PlugInResources.FruitConsumeHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
public class FruitConsumeHandlerPlugIn : BaseConsumeHandlerPlugIn
{
///
diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/HarmonyJewelConsumeHandlerPlugIn.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/HarmonyJewelConsumeHandlerPlugIn.cs
index 85bb38c5d..a0db02074 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(PlugInResources.HarmonyJewelConsumeHandlerPlugIn_Name), Description = nameof(PlugInResources.HarmonyJewelConsumeHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
public class HarmonyJewelConsumeHandlerPlugIn : ItemUpgradeConsumeHandlerPlugIn
{
///
diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/HigherRefineStoneConsumeHandlerPlugIn.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/HigherRefineStoneConsumeHandlerPlugIn.cs
index 75be67440..36289d770 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(PlugInResources.HigherRefineStoneConsumeHandlerPlugIn_Name), Description = nameof(PlugInResources.HigherRefineStoneConsumeHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
public class HigherRefineStoneConsumeHandlerPlugIn : RefineStoneUpgradeConsumeHandlerPlugIn
{
///
diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/ItemConsumeAction.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/ItemConsumeAction.cs
index 3bc45e2c6..fb89393bd 100644
--- a/src/GameLogic/PlayerActions/ItemConsumeActions/ItemConsumeAction.cs
+++ b/src/GameLogic/PlayerActions/ItemConsumeActions/ItemConsumeAction.cs
@@ -6,9 +6,7 @@ namespace MUnique.OpenMU.GameLogic.PlayerActions.ItemConsumeActions;
using System.ComponentModel;
using MUnique.OpenMU.GameLogic.PlugIns;
-using MUnique.OpenMU.GameLogic.Views;
using MUnique.OpenMU.GameLogic.Views.Inventory;
-using MUnique.OpenMU.Interfaces;
///
/// Action to consume an item.
@@ -49,7 +47,7 @@ public async ValueTask HandleConsumeRequestAsync(Player player, byte inventorySl
if (consumeHandler is null)
{
await player.InvokeViewPlugInAsync(p => p.RequestedItemConsumptionFailedAsync()).ConfigureAwait(false);
- await player.InvokeViewPlugInAsync(p => p.ShowMessageAsync("Using this item is not implemented.", MessageType.BlueNormal)).ConfigureAwait(false);
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.UsingThisItemNotImplemented)).ConfigureAwait(false);
return;
}
diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/LargeComplexPotionConsumeHandlerPlugIn.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/LargeComplexPotionConsumeHandlerPlugIn.cs
index c30469f47..bf5a902e7 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(PlugInResources.LargeComplexPotionConsumeHandlerPlugIn_Name), Description = nameof(PlugInResources.LargeComplexPotionConsumeHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
public class LargeComplexPotionConsumeHandlerPlugIn : ComplexPotionConsumeHandlerPlugIn
{
///
diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/LargeHealthPotionConsumeHandlerPlugIn.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/LargeHealthPotionConsumeHandlerPlugIn.cs
index 0b64ee29d..5ad9f6959 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(PlugInResources.LargeHealthPotionConsumeHandlerPlugIn_Name), Description = nameof(PlugInResources.LargeHealthPotionConsumeHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
public class LargeHealthPotionConsumeHandlerPlugIn : HealthPotionConsumeHandlerPlugIn
{
///
diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/LargeManaPotionConsumeHandler.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/LargeManaPotionConsumeHandler.cs
index 8e02414df..34019abdc 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(PlugInResources.LargeManaPotionConsumeHandler_Name), Description = nameof(PlugInResources.LargeManaPotionConsumeHandler_Description), ResourceType = typeof(PlugInResources))]
public class LargeManaPotionConsumeHandler : ManaPotionConsumeHandler
{
///
diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/LargeShieldPotionConsumeHandlerPlugIn.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/LargeShieldPotionConsumeHandlerPlugIn.cs
index 54b7f30c2..3d7d5ee1e 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(PlugInResources.LargeShieldPotionConsumeHandlerPlugIn_Name), Description = nameof(PlugInResources.LargeShieldPotionConsumeHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
public class LargeShieldPotionConsumeHandlerPlugIn : ShieldPotionConsumeHandlerPlugIn
{
///
diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/LearnablesConsumeHandlerPlugIn.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/LearnablesConsumeHandlerPlugIn.cs
index 19240af63..a5592bc3d 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(PlugInResources.LearnablesConsumeHandlerPlugIn_Name), Description = nameof(PlugInResources.LearnablesConsumeHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
public class LearnablesConsumeHandlerPlugIn : BaseConsumeHandlerPlugIn
{
///
diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/LifeJewelConsumeHandlerPlugIn.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/LifeJewelConsumeHandlerPlugIn.cs
index 12d3e7378..1339b131f 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(PlugInResources.LifeJewelConsumeHandlerPlugIn_Name), Description = nameof(PlugInResources.LifeJewelConsumeHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
public class LifeJewelConsumeHandlerPlugIn : ItemUpgradeConsumeHandlerPlugIn
{
///
diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/LowerRefineStoneConsumeHandlerPlugIn.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/LowerRefineStoneConsumeHandlerPlugIn.cs
index 5089b9f08..7bfad4fdb 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(PlugInResources.LowerRefineStoneConsumeHandlerPlugIn_Name), Description = nameof(PlugInResources.LowerRefineStoneConsumeHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
public class LowerRefineStoneConsumeHandlerPlugIn : RefineStoneUpgradeConsumeHandlerPlugIn
{
///
diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/MediumComplexPotionConsumeHandlerPlugIn.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/MediumComplexPotionConsumeHandlerPlugIn.cs
index 7b0635e03..b0656d97b 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(PlugInResources.MediumComplexPotionConsumeHandlerPlugIn_Name), Description = nameof(PlugInResources.MediumComplexPotionConsumeHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
public class MediumComplexPotionConsumeHandlerPlugIn : ComplexPotionConsumeHandlerPlugIn
{
///
diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/MediumHealthPotionConsumeHandlerPlugIn.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/MediumHealthPotionConsumeHandlerPlugIn.cs
index 183dfc0e7..c99c70125 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(PlugInResources.MediumHealthPotionConsumeHandlerPlugIn_Name), Description = nameof(PlugInResources.MediumHealthPotionConsumeHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
public class MediumHealthPotionConsumeHandlerPlugIn : HealthPotionConsumeHandlerPlugIn
{
///
diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/MediumManaPotionConsumeHandler.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/MediumManaPotionConsumeHandler.cs
index 163fef35d..2dad94565 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(PlugInResources.MediumManaPotionConsumeHandler_Name), Description = nameof(PlugInResources.MediumManaPotionConsumeHandler_Description), ResourceType = typeof(PlugInResources))]
public class MediumManaPotionConsumeHandler : ManaPotionConsumeHandler
{
///
diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/MediumShieldPotionConsumeHandlerPlugIn.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/MediumShieldPotionConsumeHandlerPlugIn.cs
index 06e0a0c9e..b6e572c90 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(PlugInResources.MediumShieldPotionConsumeHandlerPlugIn_Name), Description = nameof(PlugInResources.MediumShieldPotionConsumeHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
public class MediumShieldPotionConsumeHandlerPlugIn : ShieldPotionConsumeHandlerPlugIn
{
///
diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/RecoverConsumeHandlerConfiguration.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/RecoverConsumeHandlerConfiguration.cs
index ebd5a5fa6..0cfd8e859 100644
--- a/src/GameLogic/PlayerActions/ItemConsumeActions/RecoverConsumeHandlerConfiguration.cs
+++ b/src/GameLogic/PlayerActions/ItemConsumeActions/RecoverConsumeHandlerConfiguration.cs
@@ -2,11 +2,9 @@
// Licensed under the MIT License. See LICENSE file in the project root for full license information.
//
-using System.ComponentModel.DataAnnotations;
-
namespace MUnique.OpenMU.GameLogic.PlayerActions.ItemConsumeActions;
-using System.ComponentModel;
+using System.ComponentModel.DataAnnotations;
using MUnique.OpenMU.DataModel.Composition;
///
@@ -17,11 +15,13 @@ public class RecoverConsumeHandlerConfiguration
///
/// Gets or sets the total recover percentage.
///
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.RecoverConsumeHandlerConfiguration_TotalRecoverPercentage_Name))]
public double TotalRecoverPercentage { get; set; }
///
/// Gets or sets the recover percentage increase by potion level.
///
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.RecoverConsumeHandlerConfiguration_RecoverPercentageIncreaseByPotionLevel_Name))]
public double RecoverPercentageIncreaseByPotionLevel { get; set; }
///
@@ -29,23 +29,27 @@ public class RecoverConsumeHandlerConfiguration
/// A value between 0 and 1 (exclusive).
/// 1 would mean that the recover works instantly since level 1.
///
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.RecoverConsumeHandlerConfiguration_RecoverDelayReductionByPotionLevel_Name), Description = nameof(PlugInResources.RecoverConsumeHandlerConfiguration_RecoverDelayReductionByPotionLevel_Description))]
public double RecoverDelayReductionByPotionLevel { get; set; }
///
/// Gets or sets the value which is additionally recovered.
/// From this value, the character level is subtracted.
///
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.RecoverConsumeHandlerConfiguration_AdditionalRecoverMinusCharacterLevel_Name), Description = nameof(PlugInResources.RecoverConsumeHandlerConfiguration_AdditionalRecoverMinusCharacterLevel_Description))]
public int AdditionalRecoverMinusCharacterLevel { get; set; }
///
/// Gets or sets the cooldown time for the next consumption.
///
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.RecoverConsumeHandlerConfiguration_CooldownTime_Name), Description = nameof(PlugInResources.RecoverConsumeHandlerConfiguration_CooldownTime_Description))]
public TimeSpan CooldownTime { get; set; }
///
/// Gets or sets the recover steps. If none are defined, the recover happens
/// instantly.
///
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.RecoverConsumeHandlerConfiguration_RecoverSteps_Name), Description = nameof(PlugInResources.RecoverConsumeHandlerConfiguration_RecoverSteps_Description))]
[ScaffoldColumn(true)]
[MemberOfAggregate]
public ICollection RecoverSteps { get; set; } = new List();
diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/SiegePotionConsumeHandlerPlugIn.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/SiegePotionConsumeHandlerPlugIn.cs
index 1200991c7..9c6dbfac5 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(PlugInResources.SiegePotionConsumeHandlerPlugIn_Name), Description = nameof(PlugInResources.SiegePotionConsumeHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
public class SiegePotionConsumeHandlerPlugIn : ApplyMagicEffectConsumeHandlerPlugIn
{
///
@@ -41,7 +42,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/ItemConsumeActions/SmallComplexPotionConsumeHandlerPlugIn.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/SmallComplexPotionConsumeHandlerPlugIn.cs
index 49c8cd8ff..ff25c56f8 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(PlugInResources.SmallComplexPotionConsumeHandlerPlugIn_Name), Description = nameof(PlugInResources.SmallComplexPotionConsumeHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
public class SmallComplexPotionConsumeHandlerPlugIn : ComplexPotionConsumeHandlerPlugIn
{
///
diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/SmallHealthPotionConsumeHandlerPlugIn.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/SmallHealthPotionConsumeHandlerPlugIn.cs
index ce93ddef2..44cbf8e00 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(PlugInResources.SmallHealthPotionConsumeHandlerPlugIn_Name), Description = nameof(PlugInResources.SmallHealthPotionConsumeHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
public class SmallHealthPotionConsumeHandlerPlugIn : HealthPotionConsumeHandlerPlugIn
{
///
diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/SmallManaPotionConsumeHandler.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/SmallManaPotionConsumeHandler.cs
index 7efa620de..30460fe20 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(PlugInResources.SmallManaPotionConsumeHandler_Name), Description = nameof(PlugInResources.SmallManaPotionConsumeHandler_Description), ResourceType = typeof(PlugInResources))]
public class SmallManaPotionConsumeHandler : ManaPotionConsumeHandler
{
///
diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/SmallShieldPotionConsumeHandlerPlugIn.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/SmallShieldPotionConsumeHandlerPlugIn.cs
index f0aba0422..d13b95f82 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(PlugInResources.SmallShieldPotionConsumeHandlerPlugIn_Name), Description = nameof(PlugInResources.SmallShieldPotionConsumeHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
public class SmallShieldPotionConsumeHandlerPlugIn : ShieldPotionConsumeHandlerPlugIn
{
///
diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/SoulJewelConsumeHandlerPlugIn.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/SoulJewelConsumeHandlerPlugIn.cs
index 7555d6dda..7d5cb3c57 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(PlugInResources.SoulJewelConsumeHandlerPlugIn_Name), Description = nameof(PlugInResources.SoulJewelConsumeHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
public class SoulJewelConsumeHandlerPlugIn : UpgradeItemLevelJewelConsumeHandlerPlugIn
{
///
diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/SummoningOrbConsumeHandlerPlugIn.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/SummoningOrbConsumeHandlerPlugIn.cs
index de6160dd4..41f04b563 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(PlugInResources.SummoningOrbConsumeHandlerPlugIn_Name), Description = nameof(PlugInResources.SummoningOrbConsumeHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
public class SummoningOrbConsumeHandlerPlugIn : LearnablesConsumeHandlerPlugIn
{
///
diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/TownPortalScrollConsumeHandlerPlugIn.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/TownPortalScrollConsumeHandlerPlugIn.cs
index 9fde4cc86..79f70e40c 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(PlugInResources.TownPortalScrollConsumeHandlerPlugIn_Name), Description = nameof(PlugInResources.TownPortalScrollConsumeHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
public class TownPortalScrollConsumeHandlerPlugIn : BaseConsumeHandlerPlugIn
{
///
diff --git a/src/GameLogic/PlayerActions/ItemConsumeActions/UpgradeItemLevelConfiguration.cs b/src/GameLogic/PlayerActions/ItemConsumeActions/UpgradeItemLevelConfiguration.cs
index 9f82fdc2f..90f479410 100644
--- a/src/GameLogic/PlayerActions/ItemConsumeActions/UpgradeItemLevelConfiguration.cs
+++ b/src/GameLogic/PlayerActions/ItemConsumeActions/UpgradeItemLevelConfiguration.cs
@@ -17,45 +17,48 @@ public class UpgradeItemLevelConfiguration
///
/// Gets or sets the success rate percentage.
///
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.UpgradeItemLevelConfiguration_SuccessRatePercentage_Name), Description = nameof(PlugInResources.UpgradeItemLevelConfiguration_SuccessRatePercentage_Description))]
public byte SuccessRatePercentage { get; set; }
///
/// Gets or sets the success rate bonus with luck percentage.
///
- [Display(Name = "Success Rate Luck Bonus %", Description = "The additional success rate, when the item has luck option.")]
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.UpgradeItemLevelConfiguration_SuccessRateBonusWithLuckPercentage_Name), Description = nameof(PlugInResources.UpgradeItemLevelConfiguration_SuccessRateBonusWithLuckPercentage_Description))]
public byte SuccessRateBonusWithLuckPercentage { get; set; }
///
/// Gets or sets the minimum item level which the item has to have before applying the jewel.
///
- [Display(Name = "Item Minimum Level", Description = "The minimum item level which the item has to have before applying the jewel.")]
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.UpgradeItemLevelConfiguration_MinimumLevel_Name), Description = nameof(PlugInResources.UpgradeItemLevelConfiguration_MinimumLevel_Description))]
public byte MinimumLevel { get; set; }
///
/// Gets or sets the maximum item level which the item has to have before applying the jewel.
///
- [Display(Name = "Item Maximum Level", Description = "The maximum item level which the item has to have before applying the jewel.")]
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.UpgradeItemLevelConfiguration_MaximumLevel_Name), Description = nameof(PlugInResources.UpgradeItemLevelConfiguration_MaximumLevel_Description))]
public byte MaximumLevel { get; set; }
///
/// Gets or sets the amount of levels which the item will be upgraded by.
///
- [Display(Name = "Add Levels Amount", Description = "How many times to add a level to the item (will become maximum allowed level).")]
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.UpgradeItemLevelConfiguration_LevelAmount_Name), Description = nameof(PlugInResources.UpgradeItemLevelConfiguration_LevelAmount_Description))]
public byte LevelAmount { get; set; } = 1;
///
/// Gets or sets the items which are allowed to be upgraded. If empty, all items are allowed except those in .
///
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.UpgradeItemLevelConfiguration_AllowedItems_Name), Description = nameof(PlugInResources.UpgradeItemLevelConfiguration_AllowedItems_Description))]
public ICollection AllowedItems { get; set; } = new List();
///
/// Gets or sets the items which are not allowed to be upgraded.
///
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.UpgradeItemLevelConfiguration_DisallowedItems_Name), Description = nameof(PlugInResources.UpgradeItemLevelConfiguration_DisallowedItems_Description))]
public ICollection DisallowedItems { get; set; } = new List();
///
/// Gets or sets the item level after which the item will drop to level 0 when it fails.
///
- [Display(Name = "Fail To 0 min. Level", Description = "The item level after which the item will drop to level 0 when it fails.")]
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.UpgradeItemLevelConfiguration_ResetToLevel0WhenFailMinLevel_Name), Description = nameof(PlugInResources.UpgradeItemLevelConfiguration_ResetToLevel0WhenFailMinLevel_Description))]
public byte ResetToLevel0WhenFailMinLevel { get; set; }
}
\ No newline at end of file
diff --git a/src/GameLogic/PlayerActions/Items/BuyNpcItemAction.cs b/src/GameLogic/PlayerActions/Items/BuyNpcItemAction.cs
index b7b90ad1b..d10c4cf1d 100644
--- a/src/GameLogic/PlayerActions/Items/BuyNpcItemAction.cs
+++ b/src/GameLogic/PlayerActions/Items/BuyNpcItemAction.cs
@@ -5,9 +5,7 @@
namespace MUnique.OpenMU.GameLogic.PlayerActions.Items;
using MUnique.OpenMU.GameLogic.PlugIns;
-using MUnique.OpenMU.GameLogic.Views;
using MUnique.OpenMU.GameLogic.Views.Inventory;
-using MUnique.OpenMU.Interfaces;
///
/// Action to buy items from a Monster merchant.
@@ -47,7 +45,7 @@ public async ValueTask BuyItemAsync(Player player, byte slot)
var storeItem = npcDefinition.MerchantStore.Items.FirstOrDefault(i => i.ItemSlot == slot);
if (storeItem is null)
{
- await player.InvokeViewPlugInAsync(p => p.ShowMessageAsync("Item Unknown", MessageType.BlueNormal)).ConfigureAwait(false);
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.ItemUnknown)).ConfigureAwait(false);
await player.InvokeViewPlugInAsync(p => p.BuyNpcItemFailedAsync()).ConfigureAwait(false);
return;
}
@@ -69,14 +67,14 @@ public async ValueTask BuyItemAsync(Player player, byte slot)
var toSlot = player.Inventory!.CheckInvSpace(storeItem);
if (toSlot is null)
{
- await player.InvokeViewPlugInAsync(p => p.ShowMessageAsync("Inventory Full", MessageType.BlueNormal)).ConfigureAwait(false);
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.InventoryFull)).ConfigureAwait(false);
await player.InvokeViewPlugInAsync(p => p.BuyNpcItemFailedAsync()).ConfigureAwait(false);
return;
}
if (!this.CheckMoney(player, storeItem))
{
- await player.InvokeViewPlugInAsync(p => p.ShowMessageAsync("You don't have enough Money", MessageType.BlueNormal)).ConfigureAwait(false);
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.NotEnoughMoney)).ConfigureAwait(false);
await player.InvokeViewPlugInAsync(p => p.BuyNpcItemFailedAsync()).ConfigureAwait(false);
return;
}
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/ItemRepairAction.cs b/src/GameLogic/PlayerActions/Items/ItemRepairAction.cs
index b18f55fa4..9d520d45e 100644
--- a/src/GameLogic/PlayerActions/Items/ItemRepairAction.cs
+++ b/src/GameLogic/PlayerActions/Items/ItemRepairAction.cs
@@ -30,7 +30,7 @@ public async ValueTask RepairItemAsync(Player player, byte slot)
var item = player.Inventory?.GetItem(slot);
if (item is null)
{
- await player.InvokeViewPlugInAsync(p => p.ShowMessageAsync("No Item there to repair.", MessageType.BlueNormal)).ConfigureAwait(false);
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.NoItemToRepair)).ConfigureAwait(false);
player.Logger.LogWarning("RepairItem: Player {0}, Itemslot {1} not filled", player.SelectedCharacter?.Name, slot);
return;
}
@@ -47,7 +47,7 @@ public async ValueTask RepairItemAsync(Player player, byte slot)
}
else
{
- await player.InvokeViewPlugInAsync(p => p.ShowMessageAsync("You don't have enough money to repair.", MessageType.BlueNormal)).ConfigureAwait(false);
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.NotEnoughMoneyToRepair)).ConfigureAwait(false);
}
}
@@ -94,7 +94,7 @@ public async ValueTask RepairAllItemsAsync(Player player)
}
else
{
- await player.InvokeViewPlugInAsync(p => p.ShowMessageAsync("You don't have enough money to repair.", MessageType.BlueNormal)).ConfigureAwait(false);
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.NotEnoughMoneyToRepair)).ConfigureAwait(false);
break;
}
}
diff --git a/src/GameLogic/PlayerActions/Items/ItemStackAction.cs b/src/GameLogic/PlayerActions/Items/ItemStackAction.cs
index 580d7a54e..4af072a5d 100644
--- a/src/GameLogic/PlayerActions/Items/ItemStackAction.cs
+++ b/src/GameLogic/PlayerActions/Items/ItemStackAction.cs
@@ -4,9 +4,7 @@
namespace MUnique.OpenMU.GameLogic.PlayerActions.Items;
-using MUnique.OpenMU.GameLogic.Views;
using MUnique.OpenMU.GameLogic.Views.Inventory;
-using MUnique.OpenMU.Interfaces;
///
/// Action to stack items.
@@ -56,7 +54,7 @@ public async ValueTask StackItemsAsync(Player player, byte stackId, byte stackSi
}
else
{
- await player.InvokeViewPlugInAsync(p => p.ShowMessageAsync("You are lacking of Jewels.", MessageType.BlueNormal)).ConfigureAwait(false);
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.YouLackOfJewels)).ConfigureAwait(false);
}
}
@@ -83,13 +81,13 @@ public async ValueTask UnstackItemsAsync(Player player, byte stackId, byte slot)
var stacked = player.Inventory?.GetItem(slot);
if (stacked is null)
{
- await player.InvokeViewPlugInAsync(p => p.ShowMessageAsync("Stacked Jewel not found.", MessageType.BlueNormal)).ConfigureAwait(false);
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.StackedJewelNotFound)).ConfigureAwait(false);
return;
}
if (stacked.Definition != mix.MixedJewel)
{
- await player.InvokeViewPlugInAsync(p => p.ShowMessageAsync("Selected Item is not a stacked Jewel.", MessageType.BlueNormal)).ConfigureAwait(false);
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.SelectedItemIsNotStackedJewel)).ConfigureAwait(false);
return;
}
@@ -98,7 +96,7 @@ public async ValueTask UnstackItemsAsync(Player player, byte stackId, byte slot)
var freeSlots = player.Inventory!.FreeSlots.Take(pieces).ToList();
if (freeSlots.Count < pieces)
{
- await player.InvokeViewPlugInAsync(p => p.ShowMessageAsync("Inventory got not enough Space.", MessageType.BlueNormal)).ConfigureAwait(false);
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.InventoryNotEnoughSpace)).ConfigureAwait(false);
return;
}
diff --git a/src/GameLogic/PlayerActions/Items/LostMapDroppedPlugIn.cs b/src/GameLogic/PlayerActions/Items/LostMapDroppedPlugIn.cs
index 1dc6b1ae9..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.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 +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.ShowMessageAsync("The gate npc is not defined.").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.ShowMessageAsync("The kalima entrance wasn't found.").ConfigureAwait(false);
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.KalimaEntranceNotFound)).ConfigureAwait(false);
return;
}
diff --git a/src/GameLogic/PlayerActions/Items/MoveItemAction.cs b/src/GameLogic/PlayerActions/Items/MoveItemAction.cs
index 9dc0a14a3..8f3f564c4 100644
--- a/src/GameLogic/PlayerActions/Items/MoveItemAction.cs
+++ b/src/GameLogic/PlayerActions/Items/MoveItemAction.cs
@@ -7,10 +7,8 @@ namespace MUnique.OpenMU.GameLogic.PlayerActions.Items;
using System.ComponentModel;
using MUnique.OpenMU.DataModel.Configuration.Items;
using MUnique.OpenMU.GameLogic.PlugIns;
-using MUnique.OpenMU.GameLogic.Views;
using MUnique.OpenMU.GameLogic.Views.Inventory;
using MUnique.OpenMU.GameLogic.Views.Trade;
-using MUnique.OpenMU.Interfaces;
using static MUnique.OpenMU.DataModel.InventoryConstants;
///
@@ -219,7 +217,7 @@ private async ValueTask CanMoveAsync(Player player, Item item, byte to
&& toStorage.Storage == player.Inventory
&& player.IsVaultLocked)
{
- await player.InvokeViewPlugInAsync(p => p.ShowMessageAsync("The vault is locked.", MessageType.BlueNormal)).ConfigureAwait(false);
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.TheVaultIsLocked)).ConfigureAwait(false);
return Movement.None;
}
@@ -235,7 +233,7 @@ private async ValueTask CanMoveAsync(Player player, Item item, byte to
if (player.CurrentMiniGame is { } miniGame
&& !miniGame.IsItemAllowedToEquip(item))
{
- await player.InvokeViewPlugInAsync(p => p.ShowMessageAsync("You can't equip this item during the event.", MessageType.BlueNormal)).ConfigureAwait(false);
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CantEquipItemDuringEvent)).ConfigureAwait(false);
return Movement.None;
}
@@ -263,13 +261,13 @@ static bool IsOneHandedOrShield(ItemDefinition definition) =>
return Movement.Normal;
}
- await player.InvokeViewPlugInAsync(p => p.ShowMessageAsync("You can't wear this item.", MessageType.BlueNormal)).ConfigureAwait(false);
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.YouCantWearThisItem)).ConfigureAwait(false);
return Movement.None;
}
if (item.Definition!.IsBoundToCharacter && toStorage != fromStorage)
{
- await player.InvokeViewPlugInAsync(p => p.ShowMessageAsync("This item is bound to the inventory of this character.", MessageType.BlueNormal)).ConfigureAwait(false);
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.ItemIsBoundToInventoryOfCharacter)).ConfigureAwait(false);
return Movement.None;
}
diff --git a/src/GameLogic/PlayerActions/Items/PickupItemAction.cs b/src/GameLogic/PlayerActions/Items/PickupItemAction.cs
index b99fa26dd..21f7d5b9e 100644
--- a/src/GameLogic/PlayerActions/Items/PickupItemAction.cs
+++ b/src/GameLogic/PlayerActions/Items/PickupItemAction.cs
@@ -101,11 +101,14 @@ private static bool IsLimitReached(Player player, ItemDefinition? itemDefinition
if (IsLimitReached(player, droppedItem.Item.Definition))
{
- var itemName = droppedItem.Item.Level > 0
- ? $"{droppedItem.Item.Definition?.Name} +{droppedItem.Item.Level}"
- : droppedItem.Item.Definition?.Name;
-
- await player.InvokeViewPlugInAsync(p => p.ShowMessageAsync($"Limit reached for '{itemName}'.", MessageType.BlueNormal)).ConfigureAwait(false);
+ var itemName = string.Empty;
+ using (CultureHelper.SetTemporaryCulture(player.Culture))
+ {
+ itemName = droppedItem.Item.Level > 0
+ ? $"{droppedItem.Item.Definition?.Name.ToString()} +{droppedItem.Item.Level.ToString()}"
+ : droppedItem.Item.Definition?.Name.ToString();
+ }
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.PickupLimitReached), itemName).ConfigureAwait(false);
return (false, null);
}
diff --git a/src/GameLogic/PlayerActions/Messenger/LetterSendAction.cs b/src/GameLogic/PlayerActions/Messenger/LetterSendAction.cs
index d89ed147e..0b932f088 100644
--- a/src/GameLogic/PlayerActions/Messenger/LetterSendAction.cs
+++ b/src/GameLogic/PlayerActions/Messenger/LetterSendAction.cs
@@ -30,7 +30,7 @@ public async ValueTask SendLetterAsync(Player player, string receiver, string me
var sendPrice = player.GameContext.Configuration.LetterSendPrice;
if (player.Money < sendPrice)
{
- await player.InvokeViewPlugInAsync(p => p.ShowMessageAsync("Not enough Zen to send a letter.", MessageType.BlueNormal)).ConfigureAwait(false);
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.NotEnoughMoneyToSendLetter)).ConfigureAwait(false);
await player.InvokeViewPlugInAsync(p => p.LetterSendResultAsync(LetterSendSuccess.NotEnoughMoney, letterId)).ConfigureAwait(false);
return;
}
@@ -63,7 +63,7 @@ public async ValueTask SendLetterAsync(Player player, string receiver, string me
{
player.Logger.LogError(ex, "Unexpected error when trying to send a letter");
await player.InvokeViewPlugInAsync(p => p.LetterSendResultAsync(LetterSendSuccess.TryAgain, letterId)).ConfigureAwait(false);
- await player.InvokeViewPlugInAsync(p => p.ShowMessageAsync("Oops, some error happened during sending the Letter.", MessageType.BlueNormal)).ConfigureAwait(false);
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.ErrorDuringSendingLetter)).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/PlayerActions/MuHelper/ChangeMuHelperStateAction.cs b/src/GameLogic/PlayerActions/MuHelper/ChangeMuHelperStateAction.cs
index d77ac14f2..865b936f4 100644
--- a/src/GameLogic/PlayerActions/MuHelper/ChangeMuHelperStateAction.cs
+++ b/src/GameLogic/PlayerActions/MuHelper/ChangeMuHelperStateAction.cs
@@ -5,8 +5,6 @@
namespace MUnique.OpenMU.GameLogic.PlayerActions.MuHelper;
using MUnique.OpenMU.GameLogic.MuHelper;
-using MUnique.OpenMU.GameLogic.Views;
-using MUnique.OpenMU.Interfaces;
///
/// Action to change the MU Helper state.
@@ -24,7 +22,7 @@ public async ValueTask ChangeHelperStateAsync(Player player, MuHelperStatus stat
if (configuration is null)
{
- await player.InvokeViewPlugInAsync(p => p.ShowMessageAsync("MU Helper is disabled", MessageType.BlueNormal)).ConfigureAwait(false);
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.MuHelperIsDisabled)).ConfigureAwait(false);
return;
}
@@ -37,7 +35,7 @@ public async ValueTask ChangeHelperStateAsync(Player player, MuHelperStatus stat
await player.MuHelper.StopAsync().ConfigureAwait(false);
break;
default: // unknown
- await player.InvokeViewPlugInAsync(p => p.ShowMessageAsync($"MU Helper can't handle status: {status}", MessageType.BlueNormal)).ConfigureAwait(false);
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.MuHelperCantHandleStatus), status).ConfigureAwait(false);
break;
}
}
diff --git a/src/GameLogic/PlayerActions/Party/PartyRequestAction.cs b/src/GameLogic/PlayerActions/Party/PartyRequestAction.cs
index a409e2409..df63f9246 100644
--- a/src/GameLogic/PlayerActions/Party/PartyRequestAction.cs
+++ b/src/GameLogic/PlayerActions/Party/PartyRequestAction.cs
@@ -4,9 +4,7 @@
namespace MUnique.OpenMU.GameLogic.PlayerActions.Party;
-using MUnique.OpenMU.GameLogic.Views;
using MUnique.OpenMU.GameLogic.Views.Party;
-using MUnique.OpenMU.Interfaces;
///
/// The party request action.
@@ -23,26 +21,26 @@ public async ValueTask HandlePartyRequestAsync(Player player, Player toRequest)
var isPartyMember = player.Party != null && !Equals(player.Party.PartyMaster, player);
if (player.CurrentMiniGame?.Definition.AllowParty is false)
{
- await this.SendMessageToPlayerAsync(player, "A party is not possible during this event.", MessageType.BlueNormal).ConfigureAwait(false);
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.PartyNotPossibleDuringEvent)).ConfigureAwait(false);
return;
}
if (toRequest.Party != null || toRequest.LastPartyRequester != null)
{
- await this.SendMessageToPlayerAsync(player, $"{toRequest.Name} is already in a party.", MessageType.BlueNormal).ConfigureAwait(false);
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.PlayerIsAlreadyInParty), toRequest.Name).ConfigureAwait(false);
return;
}
if (isPartyMember)
{
- await this.SendMessageToPlayerAsync(player, "You are not the Party Master.", MessageType.BlueNormal).ConfigureAwait(false);
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.YouAreNotPartyMaster)).ConfigureAwait(false);
return;
}
if (await toRequest.PlayerState.TryAdvanceToAsync(PlayerState.PartyRequest).ConfigureAwait(false))
{
await this.SendPartyRequestAsync(toRequest, player).ConfigureAwait(false);
- await this.SendMessageToPlayerAsync(player, $"Requested {toRequest.Name} for Party.", MessageType.BlueNormal).ConfigureAwait(false);
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.RequestedPlayerForParty), toRequest.Name).ConfigureAwait(false);
}
}
@@ -56,14 +54,4 @@ private async ValueTask SendPartyRequestAsync(IPartyMember toRequest, IPartyMemb
toRequest.LastPartyRequester = requester;
await toRequest.InvokeViewPlugInAsync(p => p.ShowPartyRequestAsync(requester)).ConfigureAwait(false);
}
-
- private async ValueTask SendMessageToPlayerAsync(IPartyMember partyMember, string message, MessageType type)
- {
- if (partyMember is not Player player)
- {
- return;
- }
-
- await player.InvokeViewPlugInAsync(p => p.ShowMessageAsync(message, type)).ConfigureAwait(false);
- }
}
\ No newline at end of file
diff --git a/src/GameLogic/PlayerActions/Party/PartyResponseAction.cs b/src/GameLogic/PlayerActions/Party/PartyResponseAction.cs
index 9b20c2fe8..97f67dbf5 100644
--- a/src/GameLogic/PlayerActions/Party/PartyResponseAction.cs
+++ b/src/GameLogic/PlayerActions/Party/PartyResponseAction.cs
@@ -5,8 +5,6 @@
namespace MUnique.OpenMU.GameLogic.PlayerActions.Party;
using MUnique.OpenMU.GameLogic;
-using MUnique.OpenMU.GameLogic.Views;
-using MUnique.OpenMU.Interfaces;
///
/// The party response action.
@@ -47,7 +45,7 @@ public async ValueTask HandleResponseAsync(Player player, bool accepted)
if (player.CurrentMiniGame?.Definition.AllowParty is false)
{
- await player.InvokeViewPlugInAsync(p => p.ShowMessageAsync("A party is not possible during this event.", MessageType.BlueNormal)).ConfigureAwait(false);
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.PartyNotPossibleDuringEvent)).ConfigureAwait(false);
player.LastPartyRequester = null;
return;
}
diff --git a/src/GameLogic/PlayerActions/PlayerStore/BuyRequestAction.cs b/src/GameLogic/PlayerActions/PlayerStore/BuyRequestAction.cs
index 28a3486ed..0cbf0cc54 100644
--- a/src/GameLogic/PlayerActions/PlayerStore/BuyRequestAction.cs
+++ b/src/GameLogic/PlayerActions/PlayerStore/BuyRequestAction.cs
@@ -66,7 +66,7 @@ public async ValueTask BuyItemAsync(Player player, Player requestedPlayer, byte
if (freeslot is null)
{
await player.InvokeViewPlugInAsync(p => p.ShowResultAsync(requestedPlayer, ItemBuyResult.MoneyOverflowOrNotEnoughSpace, null)).ConfigureAwait(false);
- await player.InvokeViewPlugInAsync(p => p.ShowMessageAsync("Not enough space in your inventory.", MessageType.BlueNormal)).ConfigureAwait(false);
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.InventoryNotEnoughSpace)).ConfigureAwait(false);
return;
}
@@ -113,7 +113,7 @@ public async ValueTask BuyItemAsync(Player player, Player requestedPlayer, byte
else
{
await player.InvokeViewPlugInAsync(p => p.ShowResultAsync(requestedPlayer, ItemBuyResult.MoneyOverflowOrNotEnoughSpace, null)).ConfigureAwait(false);
- await player.InvokeViewPlugInAsync(p => p.ShowMessageAsync("The inventory of the seller is full.", MessageType.BlueNormal)).ConfigureAwait(false);
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.SellerInventoryFull)).ConfigureAwait(false);
player.TryAddMoney(itemPrice);
}
}
diff --git a/src/GameLogic/PlayerActions/PlayerStore/StoreItemListRequestAction.cs b/src/GameLogic/PlayerActions/PlayerStore/StoreItemListRequestAction.cs
index ab61e2066..f16bb6ab3 100644
--- a/src/GameLogic/PlayerActions/PlayerStore/StoreItemListRequestAction.cs
+++ b/src/GameLogic/PlayerActions/PlayerStore/StoreItemListRequestAction.cs
@@ -22,7 +22,7 @@ public async ValueTask RequestStoreItemListAsync(Player player, Player requested
{
if (!(requestedPlayer.ShopStorage?.StoreOpen ?? false))
{
- await player.InvokeViewPlugInAsync(p => p.ShowMessageAsync("Player's Store not open.", MessageType.BlueNormal)).ConfigureAwait(false);
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.PlayerStoreNotOpen)).ConfigureAwait(false);
return;
}
diff --git a/src/GameLogic/PlayerActions/Quests/ElfSoldierBuffRequestAction.cs b/src/GameLogic/PlayerActions/Quests/ElfSoldierBuffRequestAction.cs
index b5675fb5d..a3f2439ba 100644
--- a/src/GameLogic/PlayerActions/Quests/ElfSoldierBuffRequestAction.cs
+++ b/src/GameLogic/PlayerActions/Quests/ElfSoldierBuffRequestAction.cs
@@ -43,7 +43,7 @@ public async ValueTask RequestBuffAsync(Player player)
if (player.Level > 220)
{
- await player.InvokeViewPlugInAsync(p => p.ShowMessageAsync("You're strong enough on your own.", MessageType.BlueNormal)).ConfigureAwait(false);
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.ElfSoldierStrongEnoughMessage)).ConfigureAwait(false);
return;
}
diff --git a/src/GameLogic/PlayerActions/Quests/QuestStartAction.cs b/src/GameLogic/PlayerActions/Quests/QuestStartAction.cs
index 3654d8f07..54838df07 100644
--- a/src/GameLogic/PlayerActions/Quests/QuestStartAction.cs
+++ b/src/GameLogic/PlayerActions/Quests/QuestStartAction.cs
@@ -4,10 +4,8 @@
namespace MUnique.OpenMU.GameLogic.PlayerActions.Quests;
-using MUnique.OpenMU.GameLogic.Views;
using MUnique.OpenMU.GameLogic.Views.Inventory;
using MUnique.OpenMU.GameLogic.Views.Quest;
-using MUnique.OpenMU.Interfaces;
///
/// A player action which implements the starting of a quest.
@@ -65,7 +63,7 @@ public async ValueTask StartQuestAsync(Player player, short group, short number)
}
else
{
- await player.InvokeViewPlugInAsync(p => p.ShowMessageAsync("Not enough money to proceed", MessageType.BlueNormal)).ConfigureAwait(false);
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.NotEnoughMoneyToProceed)).ConfigureAwait(false);
return;
}
}
diff --git a/src/GameLogic/PlayerActions/Skills/ChainLightningSkillPlugIn.cs b/src/GameLogic/PlayerActions/Skills/ChainLightningSkillPlugIn.cs
index 68cf24200..359819af8 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(PlugInResources.ChainLightningSkillPlugIn_Name), Description = nameof(PlugInResources.ChainLightningSkillPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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 a8feddda6..5b9a82a5c 100644
--- a/src/GameLogic/PlayerActions/Skills/DrainLifeSkillPlugIn.cs
+++ b/src/GameLogic/PlayerActions/Skills/DrainLifeSkillPlugIn.cs
@@ -13,7 +13,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(DrainLifeSkillPlugIn), "Handles the drain life skill of the summoner class. Additionally to the attacked target, it regains life for damage dealt.")]
+[PlugIn]
+[Display(Name = nameof(PlugInResources.DrainLifeSkillPlugIn_Name), Description = nameof(PlugInResources.DrainLifeSkillPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..90a0b09d8 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 = nameof(PlugInResources.EarthShakeSkillPlugIn_Name), Description = nameof(PlugInResources.EarthShakeSkillPlugIn_Description), ResourceType = typeof(PlugInResources))]
public class EarthShakeSkillPlugIn : IAreaSkillPlugIn
{
///
diff --git a/src/GameLogic/PlayerActions/Skills/ForceSkillAction.cs b/src/GameLogic/PlayerActions/Skills/ForceSkillAction.cs
index 480516e08..35036ff73 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(PlugInResources.ForceSkillAction_Name), Description = nameof(PlugInResources.ForceSkillAction_Description), ResourceType = typeof(PlugInResources))]
[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..479f5f4d8 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(PlugInResources.ForceWaveStrengSkillAction_Name), Description = nameof(PlugInResources.ForceWaveStrengSkillAction_Description), ResourceType = typeof(PlugInResources))]
[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..d42a111b9 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(PlugInResources.NovaSkillStartPlugin_Name), Description = nameof(PlugInResources.NovaSkillStartPlugin_Description), ResourceType = typeof(PlugInResources))]
[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..c2b3dd27d 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(PlugInResources.NovaSkillStopPlugin_Name), Description = nameof(PlugInResources.NovaSkillStopPlugin_Description), ResourceType = typeof(PlugInResources))]
[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..fc06ff227 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 = nameof(PlugInResources.PlasmaStormSkillPlugIn_Name), Description = nameof(PlugInResources.PlasmaStormSkillPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..9afd7f06c 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(PlugInResources.SoulBarrierProficieSkillAction_Name), Description = nameof(PlugInResources.SoulBarrierProficieSkillAction_Description), ResourceType = typeof(PlugInResources))]
[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..a02104873 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(PlugInResources.SoulBarrierStrengSkillAction_Name), Description = nameof(PlugInResources.SoulBarrierStrengSkillAction_Description), ResourceType = typeof(PlugInResources))]
[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..eb4e5a72e 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(PlugInResources.SummonPartySkillPlugin_Name), Description = nameof(PlugInResources.SummonPartySkillPlugin_Description), ResourceType = typeof(PlugInResources))]
[Guid("44e34497-c9e1-4c15-9388-589dfa3fa820")]
public class SummonPartySkillPlugin : TargetedSkillPluginBase
{
@@ -122,7 +123,7 @@ private async ValueTask SummonTargetsAsync(Player player, IEnumerable ta
if (player.CurrentMap!.Definition.TryGetRequirementError(targetPlayer, out var errorMessage))
{
- await targetPlayer.InvokeViewPlugInAsync(p => p.ShowMessageAsync(errorMessage, Interfaces.MessageType.BlueNormal)).ConfigureAwait(false);
+ await targetPlayer.ShowBlueMessageAsync(errorMessage).ConfigureAwait(false);
continue;
}
diff --git a/src/GameLogic/PlayerActions/Skills/TargetedSkillDefaultPlugin.cs b/src/GameLogic/PlayerActions/Skills/TargetedSkillDefaultPlugin.cs
index e4dcddb32..e6f0f4f4e 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(PlugInResources.TargetedSkillDefaultPlugin_Name), Description = nameof(PlugInResources.TargetedSkillDefaultPlugin_Description), ResourceType = typeof(PlugInResources))]
[Guid("eb2949fb-5ed2-407e-a4e8-e3015ed5692b")]
public class TargetedSkillDefaultPlugin : TargetedSkillPluginBase
{
diff --git a/src/GameLogic/PlayerActions/TalkNpcAction.cs b/src/GameLogic/PlayerActions/TalkNpcAction.cs
index c2e23c086..05009e24f 100644
--- a/src/GameLogic/PlayerActions/TalkNpcAction.cs
+++ b/src/GameLogic/PlayerActions/TalkNpcAction.cs
@@ -80,7 +80,7 @@ private async ValueTask ShowDialogOfOpenedNpcAsync(Player player)
}
else
{
- await player.InvokeViewPlugInAsync(p => p.ShowMessageAsync($"Talking to this NPC ({npcStats.Number}, {npcStats.Designation}) is not implemented yet.", MessageType.BlueNormal)).ConfigureAwait(false);
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.TalkingNotImplementedFormat), npcStats.Number, npcStats.Designation).ConfigureAwait(false);
}
await player.PlayerState.TryAdvanceToAsync(PlayerState.EnteredWorld).ConfigureAwait(false);
diff --git a/src/GameLogic/PlayerActions/Trade/BaseTradeAction.cs b/src/GameLogic/PlayerActions/Trade/BaseTradeAction.cs
index 7d47e914e..d5f3dace6 100644
--- a/src/GameLogic/PlayerActions/Trade/BaseTradeAction.cs
+++ b/src/GameLogic/PlayerActions/Trade/BaseTradeAction.cs
@@ -78,14 +78,14 @@ protected void ResetTradeState(ITrader trader)
/// Sends the message to the trader.
///
/// The trader.
- /// The message.
- protected async ValueTask SendMessageAsync(ITrader trader, string message)
+ /// The key of the message in .
+ protected async ValueTask SendMessageAsync(ITrader trader, string messageKey)
{
- if (trader is IWorldObserver observer)
+ if (trader is Player player)
{
try
{
- await observer.InvokeViewPlugInAsync(p => p.ShowMessageAsync(message, MessageType.BlueNormal)).ConfigureAwait(false);
+ await player.ShowLocalizedBlueMessageAsync(messageKey).ConfigureAwait(false);
}
catch (Exception ex)
{
diff --git a/src/GameLogic/PlayerActions/Trade/TradeButtonAction.cs b/src/GameLogic/PlayerActions/Trade/TradeButtonAction.cs
index 08bc5e293..24bc0213c 100644
--- a/src/GameLogic/PlayerActions/Trade/TradeButtonAction.cs
+++ b/src/GameLogic/PlayerActions/Trade/TradeButtonAction.cs
@@ -85,8 +85,9 @@ private async ValueTask InternalFinishTradeAsync(ITrader trader, IT
if (!await TryAddItemsOfTradingPartnerAsync(trader).ConfigureAwait(false) || !await TryAddItemsOfTradingPartnerAsync(tradingPartner).ConfigureAwait(false))
{
- await this.SendMessageAsync(trader, "Inventory is full.").ConfigureAwait(false);
- await this.SendMessageAsync(tradingPartner, "Inventory is full.").ConfigureAwait(false);
+ // TODO: Maybe notify which player has the full inventory.
+ await this.SendMessageAsync(trader, nameof(PlayerMessage.InventoryFull)).ConfigureAwait(false);
+ await this.SendMessageAsync(tradingPartner, nameof(PlayerMessage.InventoryFull)).ConfigureAwait(false);
return TradeResult.FailedByFullInventory;
}
@@ -109,8 +110,8 @@ private async ValueTask InternalFinishTradeAsync(ITrader trader, IT
}
catch (Exception exception)
{
- await this.SendMessageAsync(trader, "An unexpected error occured during closing the trade.").ConfigureAwait(false);
- await this.SendMessageAsync(tradingPartner, "An unexpected error occured during closing the trade.").ConfigureAwait(false);
+ await this.SendMessageAsync(trader, nameof(PlayerMessage.UnexpectedErrorDuringClosingTrade)).ConfigureAwait(false);
+ await this.SendMessageAsync(tradingPartner, nameof(PlayerMessage.UnexpectedErrorDuringClosingTrade)).ConfigureAwait(false);
context.Allowed = false;
partnerContext.Allowed = false;
(trader as Player)?.Logger.LogError(exception, $"An unexpected error occured during closing the trade. trader: {trader.Name}, partner:{tradingPartner.Name}");
diff --git a/src/GameLogic/PlayerActions/Trade/TradeMoneyAction.cs b/src/GameLogic/PlayerActions/Trade/TradeMoneyAction.cs
index f2665c37c..a9a7beeaa 100644
--- a/src/GameLogic/PlayerActions/Trade/TradeMoneyAction.cs
+++ b/src/GameLogic/PlayerActions/Trade/TradeMoneyAction.cs
@@ -4,10 +4,8 @@
namespace MUnique.OpenMU.GameLogic.PlayerActions.Trade;
-using MUnique.OpenMU.GameLogic.Views;
using MUnique.OpenMU.GameLogic.Views.Inventory;
using MUnique.OpenMU.GameLogic.Views.Trade;
-using MUnique.OpenMU.Interfaces;
///
/// Action to set the traded money.
@@ -24,7 +22,7 @@ public async ValueTask TradeMoneyAsync(Player player, uint moneyAmount)
// Check if Trade is open
if (player.PlayerState.CurrentState != PlayerState.TradeOpened)
{
- await player.InvokeViewPlugInAsync(p => p.ShowMessageAsync("Uncheck trade accept button first", MessageType.BlueNormal)).ConfigureAwait(false);
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.UncheckTradeAcceptButtonFirst)).ConfigureAwait(false);
return;
}
diff --git a/src/GameLogic/PlayerActions/WarpAction.cs b/src/GameLogic/PlayerActions/WarpAction.cs
index 670b1c95a..7973e35eb 100644
--- a/src/GameLogic/PlayerActions/WarpAction.cs
+++ b/src/GameLogic/PlayerActions/WarpAction.cs
@@ -27,7 +27,7 @@ public async ValueTask WarpToAsync(Player player, WarpInfo warpInfo)
}
else
{
- await player.InvokeViewPlugInAsync(p => p.ShowMessageAsync(errorMessage, MessageType.BlueNormal)).ConfigureAwait(false);
+ await player.ShowBlueMessageAsync(errorMessage).ConfigureAwait(false);
}
}
diff --git a/src/GameLogic/PlayerActions/WarpGateAction.cs b/src/GameLogic/PlayerActions/WarpGateAction.cs
index 7c8a336f9..f073c4cb2 100644
--- a/src/GameLogic/PlayerActions/WarpGateAction.cs
+++ b/src/GameLogic/PlayerActions/WarpGateAction.cs
@@ -5,7 +5,6 @@
namespace MUnique.OpenMU.GameLogic.PlayerActions;
using MUnique.OpenMU.GameLogic.Attributes;
-using MUnique.OpenMU.GameLogic.Views;
using MUnique.OpenMU.GameLogic.Views.World;
using MUnique.OpenMU.Pathfinding;
@@ -46,13 +45,13 @@ private async ValueTask IsWarpLegitAsync(Player player, EnterGate? enterGa
var requirement = player.SelectedCharacter?.GetEffectiveMoveLevelRequirement(enterGate.LevelRequirement);
if (requirement > player.Attributes![Stats.Level])
{
- await player.InvokeViewPlugInAsync(p => p.ShowMessageAsync("Your level is too low to enter this map.", Interfaces.MessageType.BlueNormal)).ConfigureAwait(false);
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.LevelTooLowToEnterMap)).ConfigureAwait(false);
return false;
}
if (enterGate.TargetGate.Map.TryGetRequirementError(player, out var errorMessage))
{
- await player.InvokeViewPlugInAsync(p => p.ShowMessageAsync(errorMessage, Interfaces.MessageType.BlueNormal)).ConfigureAwait(false);
+ await player.ShowBlueMessageAsync(errorMessage).ConfigureAwait(false);
return false;
}
diff --git a/src/GameLogic/PlugIns/ChatCommands/AddAgilityStatChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/AddAgilityStatChatCommandPlugIn.cs
index 995c890b7..7ffb3eabf 100644
--- a/src/GameLogic/PlugIns/ChatCommands/AddAgilityStatChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/AddAgilityStatChatCommandPlugIn.cs
@@ -13,8 +13,9 @@ 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.")]
-[ChatCommandHelp(Command, "Adds the specified amount of agility points to the character.", null, MinimumStatus)]
+[PlugIn]
+[Display(Name = nameof(PlugInResources.AddAgilityStatChatCommandPlugIn_Name), Description = nameof(PlugInResources.AddAgilityStatChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
+[ChatCommandHelp(Command, null, MinimumStatus)]
public class AddAgilityStatChatCommandPlugIn : AddStatChatCommandPlugIn, IDisabledByDefault
{
private const string Command = "/addagi";
diff --git a/src/GameLogic/PlugIns/ChatCommands/AddCommandStatChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/AddCommandStatChatCommandPlugIn.cs
index c69c74733..1740f28be 100644
--- a/src/GameLogic/PlugIns/ChatCommands/AddCommandStatChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/AddCommandStatChatCommandPlugIn.cs
@@ -13,8 +13,9 @@ 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.")]
-[ChatCommandHelp(Command, "Adds the specified amount of command points to the character.", null, MinimumStatus)]
+[PlugIn]
+[Display(Name = nameof(PlugInResources.AddCommandStatChatCommandPlugIn_Name), Description = nameof(PlugInResources.AddCommandStatChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
+[ChatCommandHelp(Command, null, MinimumStatus)]
public class AddCommandStatChatCommandPlugIn : AddStatChatCommandPlugIn, IDisabledByDefault
{
private const string Command = "/addcmd";
diff --git a/src/GameLogic/PlugIns/ChatCommands/AddEnergyStatChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/AddEnergyStatChatCommandPlugIn.cs
index cc36ba6de..985b8d1e1 100644
--- a/src/GameLogic/PlugIns/ChatCommands/AddEnergyStatChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/AddEnergyStatChatCommandPlugIn.cs
@@ -13,8 +13,9 @@ 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.")]
-[ChatCommandHelp(Command, "Adds the specified amount of energy points to the character.", null, MinimumStatus)]
+[PlugIn]
+[Display(Name = nameof(PlugInResources.AddEnergyStatChatCommandPlugIn_Name), Description = nameof(PlugInResources.AddEnergyStatChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
+[ChatCommandHelp(Command, null, MinimumStatus)]
public class AddEnergyStatChatCommandPlugIn : AddStatChatCommandPlugIn, IDisabledByDefault
{
private const string Command = "/addene";
diff --git a/src/GameLogic/PlugIns/ChatCommands/AddStatChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/AddStatChatCommandPlugIn.cs
index 6146025c9..5160b443c 100644
--- a/src/GameLogic/PlugIns/ChatCommands/AddStatChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/AddStatChatCommandPlugIn.cs
@@ -5,8 +5,6 @@
namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands;
using System.Runtime.InteropServices;
-using MUnique.OpenMU.AttributeSystem;
-using MUnique.OpenMU.GameLogic.Attributes;
using MUnique.OpenMU.GameLogic.PlayerActions.Character;
using MUnique.OpenMU.PlugIns;
@@ -14,9 +12,10 @@ 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.")]
-[ChatCommandHelp(Command, "Adds the specified amount of stat points to the specified attribute of the character.", typeof(Arguments), MinimumStatus)]
-public class AddStatChatCommandPlugIn : IChatCommandPlugIn
+[PlugIn]
+[Display(Name = nameof(PlugInResources.AddStatChatCommandPlugIn_Name), Description = nameof(PlugInResources.AddStatChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
+[ChatCommandHelp(Command, typeof(Arguments), MinimumStatus)]
+public class AddStatChatCommandPlugIn : ChatCommandPlugInBase
{
private const string Command = "/add";
@@ -25,69 +24,55 @@ public class AddStatChatCommandPlugIn : IChatCommandPlugIn
private readonly IncreaseStatsAction _action = new();
///
- public virtual string Key => Command;
+ public override string Key => Command;
///
- public virtual CharacterStatus MinCharacterStatusRequirement => MinimumStatus;
+ public override CharacterStatus MinCharacterStatusRequirement => MinimumStatus;
///
- public virtual async ValueTask HandleCommandAsync(Player player, string command)
+ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments arguments)
{
- 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 attribute = await this.TryGetAttributeAsync(player, arguments.StatType).ConfigureAwait(false);
+ if (attribute is null)
{
- await player.ShowMessageAsync(e.Message).ConfigureAwait(false);
+ return;
}
- }
- private AttributeDefinition GetAttribute(Player player, string? statType)
- {
- var attribute = statType switch
+ var selectedCharacter = player.SelectedCharacter;
+
+ if (!selectedCharacter.CanIncreaseStats(arguments.Amount))
{
- "str" => Stats.BaseStrength,
- "agi" => Stats.BaseAgility,
- "vit" => Stats.BaseVitality,
- "ene" => Stats.BaseEnergy,
- "cmd" => Stats.BaseLeadership,
- _ => throw new ArgumentException($"Unknown stat: '{statType}'."),
- };
+ return;
+ }
- if (player.SelectedCharacter!.Attributes.All(sa => sa.Definition != attribute))
+ if (player.CurrentMiniGame is not null)
{
- throw new ArgumentException($"The character has no stat attribute '{statType}'.");
+ await player.ShowLocalizedBlueMessageAsync(PlayerMessage.AddingMultiplePointsWhileMiniGameNotAllowed).ConfigureAwait(false);
+ return;
}
- return attribute;
+ await this._action.IncreaseStatsAsync(player, attribute, arguments.Amount).ConfigureAwait(false);
}
- private class Arguments : ArgumentsBase
+ ///
+ /// Arguments for this command.
+ ///
+ public class Arguments : ArgumentsBase
{
+ ///
+ /// Gets or sets the type of the stat.
+ ///
[ValidValues("str", "agi", "vit", "ene", "cmd")]
public string? StatType { get; set; }
+ ///
+ /// Gets or sets the amount.
+ ///
public ushort Amount { get; set; }
}
}
\ No newline at end of file
diff --git a/src/GameLogic/PlugIns/ChatCommands/AddStrengthStatChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/AddStrengthStatChatCommandPlugIn.cs
index ad20a3dd5..ba48d7f02 100644
--- a/src/GameLogic/PlugIns/ChatCommands/AddStrengthStatChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/AddStrengthStatChatCommandPlugIn.cs
@@ -13,8 +13,9 @@ 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.")]
-[ChatCommandHelp(Command, "Adds the specified amount of strength points to the character.", null, MinimumStatus)]
+[PlugIn]
+[Display(Name = nameof(PlugInResources.AddStrengthStatChatCommandPlugIn_Name), Description = nameof(PlugInResources.AddStrengthStatChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
+[ChatCommandHelp(Command, null, MinimumStatus)]
public class AddStrengthStatChatCommandPlugIn : AddStatChatCommandPlugIn, IDisabledByDefault
{
private const string Command = "/addstr";
diff --git a/src/GameLogic/PlugIns/ChatCommands/AddVitalityStatChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/AddVitalityStatChatCommandPlugIn.cs
index aafe2da63..c67280268 100644
--- a/src/GameLogic/PlugIns/ChatCommands/AddVitalityStatChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/AddVitalityStatChatCommandPlugIn.cs
@@ -13,8 +13,9 @@ 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.")]
-[ChatCommandHelp(Command, "Adds the specified amount of vitality points to the character.", null, MinimumStatus)]
+[PlugIn]
+[Display(Name = nameof(PlugInResources.AddVitalityStatChatCommandPlugIn_Name), Description = nameof(PlugInResources.AddVitalityStatChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
+[ChatCommandHelp(Command, null, MinimumStatus)]
public class AddVitalityStatChatCommandPlugIn : AddStatChatCommandPlugIn, IDisabledByDefault
{
private const string Command = "/addvit";
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/BanAccChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/BanAccChatCommandPlugIn.cs
index f59c682c8..1bdb61bb1 100644
--- a/src/GameLogic/PlugIns/ChatCommands/BanAccChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/BanAccChatCommandPlugIn.cs
@@ -12,8 +12,9 @@ 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.")]
-[ChatCommandHelp(Command, "Bans an account from the game.", typeof(BanAccChatCommandArgs), CharacterStatus.GameMaster)]
+[PlugIn]
+[Display(Name = nameof(PlugInResources.BanAccChatCommandPlugIn_Name), Description = nameof(PlugInResources.BanAccChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
+[ChatCommandHelp(Command, typeof(BanAccChatCommandArgs), CharacterStatus.GameMaster)]
public class BanAccChatCommandPlugIn : ChatCommandPlugInBase
{
private const string Command = "/banacc";
@@ -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..e41d4257b 100644
--- a/src/GameLogic/PlugIns/ChatCommands/BanCharChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/BanCharChatCommandPlugIn.cs
@@ -12,8 +12,9 @@ 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.")]
-[ChatCommandHelp(Command, "Bans the account of a character from the game.", typeof(BanCharChatCommandArgs), CharacterStatus.GameMaster)]
+[PlugIn]
+[Display(Name = nameof(PlugInResources.BanCharChatCommandPlugIn_Name), Description = nameof(PlugInResources.BanCharChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
+[ChatCommandHelp(Command, typeof(BanCharChatCommandArgs), CharacterStatus.GameMaster)]
public class BanCharChatCommandPlugIn : ChatCommandPlugInBase
{
private const string Command = "/banchar";
@@ -27,8 +28,11 @@ public class BanCharChatCommandPlugIn : ChatCommandPlugInBase
protected override async ValueTask DoHandleCommandAsync(Player gameMaster, BanCharChatCommandArgs arguments)
{
- await this.ChangeAccountStateByCharacterNameAsync(gameMaster, arguments.CharacterName ?? string.Empty, AccountState.Banned).ConfigureAwait(false);
+ if (!await this.TryChangeAccountStateByCharacterNameAsync(gameMaster, arguments.CharacterName ?? string.Empty, AccountState.Banned).ConfigureAwait(false))
+ {
+ return;
+ }
- 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
diff --git a/src/GameLogic/PlugIns/ChatCommands/ChangeLanguageChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/ChangeLanguageChatCommandPlugIn.cs
new file mode 100644
index 000000000..75d6bb6ba
--- /dev/null
+++ b/src/GameLogic/PlugIns/ChatCommands/ChangeLanguageChatCommandPlugIn.cs
@@ -0,0 +1,62 @@
+//
+// 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 = nameof(PlugInResources.ChangeLanguageChatCommandPlugIn_Name), Description = nameof(PlugInResources.ChangeLanguageChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
+[ChatCommandHelp(Command, 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 = CultureHelper.GetAvailableCultures();
+
+ 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, IEnumerable 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..4ff9b6dec 100644
--- a/src/GameLogic/PlugIns/ChatCommands/CharInfoChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/CharInfoChatCommandPlugIn.cs
@@ -14,8 +14,9 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands;
/// 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.")]
-[ChatCommandHelp(Command, "Returns information about the character back to the requester.", typeof(CharInfoChatCommandArgs), CharacterStatus.GameMaster)]
+[PlugIn]
+[Display(Name = nameof(PlugInResources.CharInfoChatCommandPlugIn_Name), Description = nameof(PlugInResources.CharInfoChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
+[ChatCommandHelp(Command, typeof(CharInfoChatCommandArgs), CharacterStatus.GameMaster)]
public class CharInfoChatCommandPlugIn : ChatCommandPlugInBase
{
private const string Command = "/charinfo";
@@ -29,27 +30,27 @@ public class CharInfoChatCommandPlugIn : ChatCommandPlugInBase
protected override async ValueTask DoHandleCommandAsync(Player gameMaster, CharInfoChatCommandArgs arguments)
{
- var player = this.GetPlayerByCharacterName(gameMaster, arguments.CharacterName ?? string.Empty);
+ var player = await this.GetPlayerByCharacterNameAsync(gameMaster, arguments.CharacterName ?? string.Empty).ConfigureAwait(false);
- if (player.Account is not { } account
+ if (player?.Account is not { } account
|| player.SelectedCharacter is not { } character)
{
return;
}
- await this.ShowMessageToAsync(gameMaster, $"Account Name: {account.LoginName}").ConfigureAwait(false);
+ await gameMaster.ShowBlueMessageAsync($"Account Name: {account.LoginName}").ConfigureAwait(false);
- await this.ShowAllLinesMessageToAsync(gameMaster, GetCharacterInfo(character)).ConfigureAwait(false);
+ await this.ShowAllLinesMessageToAsync(gameMaster, GetCharacterInfo(gameMaster, character)).ConfigureAwait(false);
await this.ShowAllLinesMessageToAsync(gameMaster, player.Attributes?.ToString()).ConfigureAwait(false);
}
- private static string GetCharacterInfo(Character character)
+ private static string GetCharacterInfo(Player gameMaster, Character character)
{
var stringBuilder = new StringBuilder()
.AppendLine($"Id: {character.Id}")
.AppendLine($"Name: {character.Name}")
- .AppendLine($"Class: {character.CharacterClass?.Name}")
+ .AppendLine($"Class: {character.CharacterClass?.Name.GetTranslation(gameMaster.Culture)}")
.AppendLine($"Slot: {character.CharacterSlot}")
.AppendLine($"Create Date: {character.CreateDate}")
.AppendLine($"Exp: {character.Experience}")
@@ -85,7 +86,7 @@ private async ValueTask ShowAllLinesMessageToAsync(Player gameMaster, string? me
break;
}
- await this.ShowMessageToAsync(gameMaster, line).ConfigureAwait(false);
+ await gameMaster.ShowBlueMessageAsync(line).ConfigureAwait(false);
}
}
}
\ No newline at end of file
diff --git a/src/GameLogic/PlugIns/ChatCommands/ChatBanCharChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/ChatBanCharChatCommandPlugIn.cs
index 4de531de1..c6934d87b 100644
--- a/src/GameLogic/PlugIns/ChatCommands/ChatBanCharChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/ChatBanCharChatCommandPlugIn.cs
@@ -1,4 +1,4 @@
-//
+//
// Licensed under the MIT License. See LICENSE file in the project root for full license information.
//
@@ -12,8 +12,9 @@ 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.")]
-[ChatCommandHelp(Command, "Bans the account of a character from chatting for the specified minutes.", typeof(ChatBanCharChatCommandArgs), CharacterStatus.GameMaster)]
+[PlugIn]
+[Display(Name = nameof(PlugInResources.ChatBanCharChatCommandPlugIn_Name), Description = nameof(PlugInResources.ChatBanCharChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
+[ChatCommandHelp(Command, typeof(ChatBanCharChatCommandArgs), CharacterStatus.GameMaster)]
public class ChatBanCharChatCommandPlugIn : ChatCommandPlugInBase
{
private const string Command = "/chatban";
@@ -29,26 +30,32 @@ protected override async ValueTask DoHandleCommandAsync(Player gameMaster, ChatB
{
if (string.IsNullOrEmpty(arguments.CharacterName))
{
- throw new ArgumentException("Character name is required.");
+ await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNameIsRequired)).ConfigureAwait(false);
+ return;
}
if (arguments.DurationMinutes == 0)
{
- throw new ArgumentException("Duration must be longer than 0 minutes.");
+ await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.DurationMustBeLongerThan0)).ConfigureAwait(false);
+ return;
}
var player = gameMaster.GameContext.GetPlayerByCharacterName(arguments.CharacterName);
if (player == null)
{
- throw new ArgumentException($"character not found.");
+ await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), arguments.CharacterName).ConfigureAwait(false);
+ return;
}
- await this.ChangeAccountChatBanUntilAsync(player, DateTime.UtcNow.AddMinutes(arguments.DurationMinutes)).ConfigureAwait(false);
+ if (!await this.ChangeAccountChatBanUntilAsync(player, DateTime.UtcNow.AddMinutes(arguments.DurationMinutes)).ConfigureAwait(false))
+ {
+ return;
+ }
// 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/ChatCommandHelpAttribute.cs b/src/GameLogic/PlugIns/ChatCommands/ChatCommandHelpAttribute.cs
index 94c1fb3df..b66e3ee2a 100644
--- a/src/GameLogic/PlugIns/ChatCommands/ChatCommandHelpAttribute.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/ChatCommandHelpAttribute.cs
@@ -15,9 +15,8 @@ public class ChatCommandHelpAttribute : Attribute
/// Initializes a new instance of the class.
///
/// The command.
- /// The description of the command.
- public ChatCommandHelpAttribute(string command, string description)
- : this(command, description, CharacterStatus.Normal)
+ public ChatCommandHelpAttribute(string command)
+ : this(command, CharacterStatus.Normal)
{
}
@@ -25,10 +24,9 @@ public ChatCommandHelpAttribute(string command, string description)
/// Initializes a new instance of the class.
///
/// The command.
- /// The description of the command.
/// The minimum character status.
- public ChatCommandHelpAttribute(string command, string description, CharacterStatus minimumCharacterStatus)
- : this(command, description, null, minimumCharacterStatus)
+ public ChatCommandHelpAttribute(string command, CharacterStatus minimumCharacterStatus)
+ : this(command, (Type?)null, minimumCharacterStatus)
{
}
@@ -39,7 +37,7 @@ public ChatCommandHelpAttribute(string command, string description, CharacterSta
/// The description of the command.
/// Type of the arguments.
public ChatCommandHelpAttribute(string command, string description, Type? argumentsType)
- : this(command, description, argumentsType, CharacterStatus.Normal)
+ : this(command, argumentsType, CharacterStatus.Normal)
{
}
@@ -47,13 +45,11 @@ public ChatCommandHelpAttribute(string command, string description, Type? argume
/// Initializes a new instance of the class.
///
/// The command.
- /// The description of the command.
/// Type of the arguments.
/// The minimum character status.
- public ChatCommandHelpAttribute(string command, string description, Type? argumentsType, CharacterStatus minimumCharacterStatus)
+ public ChatCommandHelpAttribute(string command, Type? argumentsType, CharacterStatus minimumCharacterStatus)
{
this.Command = command;
- this.Description = description;
this.ArgumentsType = argumentsType;
this.MinimumCharacterStatus = minimumCharacterStatus;
}
@@ -63,11 +59,6 @@ public ChatCommandHelpAttribute(string command, string description, Type? argume
///
public string Command { get; }
- ///
- /// Gets the description of the command.
- ///
- public string Description { get; }
-
///
/// Gets the minimum character status.
///
diff --git a/src/GameLogic/PlugIns/ChatCommands/ChatCommandPlugInBase.cs b/src/GameLogic/PlugIns/ChatCommands/ChatCommandPlugInBase.cs
index 2dc63c522..9a0927389 100644
--- a/src/GameLogic/PlugIns/ChatCommands/ChatCommandPlugInBase.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/ChatCommandPlugInBase.cs
@@ -4,8 +4,8 @@
namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands;
-using MUnique.OpenMU.GameLogic.Views;
-using MUnique.OpenMU.Interfaces;
+using MUnique.OpenMU.AttributeSystem;
+using MUnique.OpenMU.GameLogic.Attributes;
using MUnique.OpenMU.Pathfinding;
///
@@ -26,12 +26,11 @@ public virtual async ValueTask HandleCommandAsync(Player player, string command)
{
try
{
- var arguments = command.ParseArguments();
- await this.DoHandleCommandAsync(player, arguments).ConfigureAwait(false);
- }
- catch (ArgumentException argEx)
- {
- await this.ShowMessageToAsync(player, $"[{this.Key}] {argEx.Message}").ConfigureAwait(false);
+ var arguments = await command.TryParseArgumentsAsync(player).ConfigureAwait(false);
+ if (arguments is not null)
+ {
+ await this.DoHandleCommandAsync(player, arguments).ConfigureAwait(false);
+ }
}
catch (Exception ex)
{
@@ -46,32 +45,27 @@ 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.
///
/// The player.
/// The character name.
/// The target player.
- protected Player GetPlayerByCharacterName(Player player, string characterName)
+ protected async ValueTask GetPlayerByCharacterNameAsync(Player player, string characterName)
{
if (string.IsNullOrWhiteSpace(characterName))
{
- throw new ArgumentException("Character name is required.");
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNameIsRequired)).ConfigureAwait(false);
+ return null;
}
- return player.GameContext.GetPlayerByCharacterName(characterName)
- ?? throw new ArgumentException($"Character {characterName} not found.");
+ var result = player.GameContext.GetPlayerByCharacterName(characterName);
+ if (result is null)
+ {
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), characterName).ConfigureAwait(false);
+ }
+
+ return result;
}
///
@@ -80,14 +74,15 @@ protected Player GetPlayerByCharacterName(Player player, string characterName)
/// The player.
/// The guild name.
/// The guild id.
- protected async ValueTask GetGuildIdByNameAsync(Player player, string guildName)
+ protected async ValueTask GetGuildIdByNameAsync(Player player, string guildName)
{
var guildServer = (player.GameContext as IGameServerContext)!.GuildServer;
var guildId = await guildServer.GetGuildIdByNameAsync(guildName).ConfigureAwait(false);
- if (guildId == default)
+ if (guildId == 0)
{
- throw new ArgumentException($"Guild {guildName} not found.");
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.GuildNotFound), guildName).ConfigureAwait(false);
+ return null;
}
return guildId;
@@ -100,21 +95,29 @@ protected async ValueTask GetGuildIdByNameAsync(Player player, string guil
/// The name or id of the map.
/// The coordinates X and Y.
/// The ExitGate.
- protected async ValueTask GetExitGateAsync(Player gameMaster, string map, Point coordinates)
+ protected async ValueTask GetExitGateAsync(Player gameMaster, string map, Point coordinates)
{
- if (coordinates.X == default && coordinates.Y == default)
+ if (coordinates == default)
{
- return this.GetWarpInfo(gameMaster, map)?.Gate
- ?? throw new ArgumentException($"Map {map} not found.");
+ var result = this.GetWarpInfo(gameMaster, map)?.Gate;
+ if (result is null)
+ {
+ await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.MapNotFound), map).ConfigureAwait(false);
+ }
+
+ return result;
}
var mapDefinition = ushort.TryParse(map, out var mapId)
? (await gameMaster.GameContext.GetMapAsync(mapId).ConfigureAwait(false))?.Definition
- : gameMaster.GameContext.Configuration.Maps.FirstOrDefault(x => x.Name.Equals(map, StringComparison.OrdinalIgnoreCase));
+ : gameMaster.GameContext.Configuration.Maps.FirstOrDefault(x =>
+ x.Name.GetTranslationAsSpan(gameMaster.Culture).Equals(map, StringComparison.OrdinalIgnoreCase)
+ || x.Name.ValueInNeutralLanguageAsSpan.Equals(map, StringComparison.OrdinalIgnoreCase));
- if (mapDefinition == null)
+ if (mapDefinition is null)
{
- throw new ArgumentException($"Map {map} not found.");
+ await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.MapNotFound), map).ConfigureAwait(false);
+ return null;
}
return new ExitGate
@@ -138,7 +141,7 @@ protected async ValueTask GetExitGateAsync(Player gameMaster, string m
var warpList = player.GameContext.Configuration.WarpList;
return ushort.TryParse(map, out var mapId)
? warpList.FirstOrDefault(info => info.Gate?.Map?.Number == mapId)
- : warpList.FirstOrDefault(info => info.Name.Equals(map, StringComparison.OrdinalIgnoreCase));
+ : warpList.FirstOrDefault(info => map.Equals(info.Name.GetTranslationAsSpan(player.Culture), StringComparison.CurrentCultureIgnoreCase));
}
///
@@ -147,14 +150,16 @@ protected async ValueTask GetExitGateAsync(Player gameMaster, string m
/// GameMaster Player.
/// Name of character to be changed.
/// New .
- protected ValueTask ChangeAccountStateByCharacterNameAsync(Player gameMaster, string? name, AccountState accountState)
+ /// Flag, if successful.
+ protected async ValueTask TryChangeAccountStateByCharacterNameAsync(Player gameMaster, string? name, AccountState accountState)
{
if (string.IsNullOrEmpty(name))
{
- throw new ArgumentException($"{nameof(name)} is required.");
+ await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNameIsRequired)).ConfigureAwait(false);
+ return false;
}
- return this.ChangeAccountStateAsync(gameMaster, (MUnique.OpenMU.Persistence.IPlayerContext context) => context.GetAccountByCharacterNameAsync(name), accountState);
+ return await this.ChangeAccountStateAsync(gameMaster, context => context.GetAccountByCharacterNameAsync(name), accountState).ConfigureAwait(false);
}
///
@@ -163,14 +168,15 @@ protected ValueTask ChangeAccountStateByCharacterNameAsync(Player gameMaster, st
/// GameMaster Player.
/// Login from account to be changed.
/// New .
- protected ValueTask ChangeAccountStateByLoginNameAsync(Player gameMaster, string? loginName, AccountState accountState)
+ protected async ValueTask ChangeAccountStateByLoginNameAsync(Player gameMaster, string? loginName, AccountState accountState)
{
if (string.IsNullOrEmpty(loginName))
{
- throw new ArgumentException($"{nameof(loginName)} is required.");
+ await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.LoginNameRequired)).ConfigureAwait(false);
+ return false;
}
- return this.ChangeAccountStateAsync(gameMaster, (MUnique.OpenMU.Persistence.IPlayerContext context) => context.GetAccountByLoginNameAsync(loginName), accountState);
+ return await this.ChangeAccountStateAsync(gameMaster, context => context.GetAccountByLoginNameAsync(loginName), accountState).ConfigureAwait(false);
}
///
@@ -178,43 +184,80 @@ protected ValueTask ChangeAccountStateByLoginNameAsync(Player gameMaster, string
///
/// Player to be banned/unbanned.
/// Date and time until which the chat ban is in effect.
- protected async ValueTask ChangeAccountChatBanUntilAsync(Player player, DateTime? chatBanUntil)
+ protected async ValueTask ChangeAccountChatBanUntilAsync(Player player, DateTime? chatBanUntil)
+ {
+ if (player.Account == null)
+ {
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.AccountNotFound)).ConfigureAwait(false);
+ return false;
+ }
+
+ player.Account.ChatBanUntil = chatBanUntil;
+ return true;
+ }
+
+ ///
+ /// Tries to get the stat attribute of the player.
+ ///
+ /// The player.
+ /// Type of the stat.
+ /// The found stat attribute, or .
+ protected async ValueTask TryGetAttributeAsync(Player player, string? statType)
{
- if (player.Account != null)
+ if (player.SelectedCharacter is not { } selectedCharacter)
+ {
+ return null;
+ }
+
+ var attribute = statType switch
+ {
+ "str" => Stats.BaseStrength,
+ "agi" => Stats.BaseAgility,
+ "vit" => Stats.BaseVitality,
+ "ene" => Stats.BaseEnergy,
+ "cmd" => Stats.BaseLeadership,
+ _ => null,
+ };
+ if (attribute is null)
{
- player.Account.ChatBanUntil = chatBanUntil;
+ await player.ShowLocalizedBlueMessageAsync(PlayerMessage.UnknownAttribute, statType).ConfigureAwait(false);
+ return null;
}
- else
+
+ if (selectedCharacter.Attributes.All(sa => sa.Definition != attribute))
{
- throw new ArgumentException($"{nameof(player.Account)} not found.");
+ await player.ShowLocalizedBlueMessageAsync(PlayerMessage.CharacterHasNoStatAttribute, statType).ConfigureAwait(false);
+ return null;
}
+
+ return attribute;
}
- private async ValueTask ChangeAccountStateAsync(Player gameMaster, Func> accountSelector, AccountState accountState)
+ private async ValueTask ChangeAccountStateAsync(Player gameMaster, Func> accountSelector, AccountState accountState)
{
using var context = gameMaster.GameContext.PersistenceContextProvider.CreateNewPlayerContext(gameMaster.GameContext.Configuration);
var account = await accountSelector(context).ConfigureAwait(false);
- if (account != null)
+ if (account == null)
{
- foreach (var character in account.Characters)
- {
- var player = gameMaster.GameContext.GetPlayerByCharacterName(character.Name ?? string.Empty);
-
- // disconect to change account
- if (player != null)
- {
- await player.DisconnectAsync().ConfigureAwait(false);
- break;
- }
- }
-
- account.State = accountState;
- await context.SaveChangesAsync().ConfigureAwait(false);
+ await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.AccountNotFound)).ConfigureAwait(false);
+ return false;
}
- else
+
+ foreach (var character in account.Characters)
{
- throw new ArgumentException($"account not found.");
+ var player = gameMaster.GameContext.GetPlayerByCharacterName(character.Name ?? string.Empty);
+
+ // disconnect to change account
+ if (player != null)
+ {
+ await player.DisconnectAsync().ConfigureAwait(false);
+ break;
+ }
}
+
+ account.State = accountState;
+ await context.SaveChangesAsync().ConfigureAwait(false);
+ return true;
}
}
\ No newline at end of file
diff --git a/src/GameLogic/PlugIns/ChatCommands/ChatUnbanCharChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/ChatUnbanCharChatCommandPlugIn.cs
index eb9b3f7c9..094e95537 100644
--- a/src/GameLogic/PlugIns/ChatCommands/ChatUnbanCharChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/ChatUnbanCharChatCommandPlugIn.cs
@@ -1,4 +1,4 @@
-//
+//
// Licensed under the MIT License. See LICENSE file in the project root for full license information.
//
@@ -12,8 +12,9 @@ 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.")]
-[ChatCommandHelp(Command, "Unbans the account of a character from chatting", typeof(ChatUnbanCharChatCommandArgs), CharacterStatus.GameMaster)]
+[PlugIn]
+[Display(Name = nameof(PlugInResources.ChatUnbanCharChatCommandPlugIn_Name), Description = nameof(PlugInResources.ChatUnbanCharChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
+[ChatCommandHelp(Command, typeof(ChatUnbanCharChatCommandArgs), CharacterStatus.GameMaster)]
public class ChatUnbanCharChatCommandPlugIn : ChatCommandPlugInBase
{
private const string Command = "/chatunban";
@@ -29,21 +30,26 @@ protected override async ValueTask DoHandleCommandAsync(Player gameMaster, ChatU
{
if (string.IsNullOrEmpty(arguments.CharacterName))
{
- throw new ArgumentException("Character name is required.");
+ await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNameIsRequired)).ConfigureAwait(false);
+ return;
}
var player = gameMaster.GameContext.GetPlayerByCharacterName(arguments.CharacterName);
if (player == null)
{
- throw new ArgumentException($"character not found.");
+ await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CharacterNotFound), arguments.CharacterName).ConfigureAwait(false);
+ return;
}
- await this.ChangeAccountChatBanUntilAsync(player, null).ConfigureAwait(false);
+ if (!await this.ChangeAccountChatBanUntilAsync(player, null).ConfigureAwait(false))
+ {
+ return;
+ }
// 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..cfd5c50fc 100644
--- a/src/GameLogic/PlugIns/ChatCommands/ClearInventoryChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/ClearInventoryChatCommandPlugIn.cs
@@ -1,18 +1,11 @@
-//
+//
// Licensed under the MIT License. See LICENSE file in the project root for full license information.
//
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;
@@ -20,13 +13,13 @@ 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)")]
-[ChatCommandHelp(Command, "Clears inventory.", null, MinimumStatus)]
+[PlugIn]
+[Display(Name = nameof(PlugInResources.ClearInventoryChatCommandPlugIn_Name), Description = nameof(PlugInResources.ClearInventoryChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
+[ChatCommandHelp(Command, null, MinimumStatus)]
public class ClearInventoryChatCommandPlugIn : ChatCommandPlugInBase, ISupportCustomConfiguration, ISupportDefaultCustomConfiguration, IDisabledByDefault
{
private const string Command = "/clearinv";
private const CharacterStatus MinimumStatus = CharacterStatus.Normal;
- private const string CharacterNotFoundMessage = "Character '{0}' not found.";
private const int ConfirmationTimeoutSeconds = 10;
private readonly Dictionary pendingConfirmations = new();
@@ -65,7 +58,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 +75,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.GetTranslation(player.Culture)).ConfigureAwait(false);
return;
}
@@ -101,7 +94,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.GetTranslation(player.Culture)).ConfigureAwait(false);
return;
}
@@ -110,7 +103,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.GetTranslation(player.Culture)).ConfigureAwait(false);
}
///
@@ -132,31 +125,31 @@ public class ClearInventoryConfiguration
///
/// Gets or sets the character name to clear inventory for (GM only).
///
- [Display(Name = "Money Cost", Description = @"The money cost to clear inventory (except GMs). Default: 0.")]
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.ClearInventoryConfiguration_MoneyCost_Name), Description = nameof(PlugInResources.ClearInventoryConfiguration_MoneyCost_Description))]
public int MoneyCost { get; set; }
///
/// Gets or sets a value indicating whether the player needs to run the command again within 10 seconds to confirm the inventory clearing (excluding GM).
///
- [Display(Name = "Require Confirmation", Description = @"If true, the player will need to run the command again within 10 seconds to confirm the inventory clearing (excluding GM).")]
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.ClearInventoryConfiguration_RequireConfirmation_Name), Description = nameof(PlugInResources.ClearInventoryConfiguration_RequireConfirmation_Description))]
public bool RequireConfirmation { get; set; } = true;
///
/// Gets or sets the message to show the confirmation message.
///
- [Display(Name = "Confirmation Message", Description = @"The message to show when the player needs to run the command again within 10 seconds to confirm the inventory clearing.")]
- public string ConfirmationMessage { get; set; } = "Confirmation: run again within 10 seconds to confirm inventory clearing";
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.ClearInventoryConfiguration_ConfirmationMessage_Name), Description = nameof(PlugInResources.ClearInventoryConfiguration_ConfirmationMessage_Description))]
+ public LocalizedString ConfirmationMessage { get; set; } = "Confirmation: run again within 10 seconds to confirm inventory clearing";
///
/// Gets or sets the message to show when the player does not have enough money to run the command.
///
- [Display(Name = "Not Enough Money Message", Description = @"The message to show when the player does not have enough money to run the command.")]
- public string NotEnoughMoneyMessage { get; set; } = "Not enough money to run command";
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.ClearInventoryConfiguration_NotEnoughMoneyMessage_Name), Description = nameof(PlugInResources.ClearInventoryConfiguration_NotEnoughMoneyMessage_Description))]
+ public LocalizedString NotEnoughMoneyMessage { get; set; } = "Not enough money to run command";
///
/// Gets or sets the message to show when the inventory is cleared.
///
- [Display(Name = "Inventory Cleared Message", Description = @"The message to show when the inventory is cleared.")]
- public string InventoryClearedMessage { get; set; } = "Inventory cleared";
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.ClearInventoryConfiguration_InventoryClearedMessage_Name), Description = nameof(PlugInResources.ClearInventoryConfiguration_InventoryClearedMessage_Description))]
+ public LocalizedString InventoryClearedMessage { get; set; } = "Inventory cleared";
}
}
\ No newline at end of file
diff --git a/src/GameLogic/PlugIns/ChatCommands/CommandExtensions.cs b/src/GameLogic/PlugIns/ChatCommands/CommandExtensions.cs
index 5b883276c..e08164925 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.
@@ -19,10 +16,11 @@ public static class CommandExtensions
/// Parse the arguments of a command string.
///
/// The command.
+ /// The player which issued the command.
/// The type.
- /// Returns the initialized type.
- public static T ParseArguments(this string command)
- where T : new()
+ /// Returns the parsed object, if successful; Otherwise .
+ public static async ValueTask TryParseArgumentsAsync(this string command, Player? player)
+ where T : class, new()
{
var instance = new T();
var properties = typeof(T).GetProperties()
@@ -34,8 +32,12 @@ public static T ParseArguments(this string command)
{
// [Short argument parsing]
// If the command string contains = it means it is using the short version
- ReadNamedArguments(instance, properties, arguments);
- return instance;
+ if (await ReadNamedArgumentsAsync(instance, properties, arguments, player).ConfigureAwait(false))
+ {
+ return instance;
+ }
+
+ return null;
}
var attributedArguments = properties
@@ -49,15 +51,21 @@ public static T ParseArguments(this string command)
if (arguments.Count < requiredArgumentCount)
{
- throw new ArgumentException($"The command needs {requiredArgumentCount} arguments and was given {arguments.Count}.", nameof(command));
+ if (player is not null)
+ {
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CommandExtensionsInvalidArgumentCount), requiredArgumentCount, arguments.Count).ConfigureAwait(false);
+ }
+
+ return null;
}
+ var success = true;
for (var i = 0; i < Math.Min(arguments.Count, properties.Count); i++)
{
var property = properties[i];
var argument = arguments[i];
- SetPropertyValue(instance, property, argument);
+ success = await TrySetPropertyValueAsync(instance, property, argument, player).ConfigureAwait(false) && success;
}
return instance;
@@ -129,17 +137,7 @@ 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)
+ private static async ValueTask ReadNamedArgumentsAsync(object instance, IList properties, IList arguments, Player? player)
{
var argumentProperties = properties.Where(property => property.GetCustomAttribute() is { }).ToList();
var requiredProperties = argumentProperties.Where(prop => prop.GetCustomAttribute() is { IsRequired: true }).ToList();
@@ -157,26 +155,34 @@ private static void ReadNamedArguments(object instance, IList prop
// Cleans the argument from the short name
var argumentValue = argument.Replace($"{attribute.ShortName}=", string.Empty);
- SetPropertyValue(instance, property, argumentValue);
+ if (!await TrySetPropertyValueAsync(instance, property, argumentValue, player).ConfigureAwait(false))
+ {
+ return false;
+ }
+
requiredProperties.Remove(property);
}
if (!requiredProperties.Any())
{
- return;
+ return true;
+ }
+
+ if (player is null)
+ {
+ return false;
}
// One or many required properties were not used
- var stringBuilder = new StringBuilder();
foreach (var requiredProperty in requiredProperties)
{
- stringBuilder.AppendLine($"The required argument named {requiredProperty.Name} was not used.");
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CommandExtensions_RequiredArgumentMissing), requiredProperty.Name).ConfigureAwait(false);
}
- throw new ArgumentException(stringBuilder.ToString());
+ return false;
}
- private static void SetPropertyValue(object instance, PropertyInfo propertyInfo, string stringValue)
+ private static async ValueTask TrySetPropertyValueAsync(object instance, PropertyInfo propertyInfo, string stringValue, Player? player)
{
try
{
@@ -187,10 +193,16 @@ private static void SetPropertyValue(object instance, PropertyInfo propertyInfo,
}
propertyInfo.SetValue(instance, Convert.ChangeType(stringValue, propertyInfo.PropertyType, CultureInfo.InvariantCulture));
+ return true;
}
catch
{
- throw new ArgumentException($"The argument {propertyInfo.Name} was given a invalid type, it expects the value to be of the type {propertyInfo.PropertyType.Name}.");
+ if (player is not null)
+ {
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.CommandExtensionsArgumentInvalidType), propertyInfo.Name, propertyInfo.PropertyType.Name).ConfigureAwait(false);
+ }
+
+ return false;
}
}
}
\ No newline at end of file
diff --git a/src/GameLogic/PlugIns/ChatCommands/CreateMonsterChatCommand.cs b/src/GameLogic/PlugIns/ChatCommands/CreateMonsterChatCommand.cs
index 334bc3866..55602354b 100644
--- a/src/GameLogic/PlugIns/ChatCommands/CreateMonsterChatCommand.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/CreateMonsterChatCommand.cs
@@ -13,8 +13,9 @@ 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.")]
-[ChatCommandHelp(Command, "Creates a monster which can be remote controlled by the game master.", typeof(CreateMonsterChatCommandArgs), CharacterStatus.GameMaster)]
+[PlugIn]
+[Display(Name = nameof(PlugInResources.CreateMonsterChatCommand_Name), Description = nameof(PlugInResources.CreateMonsterChatCommand_Description), ResourceType = typeof(PlugInResources))]
+[ChatCommandHelp(Command, typeof(CreateMonsterChatCommandArgs), CharacterStatus.GameMaster)]
internal class CreateMonsterChatCommand : ChatCommandPlugInBase
{
private const string Command = "/createmonster";
@@ -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 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 +57,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..27a724284 100644
--- a/src/GameLogic/PlugIns/ChatCommands/DisconnectChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/DisconnectChatCommandPlugIn.cs
@@ -12,8 +12,9 @@ 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.")]
-[ChatCommandHelp(Command, "Disconnects a player from the game server.", typeof(DisconnectChatCommandArgs), CharacterStatus.GameMaster)]
+[PlugIn]
+[Display(Name = nameof(PlugInResources.DisconnectChatCommandPlugIn_Name), Description = nameof(PlugInResources.DisconnectChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
+[ChatCommandHelp(Command, typeof(DisconnectChatCommandArgs), CharacterStatus.GameMaster)]
public class DisconnectChatCommandPlugIn : ChatCommandPlugInBase
{
private const string Command = "/disconnect";
@@ -27,12 +28,17 @@ public class DisconnectChatCommandPlugIn : ChatCommandPlugInBase
protected override async ValueTask DoHandleCommandAsync(Player gameMaster, DisconnectChatCommandArgs arguments)
{
- var player = this.GetPlayerByCharacterName(gameMaster, arguments.CharacterName ?? string.Empty);
+ var player = await this.GetPlayerByCharacterNameAsync(gameMaster, arguments.CharacterName ?? string.Empty).ConfigureAwait(false);
+ if (player is null)
+ {
+ return;
+ }
+
await player.DisconnectAsync().ConfigureAwait(false);
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..e7d1e191b 100644
--- a/src/GameLogic/PlugIns/ChatCommands/GetLevelChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/GetLevelChatCommandPlugIn.cs
@@ -1,28 +1,24 @@
-//
+//
// 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.Attributes;
-using MUnique.OpenMU.GameLogic.Views.Character;
-using MUnique.OpenMU.Interfaces;
using MUnique.OpenMU.PlugIns;
///
/// 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 = nameof(PlugInResources.GetLevelChatCommandPlugIn_Name), Description = nameof(PlugInResources.GetLevelChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
[ChatCommandHelp(Command, "Gets level of a player. Usage: /getlevel (optional:character)", null)]
public class GetLevelChatCommandPlugIn : ChatCommandPlugInBase, IDisabledByDefault
{
private const string Command = "/getlevel";
private const CharacterStatus MinimumStatus = CharacterStatus.GameMaster;
- private const string CharacterNotFoundMessage = "Character '{0}' not found.";
- private const string LevelGetMessage = "Level of '{0}': {1}.";
///
public override string Key => Command;
@@ -40,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;
}
}
@@ -50,7 +46,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..1492f450f 100644
--- a/src/GameLogic/PlugIns/ChatCommands/GetLevelUpPointsChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/GetLevelUpPointsChatCommandPlugIn.cs
@@ -1,27 +1,23 @@
-//
+//
// 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.Views.Character;
-using MUnique.OpenMU.Interfaces;
using MUnique.OpenMU.PlugIns;
///
/// 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 = nameof(PlugInResources.GetLevelUpPointsChatCommandPlugIn_Name), Description = nameof(PlugInResources.GetLevelUpPointsChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
[ChatCommandHelp(Command, "Gets level up points of a player. Usage: /getleveluppoints (optional:character)", null)]
public class GetLevelUpPointsChatCommandPlugIn : ChatCommandPlugInBase, IDisabledByDefault
{
private const string Command = "/getleveluppoints";
private const CharacterStatus MinimumStatus = CharacterStatus.GameMaster;
- private const string CharacterNotFoundMessage = "Character '{0}' not found.";
- private const string LevelUpPointsGetMessage = "Level-up points of '{0}': {1}.";
///
public override string Key => Command;
@@ -39,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;
}
}
@@ -49,7 +45,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..3f46bee18 100644
--- a/src/GameLogic/PlugIns/ChatCommands/GetMasterLevelChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/GetMasterLevelChatCommandPlugIn.cs
@@ -1,4 +1,4 @@
-//
+//
// Licensed under the MIT License. See LICENSE file in the project root for full license information.
//
@@ -15,14 +15,13 @@ 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 = nameof(PlugInResources.GetMasterLevelChatCommandPlugIn_Name), Description = nameof(PlugInResources.GetMasterLevelChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
[ChatCommandHelp(Command, "Gets master level of a player. Usage: /getmasterlevel (optional:character)", null)]
public class GetMasterLevelChatCommandPlugIn : ChatCommandPlugInBase, IDisabledByDefault
{
private const string Command = "/getmasterlevel";
private const CharacterStatus MinimumStatus = CharacterStatus.GameMaster;
- private const string CharacterNotFoundMessage = "Character '{0}' not found.";
- private const string MasterLevelGetMessage = "Master level of '{0}': {1}.";
///
public override string Key => Command;
@@ -40,7 +39,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 +49,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..aa4586673 100644
--- a/src/GameLogic/PlugIns/ChatCommands/GetMasterLevelUpPointsChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/GetMasterLevelUpPointsChatCommandPlugIn.cs
@@ -1,27 +1,23 @@
-//
+//
// 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.Views.Character;
-using MUnique.OpenMU.Interfaces;
using MUnique.OpenMU.PlugIns;
///
/// 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 = nameof(PlugInResources.GetMasterLevelUpPointsChatCommandPlugIn_Name), Description = nameof(PlugInResources.GetMasterLevelUpPointsChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
[ChatCommandHelp(Command, "Gets master level up points of a player. Usage: /getmasterleveluppoints (optional:character)", null)]
public class GetMasterLevelUpPointsChatCommandPlugIn : ChatCommandPlugInBase, IDisabledByDefault
{
private const string Command = "/getmasterleveluppoints";
private const CharacterStatus MinimumStatus = CharacterStatus.GameMaster;
- private const string CharacterNotFoundMessage = "Character '{0}' not found.";
- private const string MasterLevelUpPointsGetMessage = "Master level-up points of '{0}': {1}.";
///
public override string Key => Command;
@@ -39,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;
}
}
@@ -49,7 +45,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..1f252e8b7 100644
--- a/src/GameLogic/PlugIns/ChatCommands/GetMoneyChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/GetMoneyChatCommandPlugIn.cs
@@ -1,27 +1,23 @@
-//
+//
// 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.Views.Character;
-using MUnique.OpenMU.Interfaces;
using MUnique.OpenMU.PlugIns;
///
/// 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 = nameof(PlugInResources.GetMoneyChatCommandPlugIn_Name), Description = nameof(PlugInResources.GetMoneyChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
[ChatCommandHelp(Command, "Gets money of a player. Usage: /getmoney (optional:character)", null)]
public class GetMoneyChatCommandPlugIn : ChatCommandPlugInBase, IDisabledByDefault
{
private const string Command = "/getmoney";
private const CharacterStatus MinimumStatus = CharacterStatus.GameMaster;
- private const string CharacterNotFoundMessage = "Character '{0}' not found.";
- private const string MoneyGetMessage = "Money of '{0}': {1}.";
///
public override string Key => Command;
@@ -39,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;
}
}
@@ -49,7 +45,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..98570d011 100644
--- a/src/GameLogic/PlugIns/ChatCommands/GetResetsChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/GetResetsChatCommandPlugIn.cs
@@ -1,29 +1,25 @@
-//
+//
// 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.Attributes;
using MUnique.OpenMU.GameLogic.Resets;
-using MUnique.OpenMU.Interfaces;
using MUnique.OpenMU.PlugIns;
///
/// 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 = nameof(PlugInResources.GetResetsChatCommandPlugIn_Name), Description = nameof(PlugInResources.GetResetsChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
[ChatCommandHelp(Command, "Gets resets of a player. Usage: /getresets (optional:character)", null)]
public class GetResetsChatCommandPlugIn : ChatCommandPlugInBase, IDisabledByDefault
{
private const string Command = "/getresets";
private const CharacterStatus MinimumStatus = CharacterStatus.GameMaster;
- private const string ResetPluginDisabledMessage = "The reset system is not enabled on this server.";
- private const string CharacterNotFoundMessage = "Character '{0}' not found.";
- private const string ResetsGetMessage = "Resets of '{0}': {1}.";
///
public override string Key => Command;
@@ -37,7 +33,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 +44,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 +54,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..502c8c5c8 100644
--- a/src/GameLogic/PlugIns/ChatCommands/GetStatChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/GetStatChatCommandPlugIn.cs
@@ -4,24 +4,20 @@
namespace MUnique.OpenMU.GameLogic.PlugIns.ChatCommands;
-using System.Globalization;
using System.Runtime.InteropServices;
-using MUnique.OpenMU.AttributeSystem;
-using MUnique.OpenMU.GameLogic.Attributes;
using MUnique.OpenMU.PlugIns;
///
/// 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)")]
-[ChatCommandHelp(Command, "Get stat points. Usage: /get (ene|agi|vit|str|cmd) (optional:character)", typeof(Arguments), MinimumStatus)]
+[PlugIn]
+[Display(Name = nameof(PlugInResources.GetStatChatCommandPlugIn_Name), Description = nameof(PlugInResources.GetStatChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
+[ChatCommandHelp(Command, typeof(Arguments), MinimumStatus)]
public class GetStatChatCommandPlugIn : ChatCommandPlugInBase, IDisabledByDefault
{
private const string Command = "/get";
private const CharacterStatus MinimumStatus = CharacterStatus.GameMaster;
- private const string CharacterNotFoundMessage = "Character '{0}' not found.";
- private const string StatGetMessage = "Stat of '{0}': {1}.";
///
public override string Key => Command;
@@ -32,57 +28,24 @@ public class GetStatChatCommandPlugIn : ChatCommandPlugInBase
protected override async ValueTask DoHandleCommandAsync(Player player, Arguments arguments)
{
- try
+ var targetPlayer = player;
+ if (arguments.CharacterName is { } characterName)
{
- if (arguments is null)
+ 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);
- await this.ShowMessageToAsync(player, string.Format(CultureInfo.InvariantCulture, StatGetMessage, selectedCharacter.Name, targetPlayer.Attributes![attribute])).ConfigureAwait(false);
- }
- catch (ArgumentException e)
- {
- await player.ShowMessageAsync(e.Message).ConfigureAwait(false);
}
- }
-
- private AttributeDefinition GetAttribute(Character selectedCharacter, string? statType)
- {
- var attribute = statType switch
- {
- "str" => Stats.BaseStrength,
- "agi" => Stats.BaseAgility,
- "vit" => Stats.BaseVitality,
- "ene" => Stats.BaseEnergy,
- "cmd" => Stats.BaseLeadership,
- _ => throw new ArgumentException($"Unknown stat: '{statType}'."),
- };
- if (selectedCharacter.Attributes.All(sa => sa.Definition != attribute))
+ if (await this.TryGetAttributeAsync(targetPlayer, arguments.StatType).ConfigureAwait(false) is not { } attribute)
{
- throw new ArgumentException($"The character has no stat attribute '{statType}'.");
+ return;
}
- return attribute;
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.StatPointInfo), targetPlayer.SelectedCharacter?.Name, targetPlayer.Attributes![attribute]).ConfigureAwait(false);
}
///
diff --git a/src/GameLogic/PlugIns/ChatCommands/GuildBattleSoccerChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/GuildBattleSoccerChatCommandPlugIn.cs
index 1dee119de..4a27d66e1 100644
--- a/src/GameLogic/PlugIns/ChatCommands/GuildBattleSoccerChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/GuildBattleSoccerChatCommandPlugIn.cs
@@ -13,8 +13,9 @@ 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.")]
-[ChatCommandHelp(Command, "Sends a battle soccer request to the guild master of the requested guild.", typeof(GuildWarChatCommandArgs), CharacterStatus.Normal)]
+[PlugIn]
+[Display(Name = nameof(PlugInResources.GuildBattleSoccerChatCommandPlugIn_Name), Description = nameof(PlugInResources.GuildBattleSoccerChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
+[ChatCommandHelp(Command, typeof(GuildWarChatCommandArgs), CharacterStatus.Normal)]
public class GuildBattleSoccerChatCommandPlugIn : ChatCommandPlugInBase
{
private const string Command = "/battlesoccer";
diff --git a/src/GameLogic/PlugIns/ChatCommands/GuildDisconnectChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/GuildDisconnectChatCommandPlugIn.cs
index 5871f9073..e44818e5f 100644
--- a/src/GameLogic/PlugIns/ChatCommands/GuildDisconnectChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/GuildDisconnectChatCommandPlugIn.cs
@@ -12,8 +12,9 @@ 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.")]
-[ChatCommandHelp(Command, "Disconnects the members of a guild.", typeof(GuildDisconnectChatCommandArgs), CharacterStatus.GameMaster)]
+[PlugIn]
+[Display(Name = nameof(PlugInResources.GuildDisconnectChatCommandPlugIn_Name), Description = nameof(PlugInResources.GuildDisconnectChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
+[ChatCommandHelp(Command, typeof(GuildDisconnectChatCommandArgs), CharacterStatus.GameMaster)]
public class GuildDisconnectChatCommandPlugIn : ChatCommandPlugInBase
{
private const string Command = "/guilddisconnect";
@@ -28,18 +29,18 @@ public class GuildDisconnectChatCommandPlugIn : ChatCommandPlugInBase
+ await gameServerContext.ForEachGuildPlayerAsync(guildId.Value, async guildPlayer =>
{
await guildPlayer.DisconnectAsync().ConfigureAwait(false);
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..c0aad88cf 100644
--- a/src/GameLogic/PlugIns/ChatCommands/GuildMoveChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/GuildMoveChatCommandPlugIn.cs
@@ -12,8 +12,9 @@ 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
[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.")]
-[ChatCommandHelp(Command, "Sends a guild war request to the master of the requested guild.", typeof(GuildWarChatCommandArgs), CharacterStatus.Normal)]
+[PlugIn]
+[Display(Name = nameof(PlugInResources.GuildWarChatCommandPlugIn_Name), Description = nameof(PlugInResources.GuildWarChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
+[ChatCommandHelp(Command, typeof(GuildWarChatCommandArgs), CharacterStatus.Normal)]
public class GuildWarChatCommandPlugIn : ChatCommandPlugInBase
{
private const string Command = "/war";
diff --git a/src/GameLogic/PlugIns/ChatCommands/HelpCommand.cs b/src/GameLogic/PlugIns/ChatCommands/HelpCommand.cs
index faabe65d8..7cbf42eca 100644
--- a/src/GameLogic/PlugIns/ChatCommands/HelpCommand.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/HelpCommand.cs
@@ -1,4 +1,4 @@
-//
+//
// Licensed under the MIT License. See LICENSE file in the project root for full license information.
//
@@ -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 = nameof(PlugInResources.HelpCommand_Name), Description = nameof(PlugInResources.HelpCommand_Description), ResourceType = typeof(PlugInResources))]
[ChatCommandHelp(Command, "Shows information about the requested command.", typeof(Arguments))]
public class HelpCommand : IChatCommandPlugIn
{
@@ -28,21 +29,26 @@ public async ValueTask HandleCommandAsync(Player player, string command)
{
try
{
- var arguments = command.ParseArguments();
+ if (await command.TryParseArgumentsAsync(player).ConfigureAwait(false) is not { } arguments)
+ {
+ return;
+ }
+
var commandName = arguments.CommandName;
var commandPluginAttribute = player.GetAvailableChatCommands()
.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);
+ await player.ShowBlueMessageAsync(commandPluginAttribute.Usage).ConfigureAwait(false);
}
catch (ArgumentException e)
{
- await player.ShowMessageAsync(e.Message).ConfigureAwait(false);
+ // Should not happen, as we don't throw them anymore. But just in case...
+ 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..f4770173a 100644
--- a/src/GameLogic/PlugIns/ChatCommands/HideChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/HideChatCommandPlugIn.cs
@@ -11,8 +11,9 @@ 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.")]
-[ChatCommandHelp(Command, "Hides the own player from others.", CharacterStatus.GameMaster)]
+[PlugIn]
+[Display(Name = nameof(PlugInResources.HideChatCommandPlugIn_Name), Description = nameof(PlugInResources.HideChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
+[ChatCommandHelp(Command, CharacterStatus.GameMaster)]
public class HideChatCommandPlugIn : IChatCommandPlugIn
{
private const string Command = "/hide";
diff --git a/src/GameLogic/PlugIns/ChatCommands/ItemChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/ItemChatCommandPlugIn.cs
index 9914aacec..2a2462ffe 100644
--- a/src/GameLogic/PlugIns/ChatCommands/ItemChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/ItemChatCommandPlugIn.cs
@@ -15,8 +15,9 @@ 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.")]
-[ChatCommandHelp(Command, "Drops a specific item next to the character.", typeof(ItemChatCommandArgs), CharacterStatus.GameMaster)]
+[PlugIn]
+[Display(Name = nameof(PlugInResources.ItemChatCommandPlugIn_Name), Description = nameof(PlugInResources.ItemChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
+[ChatCommandHelp(Command, typeof(ItemChatCommandArgs), CharacterStatus.GameMaster)]
public class ItemChatCommandPlugIn : ChatCommandPlugInBase
{
private const string Command = "/item";
@@ -32,21 +33,46 @@ protected override async ValueTask DoHandleCommandAsync(Player gameMaster, ItemC
{
if (gameMaster.CurrentMap != null)
{
- var item = CreateItem(gameMaster, arguments);
+ var (isValid, itemDefinition) = await TryParseArgumentsAsync(gameMaster, arguments).ConfigureAwait(false);
+ if (!isValid)
+ {
+ return;
+ }
+
+ var item = CreateItem(itemDefinition!, arguments);
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);
}
}
- private static Item CreateItem(Player gameMaster, ItemChatCommandArgs arguments)
+ private static async ValueTask<(bool Success, ItemDefinition? Definition)> TryParseArgumentsAsync(Player gameMaster, ItemChatCommandArgs arguments)
+ {
+ var itemDefinition = gameMaster.GameContext.Configuration.Items
+ .FirstOrDefault(def => def.Group == arguments.Group && def.Number == arguments.Number);
+ if (itemDefinition is null)
+ {
+ await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.ItemGroupNumberNotExists), arguments.Group, arguments.Number).ConfigureAwait(false);
+ return (false, null);
+ }
+
+ if (arguments.Level > itemDefinition.MaximumItemLevel)
+ {
+ await gameMaster.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.ItemLevelExceeded), itemDefinition.MaximumItemLevel).ConfigureAwait(false);
+ return (false, null);
+ }
+
+ return (true, itemDefinition);
+ }
+
+ private static Item CreateItem(DataModel.Configuration.Items.ItemDefinition itemDefinition, ItemChatCommandArgs arguments)
{
var item = new TemporaryItem();
- item.Definition = GetItemDefinition(gameMaster, arguments);
+ item.Definition = itemDefinition;
item.Durability = item.IsStackable() ? 1 : item.Definition.Durability;
item.HasSkill = item.Definition.Skill != null && arguments.Skill;
- item.Level = GetItemLevel(item.Definition, arguments);
+ item.Level = arguments.Level;
item.SocketCount = item.Definition.MaximumSockets;
AddOption(item, arguments);
@@ -57,26 +83,9 @@ private static Item CreateItem(Player gameMaster, ItemChatCommandArgs arguments)
return item;
}
- private static ItemDefinition GetItemDefinition(Player gameMaster, ItemChatCommandArgs arguments)
- {
- 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.");
- }
-
- private static byte GetItemLevel(ItemDefinition itemDefinition, ItemChatCommandArgs arguments)
- {
- if (arguments.Level > itemDefinition.MaximumItemLevel)
- {
- throw new ArgumentException($"Level cannot be greater than {itemDefinition.MaximumItemLevel}.");
- }
-
- return arguments.Level;
- }
-
private static void AddOption(TemporaryItem item, ItemChatCommandArgs arguments)
{
- if (item.Definition != null && arguments.Opt > default(byte))
+ if (item.Definition != null && arguments.Opt > 0)
{
var allOptions = item.Definition.PossibleItemOptions
.SelectMany(o => o.PossibleOptions)
@@ -133,15 +142,15 @@ private static void AddLuckOption(TemporaryItem item, ItemChatCommandArgs argume
private static void AddExcellentOptions(TemporaryItem item, ItemChatCommandArgs arguments)
{
- if (item.Definition != null && arguments.ExcellentNumber > default(byte))
+ if (item.Definition != null && arguments.ExcellentNumber > 0)
{
var excellentOptions = item.Definition.PossibleItemOptions
.SelectMany(o => o.PossibleOptions)
.Where(o => o.OptionType == ItemOptionTypes.Excellent)
- .Where(o => ((1 << (o.Number - 1)) & arguments.ExcellentNumber) > default(byte))
+ .Where(o => ((1 << (o.Number - 1)) & arguments.ExcellentNumber) > 0)
.ToList();
- ushort appliedOptions = default;
+ ushort appliedOptions = 0;
foreach (var excellentOption in excellentOptions)
{
var optionLink = new ItemOptionLink { ItemOption = excellentOption };
@@ -150,13 +159,13 @@ private static void AddExcellentOptions(TemporaryItem item, ItemChatCommandArgs
}
// every excellent item has skill (if is in item definition)
- item.HasSkill = appliedOptions > default(ushort) && item.Definition.Skill != null;
+ item.HasSkill = appliedOptions > 0 && item.Definition.Skill != null;
}
}
private static void AddAncientBonusOption(TemporaryItem item, ItemChatCommandArgs arguments)
{
- if (item.Definition != null && arguments.Ancient > default(byte)
+ if (item.Definition != null && arguments.Ancient > 0
&& item.Definition.PossibleItemSetGroups.FirstOrDefault(g => g.Items.Any(i => i.ItemDefinition == item.Definition && i.AncientSetDiscriminator == arguments.Ancient)) is { } ancientSet
&& ancientSet.Items.FirstOrDefault(i => i.ItemDefinition == item.Definition) is { } itemOfItemSet)
{
diff --git a/src/GameLogic/PlugIns/ChatCommands/ListCommand.cs b/src/GameLogic/PlugIns/ChatCommands/ListCommand.cs
index 9de7b24c7..dae928a50 100644
--- a/src/GameLogic/PlugIns/ChatCommands/ListCommand.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/ListCommand.cs
@@ -1,4 +1,4 @@
-//
+//
// Licensed under the MIT License. See LICENSE file in the project root for full license information.
//
@@ -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 = nameof(PlugInResources.ListCommand_Name), Description = nameof(PlugInResources.ListCommand_Description), ResourceType = typeof(PlugInResources))]
[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.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..6e89301d4 100644
--- a/src/GameLogic/PlugIns/ChatCommands/MoveChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/MoveChatCommandPlugIn.cs
@@ -13,8 +13,9 @@ 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.")]
-[ChatCommandHelp(Command, "Moves the character to the specified destination.", typeof(MoveChatCommandArgs), CharacterStatus.Normal)]
+[PlugIn]
+[Display(Name = nameof(PlugInResources.MoveChatCommandPlugIn_Name), Description = nameof(PlugInResources.MoveChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
+[ChatCommandHelp(Command, typeof(MoveChatCommandArgs), CharacterStatus.Normal)]
public class MoveChatCommandPlugIn : ChatCommandPlugInBase
{
private const string Command = "/move";
@@ -33,14 +34,19 @@ protected override async ValueTask DoHandleCommandAsync(Player sender, MoveChatC
if (isGameMasterWarpingCharacter)
{
- var targetPlayer = this.GetPlayerByCharacterName(sender, arguments.Target!);
+ var targetPlayer = await this.GetPlayerByCharacterNameAsync(sender, arguments.Target!).ConfigureAwait(false);
var exitGate = await this.GetExitGateAsync(sender, arguments.MapIdOrName!, arguments.Coordinates).ConfigureAwait(false);
+ if (targetPlayer is null || exitGate is null)
+ {
+ return;
+ }
+
await targetPlayer.WarpToAsync(exitGate).ConfigureAwait(false);
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.GetTranslation(sender.Culture), 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..308d4f13e 100644
--- a/src/GameLogic/PlugIns/ChatCommands/MoveMonsterChatCommand.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/MoveMonsterChatCommand.cs
@@ -13,8 +13,9 @@ 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.")]
-[ChatCommandHelp(Command, "Moves a previously created monster which can be remote controlled by the game master.", typeof(MoveMonsterCommandArgs), CharacterStatus.GameMaster)]
+[PlugIn]
+[Display(Name = nameof(PlugInResources.MoveMonsterChatCommand_Name), Description = nameof(PlugInResources.MoveMonsterChatCommand_Description), ResourceType = typeof(PlugInResources))]
+[ChatCommandHelp(Command, typeof(MoveMonsterCommandArgs), CharacterStatus.GameMaster)]
internal class MoveMonsterChatCommand : ChatCommandPlugInBase
{
private const string Command = "/movemonster";
@@ -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 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/NoticeChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/NoticeChatCommandPlugIn.cs
index 931a129d7..1cae9668c 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 = nameof(PlugInResources.NoticeChatCommandPlugIn_Name), Description = nameof(PlugInResources.NoticeChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
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 8c3f11d47..22933d3d5 100644
--- a/src/GameLogic/PlugIns/ChatCommands/NpcChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/NpcChatCommandPlugIn.cs
@@ -1,18 +1,15 @@
-//
+//
// Licensed under the MIT License. See LICENSE file in the project root for full license information.
//
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;
@@ -20,14 +17,13 @@ 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 = nameof(PlugInResources.NpcChatCommandPlugIn_Name), Description = nameof(PlugInResources.NpcChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
[ChatCommandHelp(Command, "Opens the NPC store.", null)]
public class NpcChatCommandPlugIn : ChatCommandPlugInBase, ISupportCustomConfiguration, ISupportDefaultCustomConfiguration, IDisabledByDefault
{
private const string Command = "/npc";
private const CharacterStatus MinimumStatus = CharacterStatus.Normal;
- private const string InvalidNpcIdMessage = "Invalid NPC ID \"{0}\". Please provide a valid merchant NPC ID.";
- private const string InvalidMerchantMessage = "Not a valid merchant NPC.";
private readonly TalkNpcAction _talkNpcAction = new();
@@ -64,7 +60,7 @@ protected override async ValueTask DoHandleCommandAsync(Player player, Arguments
}
else
{
- await this.ShowMessageToAsync(player, string.Format(CultureInfo.InvariantCulture, InvalidNpcIdMessage, npcIdStr)).ConfigureAwait(false);
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.InvalidMerchantId), npcIdStr).ConfigureAwait(false);
return;
}
}
@@ -74,11 +70,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 this.ShowMessageToAsync(player, InvalidMerchantMessage).ConfigureAwait(false);
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.NpcIsNotMerchant)).ConfigureAwait(false);
}
return;
@@ -86,7 +82,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.GetTranslation(player.Culture)).ConfigureAwait(false);
return;
}
@@ -114,19 +110,19 @@ public class NpcChatCommandConfiguration
/// Gets or sets the NPC ID of the NPC to open the merchant store.
///
// TODO: Change to a list of possible NPCs merchants
- [Display(Name = "NPC ID", Description = @"The ID of the NPC to open the merchant store. Default: Potion Girl Amy - 253.")]
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.NpcChatCommandConfiguration_OpenMerchantNpc_Name), Description = nameof(PlugInResources.NpcChatCommandConfiguration_OpenMerchantNpc_Description))]
public MonsterDefinition? OpenMerchantNpc { get; set; }
///
/// Gets or sets the minimum VIP level to use the command.
///
- [Display(Name = "Minimum VIP Level", Description = @"The minimum VIP level to use the command. Default: 0.")]
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.NpcChatCommandConfiguration_MinimumVipLevel_Name), Description = nameof(PlugInResources.NpcChatCommandConfiguration_MinimumVipLevel_Description))]
public int MinimumVipLevel { get; set; }
///
/// Gets or sets the message to show when the player does not have the required VIP level for this command (excluding GM).
///
- [Display(Name = "Insufficient VIP Level Message", Description = @"The message to show when the player does not have the required VIP level for this command (excluding GM).")]
- public string InsufficientVipLevelMessage { get; set; } = "Insufficient VIP level to use this command";
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.NpcChatCommandConfiguration_InsufficientVipLevelMessage_Name), Description = nameof(PlugInResources.NpcChatCommandConfiguration_InsufficientVipLevelMessage_Description))]
+ public LocalizedString InsufficientVipLevelMessage { get; set; } = "Insufficient VIP level to use this command";
}
}
\ No newline at end of file
diff --git a/src/GameLogic/PlugIns/ChatCommands/OnlineChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/OnlineChatCommandPlugIn.cs
index 39c6772d9..a899a5fef 100644
--- a/src/GameLogic/PlugIns/ChatCommands/OnlineChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/OnlineChatCommandPlugIn.cs
@@ -13,8 +13,9 @@ 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.")]
-[ChatCommandHelp(Command, "Gets the online count of game masters and players.", typeof(EmptyChatCommandArgs), CharacterStatus.GameMaster)]
+[PlugIn]
+[Display(Name = nameof(PlugInResources.OnlineChatCommandPlugIn_Name), Description = nameof(PlugInResources.OnlineChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
+[ChatCommandHelp(Command, typeof(EmptyChatCommandArgs), CharacterStatus.GameMaster)]
public class OnlineChatCommandPlugIn : ChatCommandPlugInBase, IChatCommandPlugIn
{
private const string Command = "/online";
@@ -45,6 +46,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..6e73f42eb 100644
--- a/src/GameLogic/PlugIns/ChatCommands/OpenWarehouseChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/OpenWarehouseChatCommandPlugIn.cs
@@ -1,4 +1,4 @@
-//
+//
// Licensed under the MIT License. See LICENSE file in the project root for full license information.
//
@@ -6,12 +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;
@@ -19,13 +17,13 @@ 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 = nameof(PlugInResources.OpenWarehouseChatCommandPlugIn_Name), Description = nameof(PlugInResources.OpenWarehouseChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
[ChatCommandHelp(Command, "Opens the warehouse.", null)]
public class OpenWarehouseChatCommandPlugIn : ChatCommandPlugInBase, ISupportCustomConfiguration, ISupportDefaultCustomConfiguration, IDisabledByDefault
{
private const string Command = "/openware";
private const CharacterStatus MinimumStatus = CharacterStatus.Normal;
- private const string NoWarehouseNpcMessage = "No warehouse NPC found";
private readonly TalkNpcAction _talkNpcAction = new();
@@ -55,7 +53,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.GetTranslation(player.Culture)).ConfigureAwait(false);
return;
}
@@ -63,7 +61,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;
@@ -88,13 +86,13 @@ public class OpenWarehouseChatCommandConfiguration
///
/// Gets or sets the minimum VIP level to use the command (excluding GM).
///
- [Display(Name = "Minimum VIP Level", Description = @"The minimum VIP level to use the command (excluding GM). Default: 0.")]
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.OpenWarehouseChatCommandConfiguration_MinimumVipLevel_Name), Description = nameof(PlugInResources.OpenWarehouseChatCommandConfiguration_MinimumVipLevel_Description))]
public int MinimumVipLevel { get; set; }
///
/// Gets or sets the message to show when the player does not have the required VIP level for this command (excluding GM).
///
- [Display(Name = "Insufficient VIP Level Message", Description = @"The message to show when the player does not have the required VIP level for this command (excluding GM).")]
- public string InsufficientVipLevelMessage { get; set; } = "Insufficient VIP level to use this command";
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.OpenWarehouseChatCommandConfiguration_InsufficientVipLevelMessage_Name), Description = nameof(PlugInResources.OpenWarehouseChatCommandConfiguration_InsufficientVipLevelMessage_Description))]
+ public LocalizedString InsufficientVipLevelMessage { get; set; } = "Insufficient VIP level to use this command";
}
}
\ No newline at end of file
diff --git a/src/GameLogic/PlugIns/ChatCommands/PKChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/PKChatCommandPlugIn.cs
index 6e9aa3126..fc7b6a42a 100644
--- a/src/GameLogic/PlugIns/ChatCommands/PKChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/PKChatCommandPlugIn.cs
@@ -13,8 +13,9 @@ 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.")]
-[ChatCommandHelp(Command, "Sets player kill level and count of a character.", typeof(PkChatCommandArgs), CharacterStatus.GameMaster)]
+[PlugIn]
+[Display(Name = nameof(PlugInResources.PkChatCommandPlugIn_Name), Description = nameof(PlugInResources.PkChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
+[ChatCommandHelp(Command, typeof(PkChatCommandArgs), CharacterStatus.GameMaster)]
public class PkChatCommandPlugIn : ChatCommandPlugInBase
{
private const string Command = "/pk";
@@ -32,27 +33,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 targetPlayer = await this.GetPlayerByCharacterNameAsync(gameMaster, arguments.CharacterName ?? string.Empty).ConfigureAwait(false);
+ var character = targetPlayer?.SelectedCharacter;
+ if (character is null)
+ {
+ // logged out in the mean time ...
+ return;
+ }
- 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));
+ 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 this.ShowMessageToAsync(gameMaster, $"[{this.Key}] {message}").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..89cb7466b 100644
--- a/src/GameLogic/PlugIns/ChatCommands/PKClearChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/PKClearChatCommandPlugIn.cs
@@ -13,8 +13,9 @@ 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.")]
-[ChatCommandHelp(Command, "Clears the player kill count.", typeof(PkClearChatCommandArgs), CharacterStatus.GameMaster)]
+[PlugIn]
+[Display(Name = nameof(PlugInResources.PkClearChatCommandPlugIn_Name), Description = nameof(PlugInResources.PkClearChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
+[ChatCommandHelp(Command, typeof(PkClearChatCommandArgs), CharacterStatus.GameMaster)]
public class PkClearChatCommandPlugIn : ChatCommandPlugInBase
{
private const string Command = "/pkclear";
@@ -28,7 +29,11 @@ public class PkClearChatCommandPlugIn : ChatCommandPlugInBase
protected override async ValueTask DoHandleCommandAsync(Player gameMaster, PkClearChatCommandArgs arguments)
{
- var targetPlayer = this.GetPlayerByCharacterName(gameMaster, arguments.CharacterName ?? string.Empty);
+ var targetPlayer = await this.GetPlayerByCharacterNameAsync(gameMaster, arguments.CharacterName ?? string.Empty).ConfigureAwait(false);
+ if (targetPlayer is null)
+ {
+ return;
+ }
targetPlayer.SelectedCharacter!.State = HeroState.Normal;
targetPlayer.SelectedCharacter!.StateRemainingSeconds = 0;
@@ -37,9 +42,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/PostChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/PostChatCommandPlugIn.cs
index 602dc5cca..8332b787f 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 = nameof(PlugInResources.PostChatCommandPlugIn_Name), Description = nameof(PlugInResources.PostChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
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 fa60cd79e..3da28e287 100644
--- a/src/GameLogic/PlugIns/ChatCommands/RemoveNpcChatCommand.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/RemoveNpcChatCommand.cs
@@ -13,8 +13,9 @@ 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 '.")]
-[ChatCommandHelp(Command, "Removes a NPC with the specified id.", typeof(IdCommandArgs), CharacterStatus.GameMaster)]
+[PlugIn]
+[Display(Name = nameof(PlugInResources.RemoveNpcChatCommand_Name), Description = nameof(PlugInResources.RemoveNpcChatCommand_Description), ResourceType = typeof(PlugInResources))]
+[ChatCommandHelp(Command, typeof(IdCommandArgs), CharacterStatus.GameMaster)]
internal class RemoveNpcChatCommand : ChatCommandPlugInBase
{
private const string Command = "/removenpc";
@@ -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 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..b30a6de9a 100644
--- a/src/GameLogic/PlugIns/ChatCommands/SetLevelChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/SetLevelChatCommandPlugIn.cs
@@ -1,29 +1,25 @@
-//
+//
// 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.Attributes;
using MUnique.OpenMU.GameLogic.Views.Character;
-using MUnique.OpenMU.Interfaces;
using MUnique.OpenMU.PlugIns;
///
/// 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 = nameof(PlugInResources.SetLevelChatCommandPlugIn_Name), Description = nameof(PlugInResources.SetLevelChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
[ChatCommandHelp(Command, "Sets level of a player. Usage: /setlevel (level) (optional:character)", null)]
public class SetLevelChatCommandPlugIn : ChatCommandPlugInBase, IDisabledByDefault
{
private const string Command = "/setlevel";
private const CharacterStatus MinimumStatus = CharacterStatus.GameMaster;
- private const string CharacterNotFoundMessage = "Character '{0}' not found.";
- private const string InvalidLevelMessage = "Invalid level - must be between 1 and {0}.";
- private const string LevelSetMessage = "Level set to {0}.";
///
public override string Key => Command;
@@ -41,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;
}
}
@@ -53,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 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..44716be3b 100644
--- a/src/GameLogic/PlugIns/ChatCommands/SetLevelUpPointsChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/SetLevelUpPointsChatCommandPlugIn.cs
@@ -1,4 +1,4 @@
-//
+//
// Licensed under the MIT License. See LICENSE file in the project root for full license information.
//
@@ -14,15 +14,13 @@ 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 = nameof(PlugInResources.SetLevelUpPointsChatCommandPlugIn_Name), Description = nameof(PlugInResources.SetLevelUpPointsChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
[ChatCommandHelp(Command, "Sets level up points of a player. Usage: /setleveluppoints (points) (optional:character)", null)]
public class SetLevelUpPointsChatCommandPlugIn : ChatCommandPlugInBase, IDisabledByDefault
{
private const string Command = "/setleveluppoints";
private const CharacterStatus MinimumStatus = CharacterStatus.GameMaster;
- private const string CharacterNotFoundMessage = "Character '{0}' not found.";
- private const string InvalidLevelUpPointsMessage = "Invalid level-up points - must be bigger or equal to 0.";
- private const string LevelUpPointsSetMessage = "Level-up points set to {0}.";
///
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;
}
}
@@ -52,13 +50,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..aa4a7f42e 100644
--- a/src/GameLogic/PlugIns/ChatCommands/SetMasterLevelChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/SetMasterLevelChatCommandPlugIn.cs
@@ -1,29 +1,25 @@
-//
+//
// 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.Attributes;
using MUnique.OpenMU.GameLogic.Views.Character;
-using MUnique.OpenMU.Interfaces;
using MUnique.OpenMU.PlugIns;
///
/// 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 = nameof(PlugInResources.SetMasterLevelChatCommandPlugIn_Name), Description = nameof(PlugInResources.SetMasterLevelChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
[ChatCommandHelp(Command, "Sets master level of a player. Usage: /setmasterlevel (level) (optional:character)", null)]
public class SetMasterLevelChatCommandPlugIn : ChatCommandPlugInBase, IDisabledByDefault
{
private const string Command = "/setmasterlevel";
private const CharacterStatus MinimumStatus = CharacterStatus.GameMaster;
- private const string CharacterNotFoundMessage = "Character '{0}' not found.";
- private const string InvalidLevelMessage = "Invalid level - must be between 1 and {0}.";
- private const string MasterLevelSetMessage = "Master level set to {0}.";
///
public override string Key => Command;
@@ -41,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;
}
}
@@ -53,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 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..0539c38f7 100644
--- a/src/GameLogic/PlugIns/ChatCommands/SetMasterLevelUpPointsChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/SetMasterLevelUpPointsChatCommandPlugIn.cs
@@ -1,28 +1,24 @@
-//
+//
// 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.Views.Character;
-using MUnique.OpenMU.Interfaces;
using MUnique.OpenMU.PlugIns;
///
/// 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 = nameof(PlugInResources.SetMasterLevelUpPointsChatCommandPlugIn_Name), Description = nameof(PlugInResources.SetMasterLevelUpPointsChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
[ChatCommandHelp(Command, "Sets master level up points of a player. Usage: /setmasterleveluppoints (points) (optional:character)", null)]
public class SetMasterLevelUpPointsChatCommandPlugIn : ChatCommandPlugInBase, IDisabledByDefault
{
private const string Command = "/setmasterleveluppoints";
private const CharacterStatus MinimumStatus = CharacterStatus.GameMaster;
- private const string CharacterNotFoundMessage = "Character '{0}' not found.";
- private const string InvalidMasterLevelUpPointsMessage = "Invalid master level-up points - must be bigger or equal to 0.";
- private const string MasterLevelUpPointsSetMessage = "Master level-up points set to {0}.";
///
public override string Key => Command;
@@ -35,7 +31,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 +42,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 +54,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..157568895 100644
--- a/src/GameLogic/PlugIns/ChatCommands/SetMoneyChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/SetMoneyChatCommandPlugIn.cs
@@ -1,28 +1,23 @@
-//
+//
// 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.Views;
-using MUnique.OpenMU.Interfaces;
using MUnique.OpenMU.PlugIns;
///
/// 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 = nameof(PlugInResources.SetMoneyChatCommandPlugIn_Name), Description = nameof(PlugInResources.SetMoneyChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
[ChatCommandHelp(Command, "Sets money of a player. Usage: /setmoney (amount) (optional:character)", null)]
public class SetMoneyChatCommandPlugIn : ChatCommandPlugInBase, IDisabledByDefault
{
private const string Command = "/setmoney";
private const CharacterStatus MinimumStatus = CharacterStatus.GameMaster;
- private const string CharacterNotFoundMessage = "Character '{0}' not found.";
- private const string InvalidAmountMessage = "Invalid amount - must be between 0 and {0}.";
- private const string MoneySetMessage = "Money set to {0}.";
///
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;
}
}
@@ -57,12 +52,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..e49c4cbba 100644
--- a/src/GameLogic/PlugIns/ChatCommands/SetResetsChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/SetResetsChatCommandPlugIn.cs
@@ -1,31 +1,25 @@
-//
+//
// 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.Attributes;
using MUnique.OpenMU.GameLogic.Resets;
-using MUnique.OpenMU.Interfaces;
using MUnique.OpenMU.PlugIns;
///
/// 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 = nameof(PlugInResources.SetResetsChatCommandPlugIn_Name), Description = nameof(PlugInResources.SetResetsChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
[ChatCommandHelp(Command, "Sets resets of a player. Usage: /setresets (resets) (optional:character)", null)]
public class SetResetsChatCommandPlugIn : ChatCommandPlugInBase, IDisabledByDefault
{
private const string Command = "/setresets";
private const CharacterStatus MinimumStatus = CharacterStatus.GameMaster;
- private const string ResetPluginDisabledMessage = "The reset system is not enabled on this server.";
- private const string CharacterNotFoundMessage = "Character '{0}' not found.";
- private const string InvalidResetsWithLimitMessage = "Invalid resets - must be between 0 and {0}.";
- private const string InvalidResetsNoLimitMessage = "Invalid resets - must be bigger than 0.";
- private const string ResetsSetMessage = "Resets set to {0}.";
///
public override string Key => Command;
@@ -39,7 +33,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 +44,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 +58,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 +66,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..abc2f02fa 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;
@@ -15,17 +14,14 @@ 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)")]
-[ChatCommandHelp(Command, "Set stat points. Usage: /set (ene|agi|vit|str|cmd) (amount) (optional:character)", typeof(Arguments), MinimumStatus)]
+[PlugIn]
+[Display(Name = nameof(PlugInResources.SetStatChatCommandPlugIn_Name), Description = nameof(PlugInResources.SetStatChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
+[ChatCommandHelp(Command, typeof(Arguments), MinimumStatus)]
public class SetStatChatCommandPlugIn : ChatCommandPlugInBase, IDisabledByDefault
{
private const string Command = "/set";
private const CharacterStatus MinimumStatus = CharacterStatus.GameMaster;
- private const string CharacterNotFoundMessage = "Character '{0}' not found.";
- private const string InvalidStatWithLimitMessage = "Invalid {0} - must be between 0 and {1}.";
- private const string InvalidStatNoLimitMessage = "Invalid {0} - must be bigger than 1.";
- private const string StatSetMessage = "{0} set to {1}.";
///
public override string Key => Command;
@@ -36,76 +32,39 @@ public class SetStatChatCommandPlugIn : ChatCommandPlugInBase
protected override async ValueTask DoHandleCommandAsync(Player player, Arguments arguments)
{
- try
+ var targetPlayer = player;
+ if (arguments.CharacterName is { } characterName)
{
- if (arguments is null)
+ 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);
}
- catch (ArgumentException e)
+
+ var attribute = await this.TryGetAttributeAsync(targetPlayer, arguments.StatType).ConfigureAwait(false);
+ if (attribute is null)
{
- await player.ShowMessageAsync(e.Message).ConfigureAwait(false);
+ return;
}
- }
- private AttributeDefinition GetAttribute(Character selectedCharacter, string? statType)
- {
- var attribute = statType switch
+ if (attribute.MaximumValue is null && arguments.Amount < 1)
{
- "str" => Stats.BaseStrength,
- "agi" => Stats.BaseAgility,
- "vit" => Stats.BaseVitality,
- "ene" => Stats.BaseEnergy,
- "cmd" => Stats.BaseLeadership,
- _ => throw new ArgumentException($"Unknown stat: '{statType}'."),
- };
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.InvalidStatValue), arguments.StatType).ConfigureAwait(false);
+ return;
+ }
- if (selectedCharacter.Attributes.All(sa => sa.Definition != attribute))
+ if (attribute.MaximumValue < 0 || arguments.Amount > attribute.MaximumValue)
{
- throw new ArgumentException($"The character has no stat attribute '{statType}'.");
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.InvalidStatValueRange), arguments.StatType, attribute.MaximumValue).ConfigureAwait(false);
+ return;
}
- return attribute;
+ 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);
}
///
diff --git a/src/GameLogic/PlugIns/ChatCommands/ShowFireworksEffectChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/ShowFireworksEffectChatCommandPlugIn.cs
index 73725b922..9bb72b8ca 100644
--- a/src/GameLogic/PlugIns/ChatCommands/ShowFireworksEffectChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/ShowFireworksEffectChatCommandPlugIn.cs
@@ -14,8 +14,9 @@ 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.")]
-[ChatCommandHelp(Command, "Shows an fireworks effect at the specified coordinates.", typeof(CoordinatesCommandArgs), CharacterStatus.GameMaster)]
+[PlugIn]
+[Display(Name = nameof(PlugInResources.ShowFireworksEffectChatCommandPlugIn_Name), Description = nameof(PlugInResources.ShowFireworksEffectChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
+[ChatCommandHelp(Command, typeof(CoordinatesCommandArgs), CharacterStatus.GameMaster)]
public class ShowFireworksEffectChatCommandPlugIn : ChatCommandPlugInBase
{
private const string Command = "/fireworks";
diff --git a/src/GameLogic/PlugIns/ChatCommands/ShowNpcIdsChatCommand.cs b/src/GameLogic/PlugIns/ChatCommands/ShowNpcIdsChatCommand.cs
index d568866fa..765877a0f 100644
--- a/src/GameLogic/PlugIns/ChatCommands/ShowNpcIdsChatCommand.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/ShowNpcIdsChatCommand.cs
@@ -13,8 +13,9 @@ 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'.")]
-[ChatCommandHelp(Command, "Shows the IDs of all NPCs in the view range of the game master.", CharacterStatus.GameMaster)]
+[PlugIn]
+[Display(ResourceType = typeof(PlugInResources), Name = "ShowNpcIdsChatCommand_ShowNpcIdsChatCommand_Name", Description = "ShowNpcIdsChatCommand_ShowNpcIdsChatCommand_Description")]
+[ChatCommandHelp(Command, CharacterStatus.GameMaster)]
internal sealed class ShowNpcIdsChatCommand : IChatCommandPlugIn
{
private const string Command = "/showids";
diff --git a/src/GameLogic/PlugIns/ChatCommands/ShowXmasFireworksEffectChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/ShowXmasFireworksEffectChatCommandPlugIn.cs
index 51ef355b9..279164341 100644
--- a/src/GameLogic/PlugIns/ChatCommands/ShowXmasFireworksEffectChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/ShowXmasFireworksEffectChatCommandPlugIn.cs
@@ -14,8 +14,9 @@ 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.")]
-[ChatCommandHelp(Command, "Shows an christmas fireworks effect at the specified coordinates.", typeof(CoordinatesCommandArgs), CharacterStatus.GameMaster)]
+[PlugIn]
+[Display(Name = nameof(PlugInResources.ShowXmasFireworksEffectChatCommandPlugIn_Name), Description = nameof(PlugInResources.ShowXmasFireworksEffectChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
+[ChatCommandHelp(Command, typeof(CoordinatesCommandArgs), CharacterStatus.GameMaster)]
public class ShowXmasFireworksEffectChatCommandPlugIn : ChatCommandPlugInBase
{
private const string Command = "/xmasfireworks";
diff --git a/src/GameLogic/PlugIns/ChatCommands/SkinChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/SkinChatCommandPlugIn.cs
index 712114ce6..14948fa90 100644
--- a/src/GameLogic/PlugIns/ChatCommands/SkinChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/SkinChatCommandPlugIn.cs
@@ -15,8 +15,9 @@ 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.")]
-[ChatCommandHelp(Command, "Applies a monster skin to the game masters character.", typeof(SkinChatCommandArgs), CharacterStatus.GameMaster)]
+[PlugIn]
+[Display(Name = nameof(PlugInResources.SkinChatCommandPlugIn_Name), Description = nameof(PlugInResources.SkinChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
+[ChatCommandHelp(Command, typeof(SkinChatCommandArgs), CharacterStatus.GameMaster)]
public class SkinChatCommandPlugIn : ChatCommandPlugInBase
{
private const string Command = "/skin";
diff --git a/src/GameLogic/PlugIns/ChatCommands/StartBloodCastleEventChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/StartBloodCastleEventChatCommandPlugIn.cs
index 1cf0b5110..9508178c3 100644
--- a/src/GameLogic/PlugIns/ChatCommands/StartBloodCastleEventChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/StartBloodCastleEventChatCommandPlugIn.cs
@@ -1,4 +1,4 @@
-//
+//
// Licensed under the MIT License. See LICENSE file in the project root for full license information.
//
@@ -12,8 +12,9 @@ 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.")]
-[ChatCommandHelp(Command, "Starts the blood castle event at the next possible time.", CharacterStatus.GameMaster)]
+[PlugIn]
+[Display(Name = nameof(PlugInResources.StartBloodCastleEventChatCommandPlugIn_Name), Description = nameof(PlugInResources.StartBloodCastleEventChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
+[ChatCommandHelp(Command, CharacterStatus.GameMaster)]
public class StartBloodCastleEventChatCommandPlugIn : IChatCommandPlugIn
{
private const string Command = "/startbc";
diff --git a/src/GameLogic/PlugIns/ChatCommands/StartChaosCastleEventChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/StartChaosCastleEventChatCommandPlugIn.cs
index c4135da0e..4e6526a03 100644
--- a/src/GameLogic/PlugIns/ChatCommands/StartChaosCastleEventChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/StartChaosCastleEventChatCommandPlugIn.cs
@@ -1,4 +1,4 @@
-//
+//
// Licensed under the MIT License. See LICENSE file in the project root for full license information.
//
@@ -12,8 +12,9 @@ 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.")]
-[ChatCommandHelp(Command, "Starts the chaos castle event at the next possible time.", CharacterStatus.GameMaster)]
+[PlugIn]
+[Display(Name = nameof(PlugInResources.StartChaosCastleEventChatCommandPlugIn_Name), Description = nameof(PlugInResources.StartChaosCastleEventChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
+[ChatCommandHelp(Command, CharacterStatus.GameMaster)]
public class StartChaosCastleEventChatCommandPlugIn : IChatCommandPlugIn
{
private const string Command = "/startcc";
diff --git a/src/GameLogic/PlugIns/ChatCommands/StartDevilSquareEventChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/StartDevilSquareEventChatCommandPlugIn.cs
index afb06406f..2c902edf1 100644
--- a/src/GameLogic/PlugIns/ChatCommands/StartDevilSquareEventChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/StartDevilSquareEventChatCommandPlugIn.cs
@@ -1,4 +1,4 @@
-//
+//
// Licensed under the MIT License. See LICENSE file in the project root for full license information.
//
@@ -12,8 +12,9 @@ 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.")]
-[ChatCommandHelp(Command, "Starts the devil square event at the next possible time.", CharacterStatus.GameMaster)]
+[PlugIn]
+[Display(Name = nameof(PlugInResources.StartDevilSquareEventChatCommandPlugIn_Name), Description = nameof(PlugInResources.StartDevilSquareEventChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
+[ChatCommandHelp(Command, CharacterStatus.GameMaster)]
public class StartDevilSquareEventChatCommandPlugIn : IChatCommandPlugIn
{
private const string Command = "/startds";
diff --git a/src/GameLogic/PlugIns/ChatCommands/TeleportChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/TeleportChatCommandPlugIn.cs
index cb97459f9..900e26146 100644
--- a/src/GameLogic/PlugIns/ChatCommands/TeleportChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/TeleportChatCommandPlugIn.cs
@@ -12,8 +12,9 @@ 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.")]
-[ChatCommandHelp(Command, "Teleports the game master to the specified coordinates.", typeof(CoordinatesCommandArgs), CharacterStatus.GameMaster)]
+[PlugIn]
+[Display(Name = nameof(PlugInResources.TeleportChatCommandPlugIn_Name), Description = nameof(PlugInResources.TeleportChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
+[ChatCommandHelp(Command, typeof(CoordinatesCommandArgs), CharacterStatus.GameMaster)]
public class TeleportChatCommandPlugIn : ChatCommandPlugInBase
{
private const string Command = "/teleport";
diff --git a/src/GameLogic/PlugIns/ChatCommands/TraceChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/TraceChatCommandPlugIn.cs
index 002c1bed0..56556514f 100644
--- a/src/GameLogic/PlugIns/ChatCommands/TraceChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/TraceChatCommandPlugIn.cs
@@ -12,8 +12,9 @@ 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.")]
-[ChatCommandHelp(Command, "Moves the game master to the character's location.", typeof(TraceChatCommandArgs), CharacterStatus.GameMaster)]
+[PlugIn]
+[Display(Name = nameof(PlugInResources.TraceChatCommandPlugIn_Name), Description = nameof(PlugInResources.TraceChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
+[ChatCommandHelp(Command, typeof(TraceChatCommandArgs), CharacterStatus.GameMaster)]
public class TraceChatCommandPlugIn : ChatCommandPlugInBase
{
private const string Command = "/trace";
@@ -27,21 +28,23 @@ public class TraceChatCommandPlugIn : ChatCommandPlugInBase
protected override async ValueTask DoHandleCommandAsync(Player gameMaster, TraceChatCommandArgs arguments)
{
- var player = this.GetPlayerByCharacterName(gameMaster, arguments.CharacterName ?? string.Empty);
- var character = player.SelectedCharacter;
+ var player = await this.GetPlayerByCharacterNameAsync(gameMaster, arguments.CharacterName ?? string.Empty).ConfigureAwait(false);
+ var character = player?.SelectedCharacter;
- if (character != null)
+ if (character is null)
{
- var characterLocation = new ExitGate
- {
- Map = character.CurrentMap,
- X1 = character.PositionX,
- X2 = (byte)(character.PositionX + 2),
- Y1 = character.PositionY,
- Y2 = (byte)(character.PositionY + 2),
- };
-
- await gameMaster.WarpToAsync(characterLocation).ConfigureAwait(false);
+ return;
}
+
+ var characterLocation = new ExitGate
+ {
+ Map = character.CurrentMap,
+ X1 = character.PositionX,
+ X2 = (byte)(character.PositionX + 2),
+ Y1 = character.PositionY,
+ Y2 = (byte)(character.PositionY + 2),
+ };
+
+ await gameMaster.WarpToAsync(characterLocation).ConfigureAwait(false);
}
}
\ No newline at end of file
diff --git a/src/GameLogic/PlugIns/ChatCommands/TrackChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/TrackChatCommandPlugIn.cs
index e60bc8e69..b56d3fc27 100644
--- a/src/GameLogic/PlugIns/ChatCommands/TrackChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/TrackChatCommandPlugIn.cs
@@ -12,8 +12,9 @@ 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.")]
-[ChatCommandHelp(Command, "Moves the player to the game masters location.", typeof(TraceChatCommandArgs), CharacterStatus.GameMaster)]
+[PlugIn]
+[Display(Name = nameof(PlugInResources.TrackChatCommandPlugIn_Name), Description = nameof(PlugInResources.TrackChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
+[ChatCommandHelp(Command, typeof(TraceChatCommandArgs), CharacterStatus.GameMaster)]
public class TrackChatCommandPlugIn : ChatCommandPlugInBase
{
private const string Command = "/track";
@@ -27,20 +28,22 @@ public class TrackChatCommandPlugIn : ChatCommandPlugInBase
protected override async ValueTask DoHandleCommandAsync(Player gameMaster, TraceChatCommandArgs arguments)
{
- var player = this.GetPlayerByCharacterName(gameMaster, arguments.CharacterName ?? string.Empty);
+ var player = await this.GetPlayerByCharacterNameAsync(gameMaster, arguments.CharacterName ?? string.Empty).ConfigureAwait(false);
- if (gameMaster.SelectedCharacter != null)
+ if (gameMaster.SelectedCharacter is null || player is null)
{
- var gameMasterLocation = new ExitGate
- {
- Map = gameMaster.SelectedCharacter.CurrentMap,
- X1 = gameMaster.SelectedCharacter.PositionX,
- X2 = (byte)(gameMaster.SelectedCharacter.PositionX + 2),
- Y1 = gameMaster.SelectedCharacter.PositionY,
- Y2 = (byte)(gameMaster.SelectedCharacter.PositionY + 2),
- };
-
- await player.WarpToAsync(gameMasterLocation).ConfigureAwait(false);
+ return;
}
+
+ var gameMasterLocation = new ExitGate
+ {
+ Map = gameMaster.SelectedCharacter.CurrentMap,
+ X1 = gameMaster.SelectedCharacter.PositionX,
+ X2 = (byte)(gameMaster.SelectedCharacter.PositionX + 2),
+ Y1 = gameMaster.SelectedCharacter.PositionY,
+ Y2 = (byte)(gameMaster.SelectedCharacter.PositionY + 2),
+ };
+
+ await player.WarpToAsync(gameMasterLocation).ConfigureAwait(false);
}
}
\ No newline at end of file
diff --git a/src/GameLogic/PlugIns/ChatCommands/UnBanAccChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/UnBanAccChatCommandPlugIn.cs
index 31ae16d2e..06ee82082 100644
--- a/src/GameLogic/PlugIns/ChatCommands/UnBanAccChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/UnBanAccChatCommandPlugIn.cs
@@ -12,8 +12,9 @@ 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.")]
-[ChatCommandHelp(Command, "Unbans an account from the game.", typeof(UnBanAccChatCommandArgs), CharacterStatus.GameMaster)]
+[PlugIn]
+[Display(Name = nameof(PlugInResources.UnBanAccChatCommandPlugIn_Name), Description = nameof(PlugInResources.UnBanAccChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
+[ChatCommandHelp(Command, typeof(UnBanAccChatCommandArgs), CharacterStatus.GameMaster)]
public class UnBanAccChatCommandPlugIn : ChatCommandPlugInBase
{
private const string Command = "/unbanacc";
@@ -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 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..14d459258 100644
--- a/src/GameLogic/PlugIns/ChatCommands/UnBanCharChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/UnBanCharChatCommandPlugIn.cs
@@ -12,8 +12,9 @@ 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.")]
-[ChatCommandHelp(Command, "Unbans the account of a character from the game.", typeof(UnBanCharChatCommandArgs), CharacterStatus.GameMaster)]
+[PlugIn]
+[Display(Name = nameof(PlugInResources.UnBanCharChatCommandPlugIn_Name), Description = nameof(PlugInResources.UnBanCharChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
+[ChatCommandHelp(Command, typeof(UnBanCharChatCommandArgs), CharacterStatus.GameMaster)]
public class UnBanCharChatCommandPlugIn : ChatCommandPlugInBase
{
private const string Command = "/unbanchar";
@@ -27,8 +28,11 @@ public class UnBanCharChatCommandPlugIn : ChatCommandPlugInBase
protected override async ValueTask DoHandleCommandAsync(Player gameMaster, BanCharChatCommandArgs arguments)
{
- await this.ChangeAccountStateByCharacterNameAsync(gameMaster, arguments.CharacterName ?? string.Empty, AccountState.Normal).ConfigureAwait(false);
+ if (!await this.TryChangeAccountStateByCharacterNameAsync(gameMaster, arguments.CharacterName ?? string.Empty, AccountState.Normal).ConfigureAwait(false))
+ {
+ return;
+ }
- 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/UnHideChatCommandPlugIn.cs b/src/GameLogic/PlugIns/ChatCommands/UnHideChatCommandPlugIn.cs
index ea5757ab1..db649fd82 100644
--- a/src/GameLogic/PlugIns/ChatCommands/UnHideChatCommandPlugIn.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/UnHideChatCommandPlugIn.cs
@@ -11,8 +11,9 @@ 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.")]
-[ChatCommandHelp(Command, "Unhides the own player from others.", CharacterStatus.GameMaster)]
+[PlugIn]
+[Display(Name = nameof(PlugInResources.UnHideChatCommandPlugIn_Name), Description = nameof(PlugInResources.UnHideChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
+[ChatCommandHelp(Command, CharacterStatus.GameMaster)]
public class UnHideChatCommandPlugIn : IChatCommandPlugIn
{
private const string Command = "/unhide";
diff --git a/src/GameLogic/PlugIns/ChatCommands/WalkMonsterChatCommand.cs b/src/GameLogic/PlugIns/ChatCommands/WalkMonsterChatCommand.cs
index f699e10cc..0a75920d8 100644
--- a/src/GameLogic/PlugIns/ChatCommands/WalkMonsterChatCommand.cs
+++ b/src/GameLogic/PlugIns/ChatCommands/WalkMonsterChatCommand.cs
@@ -13,8 +13,9 @@ 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.")]
-[ChatCommandHelp(Command, "Walks a previously created monster which can be remote controlled by the game master.", typeof(MoveMonsterCommandArgs), CharacterStatus.GameMaster)]
+[PlugIn]
+[Display(Name = nameof(PlugInResources.WalkMonsterChatCommand_Name), Description = nameof(PlugInResources.WalkMonsterChatCommand_Description), ResourceType = typeof(PlugInResources))]
+[ChatCommandHelp(Command, typeof(MoveMonsterCommandArgs), CharacterStatus.GameMaster)]
internal class WalkMonsterChatCommand : ChatCommandPlugInBase
{
private const string Command = "/walkmonster";
@@ -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 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/GuildWarKillScorePlugIn.cs b/src/GameLogic/PlugIns/GuildWarKillScorePlugIn.cs
index d9698df81..f1c92ad66 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 = nameof(PlugInResources.GuildWarKillScorePlugIn_Name), Description = nameof(PlugInResources.GuildWarKillScorePlugIn_Description), ResourceType = typeof(PlugInResources))]
[Guid("2D4E16CD-B7FF-4ED3-B4B1-4AABD04BAD71")]
public class GuildWarKillScorePlugIn : IAttackableGotKilledPlugIn
{
diff --git a/src/GameLogic/PlugIns/InvasionEvents/BaseInvasionPlugIn.cs b/src/GameLogic/PlugIns/InvasionEvents/BaseInvasionPlugIn.cs
index d89a09d30..4bf38de65 100644
--- a/src/GameLogic/PlugIns/InvasionEvents/BaseInvasionPlugIn.cs
+++ b/src/GameLogic/PlugIns/InvasionEvents/BaseInvasionPlugIn.cs
@@ -7,6 +7,7 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.InvasionEvents;
using MUnique.OpenMU.GameLogic.NPC;
using MUnique.OpenMU.GameLogic.PlugIns.PeriodicTasks;
using MUnique.OpenMU.GameLogic.Views;
+using MUnique.OpenMU.Interfaces;
using MUnique.OpenMU.PlugIns;
///
@@ -207,7 +208,7 @@ protected bool IsPlayerOnMap(Player player, bool checkForCurrentMap = false)
///
/// The player.
/// The map name.
- protected async Task TrySendStartMessageAsync(Player player, string mapName)
+ protected async Task TrySendStartMessageAsync(Player player, LocalizedString mapName)
{
var configuration = this.Configuration;
@@ -216,7 +217,7 @@ protected async Task TrySendStartMessageAsync(Player player, string mapName)
return;
}
- var message = (configuration.Message ?? "[{mapName}] Invasion!").Replace("{mapName}", mapName, StringComparison.InvariantCulture);
+ var message = (configuration.Message?.ToString() ?? PlugInResources.BaseInvasionPlugIn_DefaultStartMessage).Replace("{mapName}", mapName.GetTranslation(player.Culture), StringComparison.InvariantCulture);
if (this.IsPlayerOnMap(player))
{
diff --git a/src/GameLogic/PlugIns/InvasionEvents/GoldenInvasionPlugIn.cs b/src/GameLogic/PlugIns/InvasionEvents/GoldenInvasionPlugIn.cs
index 1b748f5df..84bd64e32 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(PlugInResources.GoldenInvasionPlugIn_Name), Description = nameof(PlugInResources.GoldenInvasionPlugIn_Description), ResourceType = typeof(PlugInResources))]
[Guid("06D18A9E-2919-4C17-9DBC-6E4F7756495C")]
public class GoldenInvasionPlugIn : BaseInvasionPlugIn, ISupportDefaultCustomConfiguration
{
diff --git a/src/GameLogic/PlugIns/InvasionEvents/InvasionGameServerState.cs b/src/GameLogic/PlugIns/InvasionEvents/InvasionGameServerState.cs
index f3ed71c49..750774c72 100644
--- a/src/GameLogic/PlugIns/InvasionEvents/InvasionGameServerState.cs
+++ b/src/GameLogic/PlugIns/InvasionEvents/InvasionGameServerState.cs
@@ -5,6 +5,7 @@
namespace MUnique.OpenMU.GameLogic.PlugIns.InvasionEvents;
using MUnique.OpenMU.GameLogic.PlugIns.PeriodicTasks;
+using MUnique.OpenMU.Interfaces;
///
/// Game server state per event.
@@ -33,11 +34,11 @@ public InvasionGameServerState(IGameContext context)
///
/// Gets the name of the map.
///
- public string MapName => this.Map.Name;
+ public LocalizedString MapName => this.Map.Name;
///
- public override string ToString()
+ public override string? ToString()
{
- return this.MapName;
+ return this.MapName.ToString();
}
}
\ No newline at end of file
diff --git a/src/GameLogic/PlugIns/InvasionEvents/PeriodicInvasionConfiguration.cs b/src/GameLogic/PlugIns/InvasionEvents/PeriodicInvasionConfiguration.cs
index dfb906fa2..f50444f0c 100644
--- a/src/GameLogic/PlugIns/InvasionEvents/PeriodicInvasionConfiguration.cs
+++ b/src/GameLogic/PlugIns/InvasionEvents/PeriodicInvasionConfiguration.cs
@@ -11,7 +11,6 @@ namespace MUnique.OpenMU.GameLogic.PlugIns.InvasionEvents;
///
public class PeriodicInvasionConfiguration : PeriodicTaskConfiguration
{
-
///
/// Initializes a new instance of the class.
///
diff --git a/src/GameLogic/PlugIns/InvasionEvents/RedDragonInvasionPlugIn.cs b/src/GameLogic/PlugIns/InvasionEvents/RedDragonInvasionPlugIn.cs
index 2a60bde12..2c089c6e3 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(PlugInResources.RedDragonInvasionPlugIn_Name), Description = nameof(PlugInResources.RedDragonInvasionPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..55d338958 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(PlugInResources.PeriodicSaveProgressPlugIn_Name), Description = nameof(PlugInResources.PeriodicSaveProgressPlugIn_Description), ResourceType = typeof(PlugInResources))]
[Guid("CEBBD5BD-B0DF-4768-816D-AF8DF78888B2")]
public class PeriodicSaveProgressPlugIn : IPeriodicTaskPlugIn, ISupportCustomConfiguration, ISupportDefaultCustomConfiguration
{
diff --git a/src/GameLogic/PlugIns/PeriodicSaveProgressPlugInConfiguration.cs b/src/GameLogic/PlugIns/PeriodicSaveProgressPlugInConfiguration.cs
index 33f09709f..7bc1af359 100644
--- a/src/GameLogic/PlugIns/PeriodicSaveProgressPlugInConfiguration.cs
+++ b/src/GameLogic/PlugIns/PeriodicSaveProgressPlugInConfiguration.cs
@@ -12,5 +12,6 @@ public class PeriodicSaveProgressPlugInConfiguration
///
/// Gets or sets the save interval.
///
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.PeriodicSaveProgressPlugInConfiguration_Interval_Name))]
public TimeSpan Interval { get; set; } = TimeSpan.FromMinutes(1);
}
\ No newline at end of file
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/HappyHourConfiguration.cs b/src/GameLogic/PlugIns/PeriodicTasks/HappyHourConfiguration.cs
index b09499584..c31695d90 100644
--- a/src/GameLogic/PlugIns/PeriodicTasks/HappyHourConfiguration.cs
+++ b/src/GameLogic/PlugIns/PeriodicTasks/HappyHourConfiguration.cs
@@ -26,5 +26,6 @@ public class HappyHourConfiguration : PeriodicTaskConfiguration
///
/// Gets or sets the experience multiplier.
///
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.HappyHourConfiguration_ExperienceMultiplier_Name))]
public float ExperienceMultiplier { get; set; } = 1.5f;
}
\ No newline at end of file
diff --git a/src/GameLogic/PlugIns/PeriodicTasks/HappyHourPlugIn.cs b/src/GameLogic/PlugIns/PeriodicTasks/HappyHourPlugIn.cs
index 4ecd074f6..bd9c6f799 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(PlugInResources.HappyHourPlugIn_Name), Description = nameof(PlugInResources.HappyHourPlugIn_Description), ResourceType = typeof(PlugInResources))]
[Guid("6542E452-9780-45B8-85AE-4036422E9A6E")]
public class HappyHourPlugIn : PeriodicTaskBasePlugIn, ISupportDefaultCustomConfiguration, IPlayerStateChangedPlugIn
{
@@ -116,8 +117,6 @@ protected async Task TrySendStartMessageAsync(Player player)
return;
}
- var message = configuration.Message ?? "Happy Hour event has been started!";
-
if (!this.IsPlayerOnMap(player))
{
return;
@@ -125,6 +124,7 @@ protected async Task TrySendStartMessageAsync(Player player)
try
{
+ var message = configuration.Message?.GetTranslation(player.Culture) ?? player.GetLocalizedMessage(nameof(PlayerMessage.HappyHourEventHasBeenStarted));
await player.InvokeViewPlugInAsync(p => p.ShowMessageAsync(message, Interfaces.MessageType.GoldenCenter)).ConfigureAwait(false);
}
catch (Exception ex)
diff --git a/src/GameLogic/PlugIns/PeriodicTasks/MiniGameStartConfiguration.cs b/src/GameLogic/PlugIns/PeriodicTasks/MiniGameStartConfiguration.cs
index d2d516938..6aa801a9b 100644
--- a/src/GameLogic/PlugIns/PeriodicTasks/MiniGameStartConfiguration.cs
+++ b/src/GameLogic/PlugIns/PeriodicTasks/MiniGameStartConfiguration.cs
@@ -4,6 +4,8 @@
namespace MUnique.OpenMU.GameLogic.PlugIns.PeriodicTasks;
+using MUnique.OpenMU.Interfaces;
+
///
/// The minimal minigame start configuration.
///
@@ -12,10 +14,12 @@ public abstract class MiniGameStartConfiguration : PeriodicTaskConfiguration
///
/// Gets or sets the entrance opened message.
///
- public string? EntranceOpenedMessage { get; set; }
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.MiniGameStartConfiguration_EntranceOpenedMessage_Name))]
+ public LocalizedString EntranceOpenedMessage { get; set; }
///
/// Gets or sets the entrance closed message.
///
- public string? EntranceClosedMessage { get; set; }
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.MiniGameStartConfiguration_EntranceClosedMessage_Name))]
+ public LocalizedString EntranceClosedMessage { get; set; }
}
\ No newline at end of file
diff --git a/src/GameLogic/PlugIns/PeriodicTasks/PeriodicTaskConfiguration.cs b/src/GameLogic/PlugIns/PeriodicTasks/PeriodicTaskConfiguration.cs
index 965f83c53..64ff9f68d 100644
--- a/src/GameLogic/PlugIns/PeriodicTasks/PeriodicTaskConfiguration.cs
+++ b/src/GameLogic/PlugIns/PeriodicTasks/PeriodicTaskConfiguration.cs
@@ -4,6 +4,8 @@
namespace MUnique.OpenMU.GameLogic.PlugIns.PeriodicTasks;
+using MUnique.OpenMU.Interfaces;
+
///
/// Configuration for the .
///
@@ -12,22 +14,26 @@ public class PeriodicTaskConfiguration
///
/// Gets or sets a timetable for the event.
///
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.PeriodicTaskConfiguration_Timetable_Name))]
public IList Timetable { get; set; } = new List();
///
/// Gets or sets a time delay.
///
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.PeriodicTaskConfiguration_PreStartMessageDelay_Name))]
public TimeSpan PreStartMessageDelay { get; set; } = TimeSpan.FromSeconds(3);
///
/// Gets or sets the minimum time of the task duration.
///
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.PeriodicTaskConfiguration_TaskDuration_Name))]
public TimeSpan TaskDuration { get; set; } = TimeSpan.FromMinutes(5);
///
/// Gets or sets the text which prints as a golden message in the game.
///
- public string? Message { get; set; }
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.PeriodicTaskConfiguration_Message_Name))]
+ public LocalizedString? Message { get; set; }
///
/// Generate a sequence of time points like [00:00, 00:01, ...].
diff --git a/src/GameLogic/PlugIns/PlayerLosesExperienceAfterDeathPlugIn.cs b/src/GameLogic/PlugIns/PlayerLosesExperienceAfterDeathPlugIn.cs
index 23caec0d6..a678cbfcd 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 = nameof(PlugInResources.PlayerLosesExperienceAfterDeathPlugIn_Name), Description = nameof(PlugInResources.PlayerLosesExperienceAfterDeathPlugIn_Description), ResourceType = typeof(PlugInResources))]
[Guid("CA9EACAC-1BD4-44BA-9187-C9F2CEF4E254")]
public class PlayerLosesExperienceAfterDeathPlugIn : IAttackableGotKilledPlugIn, ISupportCustomConfiguration, ISupportDefaultCustomConfiguration
{
diff --git a/src/GameLogic/PlugIns/PlayerLosesExperienceAfterDeathPlugInConfiguration.cs b/src/GameLogic/PlugIns/PlayerLosesExperienceAfterDeathPlugInConfiguration.cs
index 205776fd0..20230a149 100644
--- a/src/GameLogic/PlugIns/PlayerLosesExperienceAfterDeathPlugInConfiguration.cs
+++ b/src/GameLogic/PlugIns/PlayerLosesExperienceAfterDeathPlugInConfiguration.cs
@@ -18,6 +18,7 @@ public class PlayerLosesExperienceAfterDeathPlugInConfiguration
///
/// The losses per level.
///
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.PlayerLosesExperienceAfterDeathPlugInConfiguration_LossesPerLevel_Name))]
[MemberOfAggregate]
[ScaffoldColumn(true)]
public ICollection LossesPerLevel { get; set; } = new List();
@@ -53,16 +54,19 @@ public LossOfLevel(int minimumLevel, bool isMaster, List losses)
///
/// The minimum level.
///
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.PlayerLosesExperienceAfterDeathPlugInConfiguration_MinimumLevel_Name))]
public int MinimumLevel { get; set; }
///
/// Gets or sets a value indicating whether this instance applies only to master characters.
///
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.PlayerLosesExperienceAfterDeathPlugInConfiguration_IsMaster_Name))]
public bool IsMaster { get; set; }
///
/// Gets or sets the loss per .
///
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.PlayerLosesExperienceAfterDeathPlugInConfiguration_Losses_Name))]
[MemberOfAggregate]
[ScaffoldColumn(true)]
public ICollection Losses { get; set; } = [];
@@ -94,11 +98,13 @@ public LossPerStage(HeroState state, double experienceLossPercentage)
///
/// Gets or sets the state.
///
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.PlayerLosesExperienceAfterDeathPlugInConfiguration_State_Name))]
public HeroState State { get; set; }
///
/// Gets or sets the experience loss percentage.
///
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.PlayerLosesExperienceAfterDeathPlugInConfiguration_ExperienceLossPercentage_Name))]
public double ExperienceLossPercentage { get; set; }
}
}
\ No newline at end of file
diff --git a/src/GameLogic/PlugIns/PlayerLosesMoneyAfterDeathPlugIn.cs b/src/GameLogic/PlugIns/PlayerLosesMoneyAfterDeathPlugIn.cs
index 1f7abaa3c..f5fe65762 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 = nameof(PlugInResources.PlayerLosesMoneyAfterDeathPlugIn_Name), Description = nameof(PlugInResources.PlayerLosesMoneyAfterDeathPlugIn_Description), ResourceType = typeof(PlugInResources))]
[Guid("E3A4D8DD-C017-4A44-853B-569B1F12C350")]
public class PlayerLosesMoneyAfterDeathPlugIn : IAttackableGotKilledPlugIn, ISupportCustomConfiguration, ISupportDefaultCustomConfiguration
{
diff --git a/src/GameLogic/PlugIns/PlayerLosesMoneyAfterDeathPlugInConfiguration.cs b/src/GameLogic/PlugIns/PlayerLosesMoneyAfterDeathPlugInConfiguration.cs
index b98e4b1cb..6e6cc833c 100644
--- a/src/GameLogic/PlugIns/PlayerLosesMoneyAfterDeathPlugInConfiguration.cs
+++ b/src/GameLogic/PlugIns/PlayerLosesMoneyAfterDeathPlugInConfiguration.cs
@@ -20,6 +20,7 @@ public class PlayerLosesMoneyAfterDeathPlugInConfiguration
///
[MemberOfAggregate]
[ScaffoldColumn(true)]
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.PlayerLosesMoneyAfterDeathPlugInConfiguration_LossesPerLevel_Name))]
public ICollection LossesPerLevel { get; set; } = new List();
///
@@ -55,21 +56,25 @@ public LossOfLevel(int minimumLevel, bool isMaster, double inventoryMoneyLossPer
///
/// The minimum level.
///
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.PlayerLosesMoneyAfterDeathPlugInConfiguration_MinimumLevel_Name))]
public int MinimumLevel { get; set; }
///
/// Gets or sets a value indicating whether this instance applies only to master characters.
///
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.PlayerLosesMoneyAfterDeathPlugInConfiguration_IsMaster_Name))]
public bool IsMaster { get; set; }
///
/// Gets or sets the money loss percentage of the inventory.
///
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.PlayerLosesMoneyAfterDeathPlugInConfiguration_InventoryMoneyLossPercentage_Name))]
public double InventoryMoneyLossPercentage { get; set; }
///
/// Gets or sets the money loss percentage of the vault.
///
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.PlayerLosesMoneyAfterDeathPlugInConfiguration_VaultMoneyLossPercentage_Name))]
public double VaultMoneyLossPercentage { get; set; }
}
}
\ No newline at end of file
diff --git a/src/GameLogic/PlugIns/QuestMonsterKillCountPlugIn.cs b/src/GameLogic/PlugIns/QuestMonsterKillCountPlugIn.cs
index 9f627cbb0..dedc903cc 100644
--- a/src/GameLogic/PlugIns/QuestMonsterKillCountPlugIn.cs
+++ b/src/GameLogic/PlugIns/QuestMonsterKillCountPlugIn.cs
@@ -4,16 +4,16 @@
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;
///
/// 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 = nameof(PlugInResources.QuestMonsterKillCountPlugIn_Name), Description = nameof(PlugInResources.QuestMonsterKillCountPlugIn_Description), ResourceType = typeof(PlugInResources))]
[Guid("416C2231-D7FE-414A-9321-26622E262EF5")]
public class QuestMonsterKillCountPlugIn : IAttackableGotKilledPlugIn, ISupportCustomConfiguration, ISupportDefaultCustomConfiguration
{
@@ -57,13 +57,13 @@ public async ValueTask AttackableGotKilledAsync(IAttackable killed, IAttacker? k
if (killRequirement.MinimumNumber >= requirementState!.KillCount)
{
var message = string.Format(
- configuration.Message,
- questState.ActiveQuest.Name,
- monster.Definition.Designation,
+ configuration.Message.GetTranslation(player.Culture),
+ questState.ActiveQuest.Name.GetTranslation(player.Culture),
+ monster.Definition.Designation.GetTranslation(player.Culture),
requirementState.KillCount,
killRequirement.MinimumNumber);
- await player.ShowMessageAsync(message).ConfigureAwait(false);
+ await player.ShowBlueMessageAsync(message).ConfigureAwait(false);
}
}
}
diff --git a/src/GameLogic/PlugIns/QuestMonsterKillCountPlugInConfiguration.cs b/src/GameLogic/PlugIns/QuestMonsterKillCountPlugInConfiguration.cs
index 783c837c3..99a4858ec 100644
--- a/src/GameLogic/PlugIns/QuestMonsterKillCountPlugInConfiguration.cs
+++ b/src/GameLogic/PlugIns/QuestMonsterKillCountPlugInConfiguration.cs
@@ -4,6 +4,8 @@
namespace MUnique.OpenMU.GameLogic.PlugIns;
+using MUnique.OpenMU.Interfaces;
+
///
/// Configuration for the .
///
@@ -12,5 +14,6 @@ public class QuestMonsterKillCountPlugInConfiguration
///
/// Gets or sets the save interval.
///
- public string Message { get; set; } = "[{0}] Defeat {1} - {2}/{3}";
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.QuestMonsterKillCountPlugInConfiguration_Message_Name))]
+ public LocalizedString Message { get; set; } = "[{0}] Defeat {1} - {2}/{3}";
}
\ No newline at end of file
diff --git a/src/GameLogic/PlugIns/SelfDefensePlugIn.cs b/src/GameLogic/PlugIns/SelfDefensePlugIn.cs
index abd0fb943..bb8d8e69c 100644
--- a/src/GameLogic/PlugIns/SelfDefensePlugIn.cs
+++ b/src/GameLogic/PlugIns/SelfDefensePlugIn.cs
@@ -7,14 +7,13 @@ namespace MUnique.OpenMU.GameLogic.PlugIns;
using System;
using System.Runtime.InteropServices;
using MUnique.OpenMU.GameLogic.NPC;
-using MUnique.OpenMU.GameLogic.Views;
-using MUnique.OpenMU.Interfaces;
using MUnique.OpenMU.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(PlugInResources.SelfDefensePlugIn_Name), Description = nameof(PlugInResources.SelfDefensePlugIn_Description), ResourceType = typeof(PlugInResources))]
[Guid("BA4753EA-4D2B-488C-BB6B-4A127E28630A")]
public class SelfDefensePlugIn : IPeriodicTaskPlugIn, IAttackableGotHitPlugIn, ISupportCustomConfiguration, ISupportDefaultCustomConfiguration
{
@@ -104,15 +103,13 @@ private static SelfDefensePlugInConfiguration CreateDefaultConfiguration()
private async ValueTask BeginSelfDefenseAsync(Player attacker, Player defender)
{
- var message = $"Self defense is initiated by {attacker.Name}'s attack to {defender.Name}!";
- await defender.InvokeViewPlugInAsync(p => p.ShowMessageAsync(message, MessageType.BlueNormal)).ConfigureAwait(false);
- await attacker.InvokeViewPlugInAsync(p => p.ShowMessageAsync(message, MessageType.BlueNormal)).ConfigureAwait(false);
+ await defender.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.SelfDefenseInitiatedFormat), attacker.Name, defender.Name).ConfigureAwait(false);
+ await attacker.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.SelfDefenseInitiatedFormat), attacker.Name, defender.Name).ConfigureAwait(false);
}
private async ValueTask EndSelfDefenseAsync(Player attacker, Player defender)
{
- var message = $"Self defense of {defender.Name} against {attacker.Name} diminishes.";
- await defender.InvokeViewPlugInAsync(p => p.ShowMessageAsync(message, MessageType.BlueNormal)).ConfigureAwait(false);
- await attacker.InvokeViewPlugInAsync(p => p.ShowMessageAsync(message, MessageType.BlueNormal)).ConfigureAwait(false);
+ await defender.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.SelfDefenseDiminishesFormat), defender.Name, attacker.Name).ConfigureAwait(false);
+ await attacker.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.SelfDefenseDiminishesFormat), defender.Name, attacker.Name).ConfigureAwait(false);
}
}
\ No newline at end of file
diff --git a/src/GameLogic/PlugIns/SelfDefensePlugInConfiguration.cs b/src/GameLogic/PlugIns/SelfDefensePlugInConfiguration.cs
index e9db8d77d..ffee84390 100644
--- a/src/GameLogic/PlugIns/SelfDefensePlugInConfiguration.cs
+++ b/src/GameLogic/PlugIns/SelfDefensePlugInConfiguration.cs
@@ -12,5 +12,6 @@ public class SelfDefensePlugInConfiguration
///
/// Gets or sets the self defense timeout.
///
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.SelfDefensePlugInConfiguration_SelfDefenseTimeOut_Name))]
public TimeSpan SelfDefenseTimeOut { get; set; } = TimeSpan.FromMinutes(1);
}
\ No newline at end of file
diff --git a/src/GameLogic/PlugIns/ShowMessageToAllWhenPlayerEnteredWorldPlugIn.cs b/src/GameLogic/PlugIns/ShowMessageToAllWhenPlayerEnteredWorldPlugIn.cs
index c0fb8dae9..015899075 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(PlugInResources.ShowMessageToAllWhenPlayerEnteredWorldPlugIn_Name), Description = nameof(PlugInResources.ShowMessageToAllWhenPlayerEnteredWorldPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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.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/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..cdc265894 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(PlugInResources.UnlockDarkLordAtLevel250_Name), Description = nameof(PlugInResources.UnlockDarkLordAtLevel250_Description), ResourceType = typeof(PlugInResources))]
[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..4df3252ab 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(PlugInResources.UnlockMagicGladiatorAtLevel220_Name), Description = nameof(PlugInResources.UnlockMagicGladiatorAtLevel220_Description), ResourceType = typeof(PlugInResources))]
[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..bc64b1235 100644
--- a/src/GameLogic/PlugIns/UnlockCharacterClass/UnlockRageFighterAtLevel150.cs
+++ b/src/GameLogic/PlugIns/UnlockCharacterClass/UnlockRageFighterAtLevel150.cs
@@ -1,4 +1,4 @@
-//
+//
// Licensed under the MIT License. See LICENSE file in the project root for full license information.
//
@@ -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(PlugInResources.UnlockRageFighterAtLevel150_Name), Description = nameof(PlugInResources.UnlockRageFighterAtLevel150_Description), ResourceType = typeof(PlugInResources))]
[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..d920a5ee9 100644
--- a/src/GameLogic/PlugIns/UnlockCharacterClass/UnlockSummonerAtLevel1.cs
+++ b/src/GameLogic/PlugIns/UnlockCharacterClass/UnlockSummonerAtLevel1.cs
@@ -1,4 +1,4 @@
-//
+//
// Licensed under the MIT License. See LICENSE file in the project root for full license information.
//
@@ -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(PlugInResources.UnlockSummonerAtLevel1_Name), Description = nameof(PlugInResources.UnlockSummonerAtLevel1_Description), ResourceType = typeof(PlugInResources))]
[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..ca09af034 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(PlugInResources.UpdateIsInSafezoneAfterPlayerMoved_Name), Description = nameof(PlugInResources.UpdateIsInSafezoneAfterPlayerMoved_Description), ResourceType = typeof(PlugInResources))]
[Guid("396617CA-954A-45A1-A6DB-1AA65309A03D")]
public class UpdateIsInSafezoneAfterPlayerMoved : IAttackableMovedPlugIn
{
diff --git a/src/GameLogic/PlugIns/WanderingMerchants/WanderingMerchantsConfiguration.cs b/src/GameLogic/PlugIns/WanderingMerchants/WanderingMerchantsConfiguration.cs
index 1c1367742..095530c07 100644
--- a/src/GameLogic/PlugIns/WanderingMerchants/WanderingMerchantsConfiguration.cs
+++ b/src/GameLogic/PlugIns/WanderingMerchants/WanderingMerchantsConfiguration.cs
@@ -14,10 +14,12 @@ public class WanderingMerchantsConfiguration : PeriodicTaskConfiguration
///
/// Gets or sets the minimum duration of the spawn.
///
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.WanderingMerchantsConfiguration_MinimumSpawnDuration_Name))]
public TimeSpan MinimumSpawnDuration { get; set; } = TimeSpan.FromMinutes(60);
///
/// Gets or sets the maximum duration of the spawn.
///
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.WanderingMerchantsConfiguration_MaximumSpawnDuration_Name))]
public TimeSpan MaximumSpawnDuration { get; set; } = TimeSpan.FromMinutes(180);
}
\ No newline at end of file
diff --git a/src/GameLogic/PlugIns/WanderingMerchants/WanderingMerchantsPlugIn.cs b/src/GameLogic/PlugIns/WanderingMerchants/WanderingMerchantsPlugIn.cs
index 27feae3c0..0b3052dc7 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(PlugInResources.WanderingMerchantsPlugIn_Name), Description = nameof(PlugInResources.WanderingMerchantsPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..e02896170 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(PlugInResources.WeatherUpdatePlugIn_Name), Description = nameof(PlugInResources.WeatherUpdatePlugIn_Description), ResourceType = typeof(PlugInResources))]
[Guid("3E702A15-653A-48EF-899C-4CDB2239A90C")]
public class WeatherUpdatePlugIn : IPeriodicTaskPlugIn, IObjectAddedToMapPlugIn
{
diff --git a/src/GameLogic/Properties/PlayerMessage.Designer.cs b/src/GameLogic/Properties/PlayerMessage.Designer.cs
new file mode 100644
index 000000000..9149549f4
--- /dev/null
+++ b/src/GameLogic/Properties/PlayerMessage.Designer.cs
@@ -0,0 +1,1584 @@
+//------------------------------------------------------------------------------
+//
+// 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", "18.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ public 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)]
+ 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);
+ 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)]
+ public static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+
+ ///
+ /// 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..
+ ///
+ 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..
+ ///
+ 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}..
+ ///
+ public static string ArgumentInvalidType {
+ get {
+ return ResourceManager.GetString("ArgumentInvalidType", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Attribute not available..
+ ///
+ public static string AttributeNotAvailable {
+ get {
+ return ResourceManager.GetString("AttributeNotAvailable", 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 {0} has acquired the {1}.
+ ///
+ public static string BloodCastleArchangelAquiredMessageFormat {
+ get {
+ return ResourceManager.GetString("BloodCastleArchangelAquiredMessageFormat", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to {0} has destroyed the Crystal Statue!.
+ ///
+ public static string BloodCastleCrystalStatusDestroyed {
+ get {
+ return ResourceManager.GetString("BloodCastleCrystalStatusDestroyed", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Can't delete a guild member. Remove the character from guild first..
+ ///
+ public static string CantDeleteGuildMember {
+ get {
+ return ResourceManager.GetString("CantDeleteGuildMember", 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 You can't equip this item during the event..
+ ///
+ public static string CantEquipItemDuringEvent {
+ get {
+ return ResourceManager.GetString("CantEquipItemDuringEvent", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Cannot do reset with any windows opened..
+ ///
+ public static string CantResetWithOpenedWindows {
+ get {
+ return ResourceManager.GetString("CantResetWithOpenedWindows", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The character has no stat attribute '{0}'..
+ ///
+ public static string CharacterHasNoStatAttribute {
+ get {
+ return ResourceManager.GetString("CharacterHasNoStatAttribute", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to A character with the same name already exists..
+ ///
+ public static string CharacterNameAlreadyExists {
+ get {
+ return ResourceManager.GetString("CharacterNameAlreadyExists", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Character name is required..
+ ///
+ public static string CharacterNameIsRequired {
+ get {
+ return ResourceManager.GetString("CharacterNameIsRequired", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Character name is required..
+ ///
+ public static string CharacterNameRequired {
+ get {
+ return ResourceManager.GetString("CharacterNameRequired", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Character '{0}' not found..
+ ///
+ public static string CharacterNotFound {
+ get {
+ return ResourceManager.GetString("CharacterNotFound", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to A character with the same name already exists..
+ ///
+ public static string CharacterWithNameAlreadyExists {
+ get {
+ return ResourceManager.GetString("CharacterWithNameAlreadyExists", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Chat Ban: {0} minute(s) remaining..
+ ///
+ public static string ChatBanMinutesRemaining {
+ get {
+ return ResourceManager.GetString("ChatBanMinutesRemaining", resourceCulture);
+ }
+ }
+
+ ///
+ /// 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 Chat Ban: {0} second(s) remaining..
+ ///
+ public static string ChatBanSecondsRemaining {
+ get {
+ return ResourceManager.GetString("ChatBanSecondsRemaining", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The command '{0}' does not exist..
+ ///
+ public static string CommandDoesNotExist {
+ get {
+ return ResourceManager.GetString("CommandDoesNotExist", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The required argument named {0} was not used..
+ ///
+ public static string CommandExtensions_RequiredArgumentMissing {
+ get {
+ return ResourceManager.GetString("CommandExtensions_RequiredArgumentMissing", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The argument {0} was given a invalid type, it expects the value to be of the type {1}..
+ ///
+ public static string CommandExtensionsArgumentInvalidType {
+ get {
+ return ResourceManager.GetString("CommandExtensionsArgumentInvalidType", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The command needs {0} arguments and was given {1}..
+ ///
+ public static string CommandExtensionsInvalidArgumentCount {
+ get {
+ return ResourceManager.GetString("CommandExtensionsInvalidArgumentCount", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The command needs {0} arguments and was given {1}..
+ ///
+ 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 You got disconnected by an administrator..
+ ///
+ public static string DisconnectedByAdmin {
+ get {
+ return ResourceManager.GetString("DisconnectedByAdmin", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to You got disconnected by a game master..
+ ///
+ public static string DisconnectedByGameMaster {
+ get {
+ return ResourceManager.GetString("DisconnectedByGameMaster", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The battle begins in {0} seconds.
+ ///
+ public static string DuelBattleBeginsInSecondsFormat {
+ get {
+ return ResourceManager.GetString("DuelBattleBeginsInSecondsFormat", 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 Duration must be longer than 0 minutes..
+ ///
+ public static string DurationMustBeLongerThan0 {
+ get {
+ return ResourceManager.GetString("DurationMustBeLongerThan0", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to You're strong enough on your own..
+ ///
+ public static string ElfSoldierStrongEnoughMessage {
+ get {
+ return ResourceManager.GetString("ElfSoldierStrongEnoughMessage", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Oops, some error happened during sending the Letter..
+ ///
+ public static string ErrorDuringSendingLetter {
+ get {
+ return ResourceManager.GetString("ErrorDuringSendingLetter", 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..
+ ///
+ public static string GuildNotFound {
+ get {
+ return ResourceManager.GetString("GuildNotFound", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Happy Hour event has been started!.
+ ///
+ public static string HappyHourEventHasBeenStarted {
+ get {
+ return ResourceManager.GetString("HappyHourEventHasBeenStarted", 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 Inventory is full.
+ ///
+ public static string InventoryFull {
+ get {
+ return ResourceManager.GetString("InventoryFull", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Inventory got not enough space..
+ ///
+ public static string InventoryNotEnoughSpace {
+ get {
+ return ResourceManager.GetString("InventoryNotEnoughSpace", 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 This item is bound to the inventory of this character..
+ ///
+ public static string ItemIsBoundToInventoryOfCharacter {
+ get {
+ return ResourceManager.GetString("ItemIsBoundToInventoryOfCharacter", 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 Item Unknown.
+ ///
+ public static string ItemUnknown {
+ get {
+ return ResourceManager.GetString("ItemUnknown", 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 Letter invalid..
+ ///
+ public static string LetterInvalid {
+ get {
+ return ResourceManager.GetString("LetterInvalid", 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 Your level is too low to enter this map..
+ ///
+ public static string LevelTooLowToEnterMap {
+ get {
+ return ResourceManager.GetString("LevelTooLowToEnterMap", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Congratulations, you are Level {0} now..
+ ///
+ public static string LevelUpCongrats {
+ get {
+ return ResourceManager.GetString("LevelUpCongrats", 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..
+ ///
+ public static string LoginNameRequired {
+ get {
+ return ResourceManager.GetString("LoginNameRequired", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Map {0} not found..
+ ///
+ 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 Congratulations, you are Master Level {0} now..
+ ///
+ public static string MasterLevelUpCongrats {
+ get {
+ return ResourceManager.GetString("MasterLevelUpCongrats", 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 Maximum of {0} {1} has been reached..
+ ///
+ public static string MaximumAttributeValueReachedFormat {
+ get {
+ return ResourceManager.GetString("MaximumAttributeValueReachedFormat", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Maximum resets of {0} reached..
+ ///
+ public static string MaximumResetsReached {
+ get {
+ return ResourceManager.GetString("MaximumResetsReached", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Can't start with less than {0} players..
+ ///
+ public static string MiniGameCantStartWithLessThanPlayers {
+ get {
+ return ResourceManager.GetString("MiniGameCantStartWithLessThanPlayers", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to {0} starts in {1} minutes..
+ ///
+ public static string MiniGameStartsInMinutesFormat {
+ get {
+ return ResourceManager.GetString("MiniGameStartsInMinutesFormat", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Missing requirement to enter the map: {0}.
+ ///
+ public static string MissingMapRequirement {
+ get {
+ return ResourceManager.GetString("MissingMapRequirement", 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 can't handle status: {0}.
+ ///
+ public static string MuHelperCantHandleStatus {
+ get {
+ return ResourceManager.GetString("MuHelperCantHandleStatus", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to MU Helper is disabled.
+ ///
+ public static string MuHelperIsDisabled {
+ get {
+ return ResourceManager.GetString("MuHelperIsDisabled", 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..
+ ///
+ 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 No item there to repair..
+ ///
+ public static string NoItemToRepair {
+ get {
+ return ResourceManager.GetString("NoItemToRepair", 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 Not enough level up points available..
+ ///
+ public static string NotEnoughLevelUpPointsAvailable {
+ get {
+ return ResourceManager.GetString("NotEnoughLevelUpPointsAvailable", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to You don't have enough Money.
+ ///
+ public static string NotEnoughMoney {
+ get {
+ return ResourceManager.GetString("NotEnoughMoney", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Not enough zen to enter {0}..
+ ///
+ public static string NotEnoughMoneyToEnter {
+ get {
+ return ResourceManager.GetString("NotEnoughMoneyToEnter", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Not enough money to proceed.
+ ///
+ public static string NotEnoughMoneyToProceed {
+ get {
+ return ResourceManager.GetString("NotEnoughMoneyToProceed", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to You don't have enough money to repair..
+ ///
+ public static string NotEnoughMoneyToRepair {
+ get {
+ return ResourceManager.GetString("NotEnoughMoneyToRepair", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Not enough Zen to send a letter..
+ ///
+ public static string NotEnoughMoneyToSendLetter {
+ get {
+ return ResourceManager.GetString("NotEnoughMoneyToSendLetter", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Not entered the game..
+ ///
+ public static string NotEnteredTheGame {
+ get {
+ return ResourceManager.GetString("NotEnteredTheGame", 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 Open Store: Player not found..
+ ///
+ public static string OpenStorePlayerNotFound {
+ get {
+ return ResourceManager.GetString("OpenStorePlayerNotFound", 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 A party is not possible during this event..
+ ///
+ public static string PartyNotPossibleDuringEvent {
+ get {
+ return ResourceManager.GetString("PartyNotPossibleDuringEvent", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Limit reached for '{0}'..
+ ///
+ public static string PickupLimitReached {
+ get {
+ return ResourceManager.GetString("PickupLimitReached", 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..
+ ///
+ public static string PlayerEnteredGameMessage {
+ get {
+ return ResourceManager.GetString("PlayerEnteredGameMessage", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to {0} is already in a party..
+ ///
+ public static string PlayerIsAlreadyInParty {
+ get {
+ return ResourceManager.GetString("PlayerIsAlreadyInParty", 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 Player names don't match. {0} <> {1}.
+ ///
+ public static string PlayerNamesDontMatch {
+ get {
+ return ResourceManager.GetString("PlayerNamesDontMatch", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Player's Store not open..
+ ///
+ public static string PlayerStoreNotOpen {
+ get {
+ return ResourceManager.GetString("PlayerStoreNotOpen", 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 Requested {0} for Party..
+ ///
+ public static string RequestedPlayerForParty {
+ get {
+ return ResourceManager.GetString("RequestedPlayerForParty", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The required argument named {0} was not used..
+ ///
+ public static string RequiredArgumentNotUsed {
+ get {
+ return ResourceManager.GetString("RequiredArgumentNotUsed", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Required level for reset is {0}..
+ ///
+ public static string RequiredLevelForReset {
+ get {
+ return ResourceManager.GetString("RequiredLevelForReset", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Reset is not configured..
+ ///
+ public static string ResetNotConfigured {
+ get {
+ return ResourceManager.GetString("ResetNotConfigured", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Reset is not enabled..
+ ///
+ public static string ResetNotEnabled {
+ get {
+ return ResourceManager.GetString("ResetNotEnabled", 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 Selected Item is not a stacked Jewel..
+ ///
+ public static string SelectedItemIsNotStackedJewel {
+ get {
+ return ResourceManager.GetString("SelectedItemIsNotStackedJewel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Self defense of {0} against {1} diminishes..
+ ///
+ public static string SelfDefenseDiminishesFormat {
+ get {
+ return ResourceManager.GetString("SelfDefenseDiminishesFormat", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Self defense is initiated by {0}'s attack to {1}!.
+ ///
+ public static string SelfDefenseInitiatedFormat {
+ get {
+ return ResourceManager.GetString("SelfDefenseInitiatedFormat", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The inventory of the seller is full..
+ ///
+ public static string SellerInventoryFull {
+ get {
+ return ResourceManager.GetString("SellerInventoryFull", 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 Stacked Jewel not found..
+ ///
+ public static string StackedJewelNotFound {
+ get {
+ return ResourceManager.GetString("StackedJewelNotFound", 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 Talking to this NPC ({0}, {1}) is not implemented yet..
+ ///
+ public static string TalkingNotImplementedFormat {
+ get {
+ return ResourceManager.GetString("TalkingNotImplementedFormat", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Your account has been temporarily banned by a game master..
+ ///
+ public static string TemporaryBanByGameMaster {
+ get {
+ return ResourceManager.GetString("TemporaryBanByGameMaster", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The vault is locked..
+ ///
+ public static string TheVaultIsLocked {
+ get {
+ return ResourceManager.GetString("TheVaultIsLocked", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Trade partner not found..
+ ///
+ public static string TradePartnerNotFound {
+ get {
+ return ResourceManager.GetString("TradePartnerNotFound", 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 Uncheck trade accept button first.
+ ///
+ public static string UncheckTradeAcceptButtonFirst {
+ get {
+ return ResourceManager.GetString("UncheckTradeAcceptButtonFirst", 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 An unexpected error occured during closing the trade..
+ ///
+ public static string UnexpectedErrorDuringClosingTrade {
+ get {
+ return ResourceManager.GetString("UnexpectedErrorDuringClosingTrade", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Unknown attribute: '{0}'..
+ ///
+ public static string UnknownAttribute {
+ get {
+ return ResourceManager.GetString("UnknownAttribute", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Unknown warp index {0}.
+ ///
+ public static string UnknownWarpIndex {
+ get {
+ return ResourceManager.GetString("UnknownWarpIndex", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Using this item is not implemented..
+ ///
+ public static string UsingThisItemNotImplemented {
+ get {
+ return ResourceManager.GetString("UsingThisItemNotImplemented", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Wrong Security Code..
+ ///
+ public static string WrongSecurityCode {
+ get {
+ return ResourceManager.GetString("WrongSecurityCode", 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 You are not the Party Master..
+ ///
+ public static string YouAreNotPartyMaster {
+ get {
+ return ResourceManager.GetString("YouAreNotPartyMaster", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to You can't wear this item..
+ ///
+ public static string YouCantWearThisItem {
+ get {
+ return ResourceManager.GetString("YouCantWearThisItem", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to You got killed by {0}.
+ ///
+ public static string YouGotKilledBy {
+ get {
+ return ResourceManager.GetString("YouGotKilledBy", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to You are lacking of Jewels..
+ ///
+ public static string YouLackOfJewels {
+ get {
+ return ResourceManager.GetString("YouLackOfJewels", 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
new file mode 100644
index 000000000..304ee6743
--- /dev/null
+++ b/src/GameLogic/Properties/PlayerMessage.resx
@@ -0,0 +1,627 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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.
+
+
+ {0} has acquired the {1}
+
+
+ Limit reached for '{0}'.
+
+
+ Not enough zen to enter {0}.
+
+
+ {0} starts in {1} minutes.
+
+
+ Can't start with less than {0} players.
+
+
+ Talking to this NPC ({0}, {1}) is not implemented yet.
+
+
+ {0} has destroyed the Crystal Statue!
+
+
+ A character with the same name already exists.
+
+
+ Can't delete a guild member. Remove the character from guild first.
+
+
+ Not enough level up points available.
+
+
+ Maximum of {0} {1} has been reached.
+
+
+ Attribute not available.
+
+
+ Chat Ban: {0} minute(s) remaining.
+
+
+ Chat Ban: {0} second(s) remaining.
+
+
+ Wrong Security Code.
+
+
+ Using this item is not implemented.
+
+
+ Item Unknown
+
+
+ Inventory is full
+
+
+ You don't have enough Money
+
+
+ No item there to repair.
+
+
+ You don't have enough money to repair.
+
+
+ You are lacking of Jewels.
+
+
+ Stacked Jewel not found.
+
+
+ Selected Item is not a stacked Jewel.
+
+
+ Inventory got not enough space.
+
+
+ The vault is locked.
+
+
+ You can't equip this item during the event.
+
+
+ You can't wear this item.
+
+
+ This item is bound to the inventory of this character.
+
+
+ Not enough Zen to send a letter.
+
+
+ Oops, some error happened during sending the Letter.
+
+
+ MU Helper is disabled
+
+
+ MU Helper can't handle status: {0}
+
+
+ A party is not possible during this event.
+
+
+ {0} is already in a party.
+
+
+ You are not the Party Master.
+
+
+ Requested {0} for Party.
+
+
+ The inventory of the seller is full.
+
+
+ Player's Store not open.
+
+
+ You're strong enough on your own.
+
+
+ Not enough money to proceed
+
+
+ Missing requirement to enter the map: {0}
+
+
+ An unexpected error occured during closing the trade.
+
+
+ Uncheck trade accept button first
+
+
+ Your level is too low to enter this map.
+
+
+ Happy Hour event has been started!
+
+
+ Self defense is initiated by {0}'s attack to {1}!
+
+
+ Self defense of {0} against {1} diminishes.
+
+
+ Reset is not enabled.
+
+
+ Cannot do reset with any windows opened.
+
+
+ Not entered the game.
+
+
+ Reset is not configured.
+
+
+ Required level for reset is {0}.
+
+
+ Maximum resets of {0} reached.
+
+
+ The battle begins in {0} seconds
+
+
+ Letter invalid.
+
+
+ Open Store: Player not found.
+
+
+ Player names don't match. {0} <> {1}
+
+
+ Trade partner not found.
+
+
+ Unknown warp index {0}
+
+
+ Congratulations, you are Level {0} now.
+
+
+ Congratulations, you are Master Level {0} now.
+
+
+ You got killed by {0}
+
+
+ You got disconnected by a game master.
+
+
+ You got disconnected by an administrator.
+
+
+ Your account has been temporarily banned by a game master.
+
+
+ The required argument named {0} was not used.
+
+
+ The argument {0} was given a invalid type, it expects the value to be of the type {1}.
+
+
+ The command needs {0} arguments and was given {1}.
+
+
+ Character name is required.
+
+
+ Duration must be longer than 0 minutes.
+
+
+ Unknown attribute: '{0}'.
+
+
+ The character has no stat attribute '{0}'.
+
+
\ No newline at end of file
diff --git a/src/GameLogic/Properties/PlugInResources.Designer.cs b/src/GameLogic/Properties/PlugInResources.Designer.cs
new file mode 100644
index 000000000..4ae51954c
--- /dev/null
+++ b/src/GameLogic/Properties/PlugInResources.Designer.cs
@@ -0,0 +1,3098 @@
+//------------------------------------------------------------------------------
+//
+// 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", "18.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ public class PlugInResources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal PlugInResources() {
+ }
+
+ ///
+ /// Returns the cached ResourceManager instance used by this class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ 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.PlugInResources", typeof(PlugInResources).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)]
+ public static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Adds the specified amount of agility points to the character..
+ ///
+ public static string AddAgilityStatChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("AddAgilityStatChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Add agility chat command.
+ ///
+ public static string AddAgilityStatChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("AddAgilityStatChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Adds the specified amount of command points to the character..
+ ///
+ public static string AddCommandStatChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("AddCommandStatChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Add command chat command.
+ ///
+ public static string AddCommandStatChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("AddCommandStatChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Adds the specified amount of energy points to the character..
+ ///
+ public static string AddEnergyStatChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("AddEnergyStatChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Add energy chat command.
+ ///
+ public static string AddEnergyStatChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("AddEnergyStatChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to 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..
+ ///
+ public static string AddStatChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("AddStatChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Add Stat chat command.
+ ///
+ public static string AddStatChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("AddStatChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Adds the specified amount of strength points to the character..
+ ///
+ public static string AddStrengthStatChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("AddStrengthStatChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Add strength chat command.
+ ///
+ public static string AddStrengthStatChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("AddStrengthStatChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Adds the specified amount of vitality points to the character..
+ ///
+ public static string AddVitalityStatChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("AddVitalityStatChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Add vitality chat command.
+ ///
+ public static string AddVitalityStatChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("AddVitalityStatChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Plugin which handles the alcohol consumption..
+ ///
+ public static string AlcoholConsumeHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("AlcoholConsumeHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Alcohol Consume Handler.
+ ///
+ public static string AlcoholConsumeHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("AlcoholConsumeHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Plugin which handles the antidote consumption..
+ ///
+ public static string AntidoteConsumeHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("AntidoteConsumeHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Antidote Consume Handler.
+ ///
+ public static string AntidoteConsumeHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("AntidoteConsumeHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Plugin which handles the apple consumption..
+ ///
+ public static string AppleConsumeHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("AppleConsumeHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Apple Consume Handler.
+ ///
+ public static string AppleConsumeHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("AppleConsumeHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the chat command '/banacc <acc>'. Bans an account from the game..
+ ///
+ public static string BanAccChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("BanAccChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Ban Account command.
+ ///
+ public static string BanAccChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("BanAccChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the chat command '/banchar <char>'. Bans the account of a character from the game..
+ ///
+ public static string BanCharChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("BanCharChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Ban Character command.
+ ///
+ public static string BanCharChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("BanCharChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to [{mapName}] Invasion!.
+ ///
+ public static string BaseInvasionPlugIn_DefaultStartMessage {
+ get {
+ return ResourceManager.GetString("BaseInvasionPlugIn_DefaultStartMessage", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Plugin which handles the jewel of bless consumption..
+ ///
+ public static string BlessJewelConsumeHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("BlessJewelConsumeHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Bless Jewel Consume Handler.
+ ///
+ public static string BlessJewelConsumeHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("BlessJewelConsumeHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the chain lightning skill of the summoner class. Additionally to the attacked target, it will hit up to two additional targets..
+ ///
+ public static string ChainLightningSkillPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ChainLightningSkillPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Chain Lightning Skill.
+ ///
+ public static string ChainLightningSkillPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ChainLightningSkillPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the chat command '/language <isoCode>'. Changes the language of the account..
+ ///
+ public static string ChangeLanguageChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ChangeLanguageChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Change language command.
+ ///
+ public static string ChangeLanguageChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ChangeLanguageChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the chat command '/charinfo <char>'. Returns information about the character back to the requester..
+ ///
+ public static string CharInfoChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("CharInfoChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Char Info command.
+ ///
+ public static string CharInfoChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("CharInfoChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the chat command '/chatban <characterName> <durationMinutes>'. Bans the account of a character from chatting for the specified minutes..
+ ///
+ public static string ChatBanCharChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ChatBanCharChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Chat Ban Character command.
+ ///
+ public static string ChatBanCharChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ChatBanCharChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the chat command '/chatunban <characterName>'. Unbans the account of a character from chatting..
+ ///
+ public static string ChatUnbanCharChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ChatUnbanCharChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Chat Ban Character command.
+ ///
+ public static string ChatUnbanCharChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ChatUnbanCharChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Clears inventory. Usage: /clearinv (optional:character).
+ ///
+ public static string ClearInventoryChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ClearInventoryChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Clear Inventory chat command.
+ ///
+ public static string ClearInventoryChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ClearInventoryChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The message to show when the player needs to run the command again within 10 seconds to confirm the inventory clearing..
+ ///
+ public static string ClearInventoryConfiguration_ConfirmationMessage_Description {
+ get {
+ return ResourceManager.GetString("ClearInventoryConfiguration_ConfirmationMessage_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Confirmation Message.
+ ///
+ public static string ClearInventoryConfiguration_ConfirmationMessage_Name {
+ get {
+ return ResourceManager.GetString("ClearInventoryConfiguration_ConfirmationMessage_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The message to show when the inventory is cleared..
+ ///
+ public static string ClearInventoryConfiguration_InventoryClearedMessage_Description {
+ get {
+ return ResourceManager.GetString("ClearInventoryConfiguration_InventoryClearedMessage_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Inventory Cleared Message.
+ ///
+ public static string ClearInventoryConfiguration_InventoryClearedMessage_Name {
+ get {
+ return ResourceManager.GetString("ClearInventoryConfiguration_InventoryClearedMessage_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The money cost to clear inventory (except GMs). Default: 0..
+ ///
+ public static string ClearInventoryConfiguration_MoneyCost_Description {
+ get {
+ return ResourceManager.GetString("ClearInventoryConfiguration_MoneyCost_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Money Cost.
+ ///
+ public static string ClearInventoryConfiguration_MoneyCost_Name {
+ get {
+ return ResourceManager.GetString("ClearInventoryConfiguration_MoneyCost_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The message to show when the player does not have enough money to run the command..
+ ///
+ public static string ClearInventoryConfiguration_NotEnoughMoneyMessage_Description {
+ get {
+ return ResourceManager.GetString("ClearInventoryConfiguration_NotEnoughMoneyMessage_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Not Enough Money Message.
+ ///
+ public static string ClearInventoryConfiguration_NotEnoughMoneyMessage_Name {
+ get {
+ return ResourceManager.GetString("ClearInventoryConfiguration_NotEnoughMoneyMessage_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to If true, the player will need to run the command again within 10 seconds to confirm the inventory clearing (excluding GM)..
+ ///
+ public static string ClearInventoryConfiguration_RequireConfirmation_Description {
+ get {
+ return ResourceManager.GetString("ClearInventoryConfiguration_RequireConfirmation_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Require Confirmation.
+ ///
+ public static string ClearInventoryConfiguration_RequireConfirmation_Name {
+ get {
+ return ResourceManager.GetString("ClearInventoryConfiguration_RequireConfirmation_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the chat command '/createmonster <number> <intelligent>'. Creates a monster which can be remote controlled by the GM..
+ ///
+ public static string CreateMonsterChatCommand_Description {
+ get {
+ return ResourceManager.GetString("CreateMonsterChatCommand_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Create monster chat command.
+ ///
+ public static string CreateMonsterChatCommand_Name {
+ get {
+ return ResourceManager.GetString("CreateMonsterChatCommand_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the chat command '/disconnect <char>'. Disconnects a player from the game server..
+ ///
+ public static string DisconnectChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("DisconnectChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Disconnect chat command.
+ ///
+ public static string DisconnectChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("DisconnectChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the drain life skill of the summoner class. Additionally to the attacked target, it regains life for damage dealt..
+ ///
+ public static string DrainLifeSkillPlugIn_Description {
+ get {
+ return ResourceManager.GetString("DrainLifeSkillPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Drain Life Skill.
+ ///
+ public static string DrainLifeSkillPlugIn_Name {
+ get {
+ return ResourceManager.GetString("DrainLifeSkillPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the earth shake skill of the dark horse. Pushes the targets away from the attacker..
+ ///
+ public static string EarthShakeSkillPlugIn_Description {
+ get {
+ return ResourceManager.GetString("EarthShakeSkillPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Earth shake skill.
+ ///
+ public static string EarthShakeSkillPlugIn_Name {
+ get {
+ return ResourceManager.GetString("EarthShakeSkillPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Ends the duel when one of the duelists leaves the duel map. If a spectator leaves the duel map, it's removed from the spectator list, too..
+ ///
+ public static string EndDuelWhenLeavingDuelMapPlugIn_Description {
+ get {
+ return ResourceManager.GetString("EndDuelWhenLeavingDuelMapPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to End Duel When Leaving Duel Map.
+ ///
+ public static string EndDuelWhenLeavingDuelMapPlugIn_Name {
+ get {
+ return ResourceManager.GetString("EndDuelWhenLeavingDuelMapPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the force skill of the dark lord..
+ ///
+ public static string ForceSkillAction_Description {
+ get {
+ return ResourceManager.GetString("ForceSkillAction_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to ForceSkillAction.
+ ///
+ public static string ForceSkillAction_Name {
+ get {
+ return ResourceManager.GetString("ForceSkillAction_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the force wave strengthener skill of the dark lord..
+ ///
+ public static string ForceWaveStrengSkillAction_Description {
+ get {
+ return ResourceManager.GetString("ForceWaveStrengSkillAction_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to ForceWaveStrengSkillAction.
+ ///
+ public static string ForceWaveStrengSkillAction_Name {
+ get {
+ return ResourceManager.GetString("ForceWaveStrengSkillAction_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Plugin which handles the fruit consumption..
+ ///
+ public static string FruitConsumeHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("FruitConsumeHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Fruit Consume Handler.
+ ///
+ public static string FruitConsumeHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("FruitConsumeHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handle Gatekeeper NPC Request.
+ ///
+ public static string GatekeeperNpcPlugin_Description {
+ get {
+ return ResourceManager.GetString("GatekeeperNpcPlugin_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to GatekeeperNpcPlugin.
+ ///
+ public static string GatekeeperNpcPlugin_Name {
+ get {
+ return ResourceManager.GetString("GatekeeperNpcPlugin_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Gets level of a player. Usage: /getlevel (optional:character).
+ ///
+ public static string GetLevelChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("GetLevelChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Get level command.
+ ///
+ public static string GetLevelChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("GetLevelChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Gets level up points of a player. Usage: /getleveluppoints (optional:character).
+ ///
+ public static string GetLevelUpPointsChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("GetLevelUpPointsChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Get level up points command.
+ ///
+ public static string GetLevelUpPointsChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("GetLevelUpPointsChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Gets master level of a player. Usage: /getmasterlevel (optional:character).
+ ///
+ public static string GetMasterLevelChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("GetMasterLevelChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Get master level command.
+ ///
+ public static string GetMasterLevelChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("GetMasterLevelChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Gets master level up points of a player. Usage: /getmasterleveluppoints (optional:character).
+ ///
+ public static string GetMasterLevelUpPointsChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("GetMasterLevelUpPointsChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Get master level up points command.
+ ///
+ public static string GetMasterLevelUpPointsChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("GetMasterLevelUpPointsChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Gets money of a player. Usage: /getmoney (optional:character).
+ ///
+ public static string GetMoneyChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("GetMoneyChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Get money command.
+ ///
+ public static string GetMoneyChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("GetMoneyChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Gets resets of a player. Usage: /getresets (optional:character).
+ ///
+ public static string GetResetsChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("GetResetsChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Get resets command.
+ ///
+ public static string GetResetsChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("GetResetsChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Get stat points. Usage: /get (ene|agi|vit|str|cmd) (optional:character).
+ ///
+ public static string GetStatChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("GetStatChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Get Stat chat command.
+ ///
+ public static string GetStatChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("GetStatChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handle Golden Invasion event.
+ ///
+ public static string GoldenInvasionPlugIn_Description {
+ get {
+ return ResourceManager.GetString("GoldenInvasionPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Golden Invasion.
+ ///
+ public static string GoldenInvasionPlugIn_Name {
+ get {
+ return ResourceManager.GetString("GoldenInvasionPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the chat command '/battlesoccer <guildname>'. Sends a request to the guild master of the requested guild..
+ ///
+ public static string GuildBattleSoccerChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("GuildBattleSoccerChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Guild battle soccer chat command.
+ ///
+ public static string GuildBattleSoccerChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("GuildBattleSoccerChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the chat command '/guilddisconnect <guild>'. Disconnect the guild members..
+ ///
+ public static string GuildDisconnectChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("GuildDisconnectChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Guild disconnect chat command.
+ ///
+ public static string GuildDisconnectChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("GuildDisconnectChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the chat command '/guildmove <guild> <map> <x?> <y?>'. Move the character from a guild to a specified map and coordinates..
+ ///
+ public static string GuildMoveChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("GuildMoveChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Guild move chat command.
+ ///
+ public static string GuildMoveChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("GuildMoveChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the chat command '/war <guild>'. Sends a request to the guild master of the requested guild..
+ ///
+ public static string GuildWarChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("GuildWarChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Guild war chat command.
+ ///
+ public static string GuildWarChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("GuildWarChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to This plugin increases the score of the soccer result, if a kill occurred..
+ ///
+ public static string GuildWarKillScorePlugIn_Description {
+ get {
+ return ResourceManager.GetString("GuildWarKillScorePlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Guild soccer kill score.
+ ///
+ public static string GuildWarKillScorePlugIn_Name {
+ get {
+ return ResourceManager.GetString("GuildWarKillScorePlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Experience multiplier.
+ ///
+ public static string HappyHourConfiguration_ExperienceMultiplier_Name {
+ get {
+ return ResourceManager.GetString("HappyHourConfiguration_ExperienceMultiplier_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handle Happy Hour event.
+ ///
+ public static string HappyHourPlugIn_Description {
+ get {
+ return ResourceManager.GetString("HappyHourPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Happy Hour.
+ ///
+ public static string HappyHourPlugIn_Name {
+ get {
+ return ResourceManager.GetString("HappyHourPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Plugin which handles the jewel of harmony consumption..
+ ///
+ public static string HarmonyJewelConsumeHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("HarmonyJewelConsumeHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Harmony Jewel Consume Handler.
+ ///
+ public static string HarmonyJewelConsumeHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("HarmonyJewelConsumeHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the /help <command> chat command. Shows information about the requested command..
+ ///
+ public static string HelpCommand_Description {
+ get {
+ return ResourceManager.GetString("HelpCommand_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Help command.
+ ///
+ public static string HelpCommand_Name {
+ get {
+ return ResourceManager.GetString("HelpCommand_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the chat command '/hide'. Hides the own player from others..
+ ///
+ public static string HideChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("HideChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Hide command.
+ ///
+ public static string HideChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("HideChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Plugin which handles the higher refine stone consumption..
+ ///
+ public static string HigherRefineStoneConsumeHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("HigherRefineStoneConsumeHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Higher Refine Stone Consume Handler.
+ ///
+ public static string HigherRefineStoneConsumeHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("HigherRefineStoneConsumeHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the chat command '/item <group> <number> <lvl?> <exc?> <sk?> <lu?> <opt?> <anc?> <ancBonuslvl?>'. Drops a specific item next to the character..
+ ///
+ public static string ItemChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ItemChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Item chat command.
+ ///
+ public static string ItemChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ItemChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Plugin which handles the large complex potion consumption..
+ ///
+ public static string LargeComplexPotionConsumeHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("LargeComplexPotionConsumeHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Large Complex Potion Consume Handler.
+ ///
+ public static string LargeComplexPotionConsumeHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("LargeComplexPotionConsumeHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Plugin which handles the large health potion consumption..
+ ///
+ public static string LargeHealthPotionConsumeHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("LargeHealthPotionConsumeHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Large Health Potion Consume Handler.
+ ///
+ public static string LargeHealthPotionConsumeHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("LargeHealthPotionConsumeHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Plugin which handles the large mana potion consumption..
+ ///
+ public static string LargeManaPotionConsumeHandler_Description {
+ get {
+ return ResourceManager.GetString("LargeManaPotionConsumeHandler_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to LargeManaPotionConsumeHandler.
+ ///
+ public static string LargeManaPotionConsumeHandler_Name {
+ get {
+ return ResourceManager.GetString("LargeManaPotionConsumeHandler_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Plugin which handles the large shield potion consumption..
+ ///
+ public static string LargeShieldPotionConsumeHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("LargeShieldPotionConsumeHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Large Shield Potion Consume Handler.
+ ///
+ public static string LargeShieldPotionConsumeHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("LargeShieldPotionConsumeHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Plugin which handles the consumption of items which add skills (e.g. scrolls, orbs)..
+ ///
+ public static string LearnablesConsumeHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("LearnablesConsumeHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Learnables Consume Handler.
+ ///
+ public static string LearnablesConsumeHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("LearnablesConsumeHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Plugin which handles the jewel of life consumption..
+ ///
+ public static string LifeJewelConsumeHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("LifeJewelConsumeHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Life Jewel Consume Handler.
+ ///
+ public static string LifeJewelConsumeHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("LifeJewelConsumeHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Lists all the commands..
+ ///
+ public static string ListCommand_Description {
+ get {
+ return ResourceManager.GetString("ListCommand_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to List command.
+ ///
+ public static string ListCommand_Name {
+ get {
+ return ResourceManager.GetString("ListCommand_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Plugin which handles the lower refine stone consumption..
+ ///
+ public static string LowerRefineStoneConsumeHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("LowerRefineStoneConsumeHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Lower Refine Stone Consume Handler.
+ ///
+ public static string LowerRefineStoneConsumeHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("LowerRefineStoneConsumeHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Plugin which handles the medium complex potion consumption..
+ ///
+ public static string MediumComplexPotionConsumeHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("MediumComplexPotionConsumeHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Medium Complex Potion Consume Handler.
+ ///
+ public static string MediumComplexPotionConsumeHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("MediumComplexPotionConsumeHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Plugin which handles the medium health potion consumption..
+ ///
+ public static string MediumHealthPotionConsumeHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("MediumHealthPotionConsumeHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Medium Health Potion Consume Handler.
+ ///
+ public static string MediumHealthPotionConsumeHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("MediumHealthPotionConsumeHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Plugin which handles the medium mana potion consumption..
+ ///
+ public static string MediumManaPotionConsumeHandler_Description {
+ get {
+ return ResourceManager.GetString("MediumManaPotionConsumeHandler_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to MediumManaPotionConsumeHandler.
+ ///
+ public static string MediumManaPotionConsumeHandler_Name {
+ get {
+ return ResourceManager.GetString("MediumManaPotionConsumeHandler_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Plugin which handles the medium shield potion consumption..
+ ///
+ public static string MediumShieldPotionConsumeHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("MediumShieldPotionConsumeHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Medium Shield Potion Consume Handler.
+ ///
+ public static string MediumShieldPotionConsumeHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("MediumShieldPotionConsumeHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Entrance closed message.
+ ///
+ public static string MiniGameStartConfiguration_EntranceClosedMessage_Name {
+ get {
+ return ResourceManager.GetString("MiniGameStartConfiguration_EntranceClosedMessage_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Entrance opened message.
+ ///
+ public static string MiniGameStartConfiguration_EntranceOpenedMessage_Name {
+ get {
+ return ResourceManager.GetString("MiniGameStartConfiguration_EntranceOpenedMessage_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the chat command '/move <target> <mapIdOrName?> <x?> <y?>'. Moves the character to the specified destination..
+ ///
+ public static string MoveChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("MoveChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Move chat command.
+ ///
+ public static string MoveChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("MoveChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the chat command '/movemonster <id> <x> <y>'. Moves a previously created monster which can be remote controlled by the GM..
+ ///
+ public static string MoveMonsterChatCommand_Description {
+ get {
+ return ResourceManager.GetString("MoveMonsterChatCommand_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Move remote monster chat command.
+ ///
+ public static string MoveMonsterChatCommand_Name {
+ get {
+ return ResourceManager.GetString("MoveMonsterChatCommand_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to This value is applied per pay interval and multiplied with the total character level..
+ ///
+ public static string MuHelperConfiguration_CostPerStage_Description {
+ get {
+ return ResourceManager.GetString("MuHelperConfiguration_CostPerStage_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Cost per stage.
+ ///
+ public static string MuHelperConfiguration_CostPerStage_Name {
+ get {
+ return ResourceManager.GetString("MuHelperConfiguration_CostPerStage_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Maximum character level.
+ ///
+ public static string MuHelperConfiguration_MaxLevel_Name {
+ get {
+ return ResourceManager.GetString("MuHelperConfiguration_MaxLevel_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Minimum character level.
+ ///
+ public static string MuHelperConfiguration_MinLevel_Name {
+ get {
+ return ResourceManager.GetString("MuHelperConfiguration_MinLevel_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Pay interval.
+ ///
+ public static string MuHelperConfiguration_PayInterval_Name {
+ get {
+ return ResourceManager.GetString("MuHelperConfiguration_PayInterval_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to After each interval, the stage gets increased to the next level with usually increasing costs..
+ ///
+ public static string MuHelperConfiguration_StageInterval_Description {
+ get {
+ return ResourceManager.GetString("MuHelperConfiguration_StageInterval_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Stage interval.
+ ///
+ public static string MuHelperConfiguration_StageInterval_Name {
+ get {
+ return ResourceManager.GetString("MuHelperConfiguration_StageInterval_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Provides configuration for the MU Helper feature..
+ ///
+ public static string MuHelperFeaturePlugIn_Description {
+ get {
+ return ResourceManager.GetString("MuHelperFeaturePlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to MU Helper Feature.
+ ///
+ public static string MuHelperFeaturePlugIn_Name {
+ get {
+ return ResourceManager.GetString("MuHelperFeaturePlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the chat command '/goldnotice message'. Sends a global golden notice message to all players of the game..
+ ///
+ public static string NoticeChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("NoticeChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Notice chat command.
+ ///
+ public static string NoticeChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("NoticeChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the start of nova skill of the wizard class..
+ ///
+ public static string NovaSkillStartPlugin_Description {
+ get {
+ return ResourceManager.GetString("NovaSkillStartPlugin_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to NovaSkillStartPlugin.
+ ///
+ public static string NovaSkillStartPlugin_Name {
+ get {
+ return ResourceManager.GetString("NovaSkillStartPlugin_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the stopping of nova skill of the wizard class..
+ ///
+ public static string NovaSkillStopPlugin_Description {
+ get {
+ return ResourceManager.GetString("NovaSkillStopPlugin_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to NovaSkillStopPlugin.
+ ///
+ public static string NovaSkillStopPlugin_Name {
+ get {
+ return ResourceManager.GetString("NovaSkillStopPlugin_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The message to show when the player does not have the required VIP level for this command (excluding GM)..
+ ///
+ public static string NpcChatCommandConfiguration_InsufficientVipLevelMessage_Description {
+ get {
+ return ResourceManager.GetString("NpcChatCommandConfiguration_InsufficientVipLevelMessage_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Insufficient VIP Level Message.
+ ///
+ public static string NpcChatCommandConfiguration_InsufficientVipLevelMessage_Name {
+ get {
+ return ResourceManager.GetString("NpcChatCommandConfiguration_InsufficientVipLevelMessage_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The minimum VIP level to use the command. Default: 0..
+ ///
+ public static string NpcChatCommandConfiguration_MinimumVipLevel_Description {
+ get {
+ return ResourceManager.GetString("NpcChatCommandConfiguration_MinimumVipLevel_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Minimum VIP Level.
+ ///
+ public static string NpcChatCommandConfiguration_MinimumVipLevel_Name {
+ get {
+ return ResourceManager.GetString("NpcChatCommandConfiguration_MinimumVipLevel_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The ID of the NPC to open the merchant store. Default: Potion Girl Amy - 253..
+ ///
+ public static string NpcChatCommandConfiguration_OpenMerchantNpc_Description {
+ get {
+ return ResourceManager.GetString("NpcChatCommandConfiguration_OpenMerchantNpc_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to NPC ID.
+ ///
+ public static string NpcChatCommandConfiguration_OpenMerchantNpc_Name {
+ get {
+ return ResourceManager.GetString("NpcChatCommandConfiguration_OpenMerchantNpc_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Opens the merchant NPC store..
+ ///
+ public static string NpcChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("NpcChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to NPC open merchant chat command.
+ ///
+ public static string NpcChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("NpcChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the chat command '/online'. Gets the count of game masters and players online..
+ ///
+ public static string OnlineChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("OnlineChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Online chat command.
+ ///
+ public static string OnlineChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("OnlineChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The message to show when the player does not have the required VIP level for this command (excluding GM)..
+ ///
+ public static string OpenWarehouseChatCommandConfiguration_InsufficientVipLevelMessage_Description {
+ get {
+ return ResourceManager.GetString("OpenWarehouseChatCommandConfiguration_InsufficientVipLevelMessage_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Insufficient VIP Level Message.
+ ///
+ public static string OpenWarehouseChatCommandConfiguration_InsufficientVipLevelMessage_Name {
+ get {
+ return ResourceManager.GetString("OpenWarehouseChatCommandConfiguration_InsufficientVipLevelMessage_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The minimum VIP level to use the command (excluding GM). Default: 0..
+ ///
+ public static string OpenWarehouseChatCommandConfiguration_MinimumVipLevel_Description {
+ get {
+ return ResourceManager.GetString("OpenWarehouseChatCommandConfiguration_MinimumVipLevel_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Minimum VIP Level.
+ ///
+ public static string OpenWarehouseChatCommandConfiguration_MinimumVipLevel_Name {
+ get {
+ return ResourceManager.GetString("OpenWarehouseChatCommandConfiguration_MinimumVipLevel_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Opens the warehouse..
+ ///
+ public static string OpenWarehouseChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("OpenWarehouseChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Open Warehouse chat command.
+ ///
+ public static string OpenWarehouseChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("OpenWarehouseChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Saves the progress of players periodically when their status is 'EnteredWorld'..
+ ///
+ public static string PeriodicSaveProgressPlugIn_Description {
+ get {
+ return ResourceManager.GetString("PeriodicSaveProgressPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Periodic Save Progress.
+ ///
+ public static string PeriodicSaveProgressPlugIn_Name {
+ get {
+ return ResourceManager.GetString("PeriodicSaveProgressPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Save interval.
+ ///
+ public static string PeriodicSaveProgressPlugInConfiguration_Interval_Name {
+ get {
+ return ResourceManager.GetString("PeriodicSaveProgressPlugInConfiguration_Interval_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The text which prints as a golden message in the game..
+ ///
+ public static string PeriodicTaskConfiguration_Message_Description {
+ get {
+ return ResourceManager.GetString("PeriodicTaskConfiguration_Message_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Message.
+ ///
+ public static string PeriodicTaskConfiguration_Message_Name {
+ get {
+ return ResourceManager.GetString("PeriodicTaskConfiguration_Message_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Pre-start message delay.
+ ///
+ public static string PeriodicTaskConfiguration_PreStartMessageDelay_Name {
+ get {
+ return ResourceManager.GetString("PeriodicTaskConfiguration_PreStartMessageDelay_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Task duration (minimum).
+ ///
+ public static string PeriodicTaskConfiguration_TaskDuration_Name {
+ get {
+ return ResourceManager.GetString("PeriodicTaskConfiguration_TaskDuration_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Timetable.
+ ///
+ public static string PeriodicTaskConfiguration_Timetable_Name {
+ get {
+ return ResourceManager.GetString("PeriodicTaskConfiguration_Timetable_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the chat command '/pk <char> <pk_lvl> <pk_count>'. Sets player kill level and count of a character..
+ ///
+ public static string PkChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("PkChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to PK chat command.
+ ///
+ public static string PkChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("PkChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the chat command '/pkclear <char>'. Clears the player kill count..
+ ///
+ public static string PkClearChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("PkClearChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to PK clear chat command.
+ ///
+ public static string PkClearChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("PkClearChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the plasma storm skill of the fenrir pet. It randomly halves the durability of a target's equipped item..
+ ///
+ public static string PlasmaStormSkillPlugIn_Description {
+ get {
+ return ResourceManager.GetString("PlasmaStormSkillPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Plasma Storm Skill.
+ ///
+ public static string PlasmaStormSkillPlugIn_Name {
+ get {
+ return ResourceManager.GetString("PlasmaStormSkillPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to This plugin decreases the experience after the player has been killed by a monster..
+ ///
+ public static string PlayerLosesExperienceAfterDeathPlugIn_Description {
+ get {
+ return ResourceManager.GetString("PlayerLosesExperienceAfterDeathPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Player exp loss after death.
+ ///
+ public static string PlayerLosesExperienceAfterDeathPlugIn_Name {
+ get {
+ return ResourceManager.GetString("PlayerLosesExperienceAfterDeathPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Experience loss %.
+ ///
+ public static string PlayerLosesExperienceAfterDeathPlugInConfiguration_ExperienceLossPercentage_Name {
+ get {
+ return ResourceManager.GetString("PlayerLosesExperienceAfterDeathPlugInConfiguration_ExperienceLossPercentage_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Is master.
+ ///
+ public static string PlayerLosesExperienceAfterDeathPlugInConfiguration_IsMaster_Name {
+ get {
+ return ResourceManager.GetString("PlayerLosesExperienceAfterDeathPlugInConfiguration_IsMaster_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Losses per stage.
+ ///
+ public static string PlayerLosesExperienceAfterDeathPlugInConfiguration_Losses_Name {
+ get {
+ return ResourceManager.GetString("PlayerLosesExperienceAfterDeathPlugInConfiguration_Losses_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Losses per level.
+ ///
+ public static string PlayerLosesExperienceAfterDeathPlugInConfiguration_LossesPerLevel_Name {
+ get {
+ return ResourceManager.GetString("PlayerLosesExperienceAfterDeathPlugInConfiguration_LossesPerLevel_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Minimum level.
+ ///
+ public static string PlayerLosesExperienceAfterDeathPlugInConfiguration_MinimumLevel_Name {
+ get {
+ return ResourceManager.GetString("PlayerLosesExperienceAfterDeathPlugInConfiguration_MinimumLevel_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to State.
+ ///
+ public static string PlayerLosesExperienceAfterDeathPlugInConfiguration_State_Name {
+ get {
+ return ResourceManager.GetString("PlayerLosesExperienceAfterDeathPlugInConfiguration_State_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to This plugin decreases the money (zen) after the player has been killed by a monster..
+ ///
+ public static string PlayerLosesMoneyAfterDeathPlugIn_Description {
+ get {
+ return ResourceManager.GetString("PlayerLosesMoneyAfterDeathPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Player money loss after death.
+ ///
+ public static string PlayerLosesMoneyAfterDeathPlugIn_Name {
+ get {
+ return ResourceManager.GetString("PlayerLosesMoneyAfterDeathPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Inventory money loss %.
+ ///
+ public static string PlayerLosesMoneyAfterDeathPlugInConfiguration_InventoryMoneyLossPercentage_Name {
+ get {
+ return ResourceManager.GetString("PlayerLosesMoneyAfterDeathPlugInConfiguration_InventoryMoneyLossPercentage_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Is master.
+ ///
+ public static string PlayerLosesMoneyAfterDeathPlugInConfiguration_IsMaster_Name {
+ get {
+ return ResourceManager.GetString("PlayerLosesMoneyAfterDeathPlugInConfiguration_IsMaster_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Losses per level.
+ ///
+ public static string PlayerLosesMoneyAfterDeathPlugInConfiguration_LossesPerLevel_Name {
+ get {
+ return ResourceManager.GetString("PlayerLosesMoneyAfterDeathPlugInConfiguration_LossesPerLevel_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Minimum level.
+ ///
+ public static string PlayerLosesMoneyAfterDeathPlugInConfiguration_MinimumLevel_Name {
+ get {
+ return ResourceManager.GetString("PlayerLosesMoneyAfterDeathPlugInConfiguration_MinimumLevel_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Vault money loss %.
+ ///
+ public static string PlayerLosesMoneyAfterDeathPlugInConfiguration_VaultMoneyLossPercentage_Name {
+ get {
+ return ResourceManager.GetString("PlayerLosesMoneyAfterDeathPlugInConfiguration_VaultMoneyLossPercentage_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the chat command '/post message'. Sends a global blue system message to all players of the game..
+ ///
+ public static string PostChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("PostChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Post chat command.
+ ///
+ public static string PostChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("PostChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to This plugin increases the monster kill count of the quest state of active quests..
+ ///
+ public static string QuestMonsterKillCountPlugIn_Description {
+ get {
+ return ResourceManager.GetString("QuestMonsterKillCountPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Count killed quest monsters.
+ ///
+ public static string QuestMonsterKillCountPlugIn_Name {
+ get {
+ return ResourceManager.GetString("QuestMonsterKillCountPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Message.
+ ///
+ public static string QuestMonsterKillCountPlugInConfiguration_Message_Name {
+ get {
+ return ResourceManager.GetString("QuestMonsterKillCountPlugInConfiguration_Message_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Defines the value which is additionally recovered. From this value, the character level is subtracted..
+ ///
+ public static string RecoverConsumeHandlerConfiguration_AdditionalRecoverMinusCharacterLevel_Description {
+ get {
+ return ResourceManager.GetString("RecoverConsumeHandlerConfiguration_AdditionalRecoverMinusCharacterLevel_Descripti" +
+ "on", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Additional recover minus character level.
+ ///
+ public static string RecoverConsumeHandlerConfiguration_AdditionalRecoverMinusCharacterLevel_Name {
+ get {
+ return ResourceManager.GetString("RecoverConsumeHandlerConfiguration_AdditionalRecoverMinusCharacterLevel_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The cooldown time for the next consumption..
+ ///
+ public static string RecoverConsumeHandlerConfiguration_CooldownTime_Description {
+ get {
+ return ResourceManager.GetString("RecoverConsumeHandlerConfiguration_CooldownTime_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Cooldown time.
+ ///
+ public static string RecoverConsumeHandlerConfiguration_CooldownTime_Name {
+ get {
+ return ResourceManager.GetString("RecoverConsumeHandlerConfiguration_CooldownTime_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to A value between 0 and 1 (exclusive). 1 would mean that the recover works instantly since level 1..
+ ///
+ public static string RecoverConsumeHandlerConfiguration_RecoverDelayReductionByPotionLevel_Description {
+ get {
+ return ResourceManager.GetString("RecoverConsumeHandlerConfiguration_RecoverDelayReductionByPotionLevel_Description" +
+ "", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Recover delay reduction by potion level.
+ ///
+ public static string RecoverConsumeHandlerConfiguration_RecoverDelayReductionByPotionLevel_Name {
+ get {
+ return ResourceManager.GetString("RecoverConsumeHandlerConfiguration_RecoverDelayReductionByPotionLevel_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Recover percentage increase by potion level.
+ ///
+ public static string RecoverConsumeHandlerConfiguration_RecoverPercentageIncreaseByPotionLevel_Name {
+ get {
+ return ResourceManager.GetString("RecoverConsumeHandlerConfiguration_RecoverPercentageIncreaseByPotionLevel_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to If none are defined, the recover happens instantly..
+ ///
+ public static string RecoverConsumeHandlerConfiguration_RecoverSteps_Description {
+ get {
+ return ResourceManager.GetString("RecoverConsumeHandlerConfiguration_RecoverSteps_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Maximum character level.
+ ///
+ public static string RecoverConsumeHandlerConfiguration_RecoverSteps_Name {
+ get {
+ return ResourceManager.GetString("RecoverConsumeHandlerConfiguration_RecoverSteps_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Total recover percentage.
+ ///
+ public static string RecoverConsumeHandlerConfiguration_TotalRecoverPercentage_Name {
+ get {
+ return ResourceManager.GetString("RecoverConsumeHandlerConfiguration_TotalRecoverPercentage_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handle red dragon invasion event.
+ ///
+ public static string RedDragonInvasionPlugIn_Description {
+ get {
+ return ResourceManager.GetString("RedDragonInvasionPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Red Dragon Invasion.
+ ///
+ public static string RedDragonInvasionPlugIn_Name {
+ get {
+ return ResourceManager.GetString("RedDragonInvasionPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the chat command '/removenpc <id>'..
+ ///
+ public static string RemoveNpcChatCommand_Description {
+ get {
+ return ResourceManager.GetString("RemoveNpcChatCommand_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Remove npc chat command.
+ ///
+ public static string RemoveNpcChatCommand_Name {
+ get {
+ return ResourceManager.GetString("RemoveNpcChatCommand_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handle Reset Character NPC Request.
+ ///
+ public static string ResetCharacterNpcPlugin_Description {
+ get {
+ return ResourceManager.GetString("ResetCharacterNpcPlugin_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to ResetCharacterNpcPlugin.
+ ///
+ public static string ResetCharacterNpcPlugin_Name {
+ get {
+ return ResourceManager.GetString("ResetCharacterNpcPlugin_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the chat command '/reset'..
+ ///
+ public static string ResetChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ResetChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Reset chat command.
+ ///
+ public static string ResetChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ResetChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Level after reset.
+ ///
+ public static string ResetConfiguration_LevelAfterReset_Name {
+ get {
+ return ResourceManager.GetString("ResetConfiguration_LevelAfterReset_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Log out.
+ ///
+ public static string ResetConfiguration_LogOut_Name {
+ get {
+ return ResourceManager.GetString("ResetConfiguration_LogOut_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Move home.
+ ///
+ public static string ResetConfiguration_MoveHome_Name {
+ get {
+ return ResourceManager.GetString("ResetConfiguration_MoveHome_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Multiply points by reset count.
+ ///
+ public static string ResetConfiguration_MultiplyPointsByResetCount_Name {
+ get {
+ return ResourceManager.GetString("ResetConfiguration_MultiplyPointsByResetCount_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Multiply required money by reset count.
+ ///
+ public static string ResetConfiguration_MultiplyRequiredMoneyByResetCount_Name {
+ get {
+ return ResourceManager.GetString("ResetConfiguration_MultiplyRequiredMoneyByResetCount_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Points per reset.
+ ///
+ public static string ResetConfiguration_PointsPerReset_Name {
+ get {
+ return ResourceManager.GetString("ResetConfiguration_PointsPerReset_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Reset points per reset.
+ ///
+ public static string ResetConfiguration_ReplacePointsPerReset_Name {
+ get {
+ return ResourceManager.GetString("ResetConfiguration_ReplacePointsPerReset_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Required level.
+ ///
+ public static string ResetConfiguration_RequiredLevel_Name {
+ get {
+ return ResourceManager.GetString("ResetConfiguration_RequiredLevel_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Required money.
+ ///
+ public static string ResetConfiguration_RequiredMoney_Name {
+ get {
+ return ResourceManager.GetString("ResetConfiguration_RequiredMoney_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Reset limit.
+ ///
+ public static string ResetConfiguration_ResetLimit_Name {
+ get {
+ return ResourceManager.GetString("ResetConfiguration_ResetLimit_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Reset stats.
+ ///
+ public static string ResetConfiguration_ResetStats_Name {
+ get {
+ return ResourceManager.GetString("ResetConfiguration_ResetStats_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Provides configuration for the reset feature..
+ ///
+ public static string ResetFeaturePlugIn_Description {
+ get {
+ return ResourceManager.GetString("ResetFeaturePlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Reset Feature.
+ ///
+ public static string ResetFeaturePlugIn_Name {
+ get {
+ return ResourceManager.GetString("ResetFeaturePlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Updates the state of the self defense system..
+ ///
+ public static string SelfDefensePlugIn_Description {
+ get {
+ return ResourceManager.GetString("SelfDefensePlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Self Defense.
+ ///
+ public static string SelfDefensePlugIn_Name {
+ get {
+ return ResourceManager.GetString("SelfDefensePlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Self-defense time-out..
+ ///
+ public static string SelfDefensePlugInConfiguration_SelfDefenseTimeOut_Name {
+ get {
+ return ResourceManager.GetString("SelfDefensePlugInConfiguration_SelfDefenseTimeOut_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Sets level of a player. Usage: /setlevel (level) (optional:character).
+ ///
+ public static string SetLevelChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("SetLevelChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Set level command.
+ ///
+ public static string SetLevelChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("SetLevelChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Sets level up points of a player. Usage: /setleveluppoints (points) (optional:character).
+ ///
+ public static string SetLevelUpPointsChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("SetLevelUpPointsChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Set level up points command.
+ ///
+ public static string SetLevelUpPointsChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("SetLevelUpPointsChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Sets master level of a player. Usage: /setmasterlevel (level) (optional:character).
+ ///
+ public static string SetMasterLevelChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("SetMasterLevelChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Set master level command.
+ ///
+ public static string SetMasterLevelChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("SetMasterLevelChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Sets master level up points of a player. Usage: /setmasterleveluppoints (points) (optional:character).
+ ///
+ public static string SetMasterLevelUpPointsChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("SetMasterLevelUpPointsChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Set master level up points command.
+ ///
+ public static string SetMasterLevelUpPointsChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("SetMasterLevelUpPointsChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Sets money of a player. Usage: /setmoney (amount) (optional:character).
+ ///
+ public static string SetMoneyChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("SetMoneyChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Set money command.
+ ///
+ public static string SetMoneyChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("SetMoneyChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Sets resets of a player. Usage: /setresets (resets) (optional:character).
+ ///
+ public static string SetResetsChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("SetResetsChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Set resets command.
+ ///
+ public static string SetResetsChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("SetResetsChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Set stat points. Usage: /set (ene|agi|vit|str|cmd) (amount) (optional:character).
+ ///
+ public static string SetStatChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("SetStatChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Set Stat chat command.
+ ///
+ public static string SetStatChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("SetStatChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the chat command '/fireworks <x> <y>'. Shows an fireworks effect at the specified coordinates..
+ ///
+ public static string ShowFireworksEffectChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowFireworksEffectChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show fireworks effect chat command.
+ ///
+ public static string ShowFireworksEffectChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowFireworksEffectChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Shows a message to all players when a player enters the game..
+ ///
+ public static string ShowMessageToAllWhenPlayerEnteredWorldPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowMessageToAllWhenPlayerEnteredWorldPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Message To All When Player Entered World.
+ ///
+ public static string ShowMessageToAllWhenPlayerEnteredWorldPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowMessageToAllWhenPlayerEnteredWorldPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the chat command '/showids'..
+ ///
+ public static string ShowNpcIdsChatCommand_ShowNpcIdsChatCommand_Description {
+ get {
+ return ResourceManager.GetString("ShowNpcIdsChatCommand_ShowNpcIdsChatCommand_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show NPC ids chat command.
+ ///
+ public static string ShowNpcIdsChatCommand_ShowNpcIdsChatCommand_Name {
+ get {
+ return ResourceManager.GetString("ShowNpcIdsChatCommand_ShowNpcIdsChatCommand_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the chat command '/xmasfireworks <x> <y>'. Shows an christmas fireworks effect at the specified coordinates..
+ ///
+ public static string ShowXmasFireworksEffectChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowXmasFireworksEffectChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show xmas fireworks effect chat command.
+ ///
+ public static string ShowXmasFireworksEffectChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowXmasFireworksEffectChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Plugin which handles the siege potion consumption..
+ ///
+ public static string SiegePotionConsumeHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("SiegePotionConsumeHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Siege Potion Consume Handler.
+ ///
+ public static string SiegePotionConsumeHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("SiegePotionConsumeHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the chat command '/skin <number>'. Applies a monster skin to the game masters character..
+ ///
+ public static string SkinChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("SkinChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Skin chat command.
+ ///
+ public static string SkinChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("SkinChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Plugin which handles the small complex potion consumption..
+ ///
+ public static string SmallComplexPotionConsumeHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("SmallComplexPotionConsumeHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Small Complex Potion Consume Handler.
+ ///
+ public static string SmallComplexPotionConsumeHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("SmallComplexPotionConsumeHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Plugin which handles the small health potion consumption..
+ ///
+ public static string SmallHealthPotionConsumeHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("SmallHealthPotionConsumeHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Small Health Potion Consume Handler.
+ ///
+ public static string SmallHealthPotionConsumeHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("SmallHealthPotionConsumeHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Plugin which handles the small mana potion consumption..
+ ///
+ public static string SmallManaPotionConsumeHandler_Description {
+ get {
+ return ResourceManager.GetString("SmallManaPotionConsumeHandler_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to SmallManaPotionConsumeHandler.
+ ///
+ public static string SmallManaPotionConsumeHandler_Name {
+ get {
+ return ResourceManager.GetString("SmallManaPotionConsumeHandler_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Plugin which handles the small shield potion consumption..
+ ///
+ public static string SmallShieldPotionConsumeHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("SmallShieldPotionConsumeHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Small Shield Potion Consume Handler.
+ ///
+ public static string SmallShieldPotionConsumeHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("SmallShieldPotionConsumeHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the soul barrier proficiency skill of the grand master..
+ ///
+ public static string SoulBarrierProficieSkillAction_Description {
+ get {
+ return ResourceManager.GetString("SoulBarrierProficieSkillAction_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to SoulBarrierProficieSkillAction.
+ ///
+ public static string SoulBarrierProficieSkillAction_Name {
+ get {
+ return ResourceManager.GetString("SoulBarrierProficieSkillAction_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the soul barrier strengthener skill of the grand master..
+ ///
+ public static string SoulBarrierStrengSkillAction_Description {
+ get {
+ return ResourceManager.GetString("SoulBarrierStrengSkillAction_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to SoulBarrierStrengSkillAction.
+ ///
+ public static string SoulBarrierStrengSkillAction_Name {
+ get {
+ return ResourceManager.GetString("SoulBarrierStrengSkillAction_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Plugin which handles the jewel of soul consumption..
+ ///
+ public static string SoulJewelConsumeHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("SoulJewelConsumeHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Soul Jewel Consume Handler.
+ ///
+ public static string SoulJewelConsumeHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("SoulJewelConsumeHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the chat command '/startbc'. Starts the blood castle event at the next possible time..
+ ///
+ public static string StartBloodCastleEventChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("StartBloodCastleEventChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Start Blood Castle Event Chat Command.
+ ///
+ public static string StartBloodCastleEventChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("StartBloodCastleEventChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the chat command '/startcc'. Starts the chaos castle event at the next possible time..
+ ///
+ public static string StartChaosCastleEventChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("StartChaosCastleEventChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Start Chaos Castle Event Chat Command.
+ ///
+ public static string StartChaosCastleEventChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("StartChaosCastleEventChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the chat command '/startds'. Starts the devil square event at the next possible time..
+ ///
+ public static string StartDevilSquareEventChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("StartDevilSquareEventChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Start Devil Square Event Chat Command.
+ ///
+ public static string StartDevilSquareEventChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("StartDevilSquareEventChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Plugin which handles the summoning orb consumption..
+ ///
+ public static string SummoningOrbConsumeHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("SummoningOrbConsumeHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Summoning Orb Consume Handler.
+ ///
+ public static string SummoningOrbConsumeHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("SummoningOrbConsumeHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the summon party skill of the dark lord class..
+ ///
+ public static string SummonPartySkillPlugin_Description {
+ get {
+ return ResourceManager.GetString("SummonPartySkillPlugin_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to SummonPartySkillPlugin.
+ ///
+ public static string SummonPartySkillPlugin_Name {
+ get {
+ return ResourceManager.GetString("SummonPartySkillPlugin_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Default (catch-all) handler for targeted skills.
+ ///
+ public static string TargetedSkillDefaultPlugin_Description {
+ get {
+ return ResourceManager.GetString("TargetedSkillDefaultPlugin_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to TargetedSkillDefaultPlugin.
+ ///
+ public static string TargetedSkillDefaultPlugin_Name {
+ get {
+ return ResourceManager.GetString("TargetedSkillDefaultPlugin_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the chat command '/teleport <x> <y>'. Teleports the game master to the specified coordinates..
+ ///
+ public static string TeleportChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("TeleportChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Teleport chat command.
+ ///
+ public static string TeleportChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("TeleportChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Plugin which handles the town portal scroll consumption..
+ ///
+ public static string TownPortalScrollConsumeHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("TownPortalScrollConsumeHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Town Portal Scroll Consume Handler.
+ ///
+ public static string TownPortalScrollConsumeHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("TownPortalScrollConsumeHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the chat command '/trace <char>'. Moves the game master to the character's location..
+ ///
+ public static string TraceChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("TraceChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Trace chat command.
+ ///
+ public static string TraceChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("TraceChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the chat command '/track <char>'. Moves the player to the game masters location..
+ ///
+ public static string TrackChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("TrackChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Track chat command.
+ ///
+ public static string TrackChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("TrackChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the chat command '/unbanacc <acc>'. Unbans an account from the game..
+ ///
+ public static string UnBanAccChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("UnBanAccChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Unban Account command.
+ ///
+ public static string UnBanAccChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("UnBanAccChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the chat command '/unbanchar <char>'. Unbans the account of a character from the game..
+ ///
+ public static string UnBanCharChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("UnBanCharChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Unban Character command.
+ ///
+ public static string UnBanCharChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("UnBanCharChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the chat command '/unhide'. Unhides the own player from others..
+ ///
+ public static string UnHideChatCommandPlugIn_Description {
+ get {
+ return ResourceManager.GetString("UnHideChatCommandPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Hide command.
+ ///
+ public static string UnHideChatCommandPlugIn_Name {
+ get {
+ return ResourceManager.GetString("UnHideChatCommandPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Unlocks the Dark Lord character class as soon as the first character of an account reaches level 250..
+ ///
+ public static string UnlockDarkLordAtLevel250_Description {
+ get {
+ return ResourceManager.GetString("UnlockDarkLordAtLevel250_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to UnlockDarkLordAtLevel250.
+ ///
+ public static string UnlockDarkLordAtLevel250_Name {
+ get {
+ return ResourceManager.GetString("UnlockDarkLordAtLevel250_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Unlocks the Magic Gladiator character class as soon as the first character of an account reaches level 220..
+ ///
+ public static string UnlockMagicGladiatorAtLevel220_Description {
+ get {
+ return ResourceManager.GetString("UnlockMagicGladiatorAtLevel220_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to UnlockMagicGladiatorAtLevel220.
+ ///
+ public static string UnlockMagicGladiatorAtLevel220_Name {
+ get {
+ return ResourceManager.GetString("UnlockMagicGladiatorAtLevel220_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Unlocks the Rage Fighter character class as soon as the first character of an account reaches level 150..
+ ///
+ public static string UnlockRageFighterAtLevel150_Description {
+ get {
+ return ResourceManager.GetString("UnlockRageFighterAtLevel150_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to UnlockRageFighterAtLevel150.
+ ///
+ public static string UnlockRageFighterAtLevel150_Name {
+ get {
+ return ResourceManager.GetString("UnlockRageFighterAtLevel150_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Unlocks the Summoner character class as soon as the first character of an account reaches level 1..
+ ///
+ public static string UnlockSummonerAtLevel1_Description {
+ get {
+ return ResourceManager.GetString("UnlockSummonerAtLevel1_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to UnlockSummonerAtLevel1.
+ ///
+ public static string UnlockSummonerAtLevel1_Name {
+ get {
+ return ResourceManager.GetString("UnlockSummonerAtLevel1_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to This plugin increases the score of the duel, when a kill occurred..
+ ///
+ public static string UpdateDuelScorePlugIn_Description {
+ get {
+ return ResourceManager.GetString("UpdateDuelScorePlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Update Duel Score.
+ ///
+ public static string UpdateDuelScorePlugIn_Name {
+ get {
+ return ResourceManager.GetString("UpdateDuelScorePlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Updates the attribute if a player is located in the safezone. For example, this activates the automatic health and shield recover..
+ ///
+ public static string UpdateIsInSafezoneAfterPlayerMoved_Description {
+ get {
+ return ResourceManager.GetString("UpdateIsInSafezoneAfterPlayerMoved_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to UpdateIsInSafezoneAfterPlayerMoved.
+ ///
+ public static string UpdateIsInSafezoneAfterPlayerMoved_Name {
+ get {
+ return ResourceManager.GetString("UpdateIsInSafezoneAfterPlayerMoved_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Updates the pet command manager on the player object after a pet has been equipped or unequipped..
+ ///
+ public static string UpdatePetCommandManagerOnItemMovePlugIn_Description {
+ get {
+ return ResourceManager.GetString("UpdatePetCommandManagerOnItemMovePlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Update Pet Command Manager On Item Move.
+ ///
+ public static string UpdatePetCommandManagerOnItemMovePlugIn_Name {
+ get {
+ return ResourceManager.GetString("UpdatePetCommandManagerOnItemMovePlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Defines the items which are allowed to be upgraded. If empty, all items are allowed except those in 'disallowed items'..
+ ///
+ public static string UpgradeItemLevelConfiguration_AllowedItems_Description {
+ get {
+ return ResourceManager.GetString("UpgradeItemLevelConfiguration_AllowedItems_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Allowed items.
+ ///
+ public static string UpgradeItemLevelConfiguration_AllowedItems_Name {
+ get {
+ return ResourceManager.GetString("UpgradeItemLevelConfiguration_AllowedItems_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Defines the items which are not allowed to be upgraded..
+ ///
+ public static string UpgradeItemLevelConfiguration_DisallowedItems_Description {
+ get {
+ return ResourceManager.GetString("UpgradeItemLevelConfiguration_DisallowedItems_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Disallowed items.
+ ///
+ public static string UpgradeItemLevelConfiguration_DisallowedItems_Name {
+ get {
+ return ResourceManager.GetString("UpgradeItemLevelConfiguration_DisallowedItems_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to How many times to add a level to the item (will become maximum allowed level)..
+ ///
+ public static string UpgradeItemLevelConfiguration_LevelAmount_Description {
+ get {
+ return ResourceManager.GetString("UpgradeItemLevelConfiguration_LevelAmount_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Add Levels Amount.
+ ///
+ public static string UpgradeItemLevelConfiguration_LevelAmount_Name {
+ get {
+ return ResourceManager.GetString("UpgradeItemLevelConfiguration_LevelAmount_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The maximum item level which the item has to have before applying the jewel..
+ ///
+ public static string UpgradeItemLevelConfiguration_MaximumLevel_Description {
+ get {
+ return ResourceManager.GetString("UpgradeItemLevelConfiguration_MaximumLevel_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Item Maximum Level.
+ ///
+ public static string UpgradeItemLevelConfiguration_MaximumLevel_Name {
+ get {
+ return ResourceManager.GetString("UpgradeItemLevelConfiguration_MaximumLevel_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The minimum item level which the item has to have before applying the jewel..
+ ///
+ public static string UpgradeItemLevelConfiguration_MinimumLevel_Description {
+ get {
+ return ResourceManager.GetString("UpgradeItemLevelConfiguration_MinimumLevel_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Item Minimum Level.
+ ///
+ public static string UpgradeItemLevelConfiguration_MinimumLevel_Name {
+ get {
+ return ResourceManager.GetString("UpgradeItemLevelConfiguration_MinimumLevel_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The item level after which the item will drop to level 0 when it fails..
+ ///
+ public static string UpgradeItemLevelConfiguration_ResetToLevel0WhenFailMinLevel_Description {
+ get {
+ return ResourceManager.GetString("UpgradeItemLevelConfiguration_ResetToLevel0WhenFailMinLevel_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Fail To 0 min. Level.
+ ///
+ public static string UpgradeItemLevelConfiguration_ResetToLevel0WhenFailMinLevel_Name {
+ get {
+ return ResourceManager.GetString("UpgradeItemLevelConfiguration_ResetToLevel0WhenFailMinLevel_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The additional success rate, when the item has luck option..
+ ///
+ public static string UpgradeItemLevelConfiguration_SuccessRateBonusWithLuckPercentage_Description {
+ get {
+ return ResourceManager.GetString("UpgradeItemLevelConfiguration_SuccessRateBonusWithLuckPercentage_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Success Rate Luck Bonus %.
+ ///
+ public static string UpgradeItemLevelConfiguration_SuccessRateBonusWithLuckPercentage_Name {
+ get {
+ return ResourceManager.GetString("UpgradeItemLevelConfiguration_SuccessRateBonusWithLuckPercentage_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The success rate percentage for the item level upgrade..
+ ///
+ public static string UpgradeItemLevelConfiguration_SuccessRatePercentage_Description {
+ get {
+ return ResourceManager.GetString("UpgradeItemLevelConfiguration_SuccessRatePercentage_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Success Rate %.
+ ///
+ public static string UpgradeItemLevelConfiguration_SuccessRatePercentage_Name {
+ get {
+ return ResourceManager.GetString("UpgradeItemLevelConfiguration_SuccessRatePercentage_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the chat command '/walkmonster <id> <x> <y>'. Walks a previously created monster which can be remote controlled by the GM..
+ ///
+ public static string WalkMonsterChatCommand_Description {
+ get {
+ return ResourceManager.GetString("WalkMonsterChatCommand_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Walk remote monster chat command.
+ ///
+ public static string WalkMonsterChatCommand_Name {
+ get {
+ return ResourceManager.GetString("WalkMonsterChatCommand_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Maximum spawn duration.
+ ///
+ public static string WanderingMerchantsConfiguration_MaximumSpawnDuration_Name {
+ get {
+ return ResourceManager.GetString("WanderingMerchantsConfiguration_MaximumSpawnDuration_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Minimum spawn duration.
+ ///
+ public static string WanderingMerchantsConfiguration_MinimumSpawnDuration_Name {
+ get {
+ return ResourceManager.GetString("WanderingMerchantsConfiguration_MinimumSpawnDuration_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to This plugins spawns and moves the wandering merchants..
+ ///
+ public static string WanderingMerchantsPlugIn_Description {
+ get {
+ return ResourceManager.GetString("WanderingMerchantsPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Wandering Merchants.
+ ///
+ public static string WanderingMerchantsPlugIn_Name {
+ get {
+ return ResourceManager.GetString("WanderingMerchantsPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Updates the state of the weather of each hosted map in a random way..
+ ///
+ public static string WeatherUpdatePlugIn_Description {
+ get {
+ return ResourceManager.GetString("WeatherUpdatePlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Weather Update.
+ ///
+ public static string WeatherUpdatePlugIn_Name {
+ get {
+ return ResourceManager.GetString("WeatherUpdatePlugIn_Name", resourceCulture);
+ }
+ }
+ }
+}
diff --git a/src/GameLogic/Properties/PlugInResources.resx b/src/GameLogic/Properties/PlugInResources.resx
new file mode 100644
index 000000000..cd9958fe4
--- /dev/null
+++ b/src/GameLogic/Properties/PlugInResources.resx
@@ -0,0 +1,1131 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+ MU Helper Feature
+
+
+ Provides configuration for the MU Helper feature.
+
+
+ Update Pet Command Manager On Item Move
+
+
+ Updates the pet command manager on the player object after a pet has been equipped or unequipped.
+
+
+ Guild soccer kill score
+
+
+ This plugin increases the score of the soccer result, if a kill occurred.
+
+
+ Periodic Save Progress
+
+
+ Saves the progress of players periodically when their status is 'EnteredWorld'.
+
+
+ Player exp loss after death
+
+
+ This plugin decreases the experience after the player has been killed by a monster.
+
+
+ Count killed quest monsters
+
+
+ This plugin increases the monster kill count of the quest state of active quests.
+
+
+ Self Defense
+
+
+ Updates the state of the self defense system.
+
+
+ Show Message To All When Player Entered World
+
+
+ Shows a message to all players when a player enters the game.
+
+
+ UpdateIsInSafezoneAfterPlayerMoved
+
+
+ Updates the attribute if a player is located in the safezone. For example, this activates the automatic health and shield recover.
+
+
+ Weather Update
+
+
+ Updates the state of the weather of each hosted map in a random way.
+
+
+ GatekeeperNpcPlugin
+
+
+ Handle Gatekeeper NPC Request
+
+
+ ResetCharacterNpcPlugin
+
+
+ Handle Reset Character NPC Request
+
+
+ Reset chat command
+
+
+ Handles the chat command '/reset'.
+
+
+ Reset Feature
+
+
+ Provides configuration for the reset feature.
+
+
+ End Duel When Leaving Duel Map
+
+
+ Ends the duel when one of the duelists leaves the duel map. If a spectator leaves the duel map, it's removed from the spectator list, too.
+
+
+ Update Duel Score
+
+
+ This plugin increases the score of the duel, when a kill occurred.
+
+
+ Alcohol Consume Handler
+
+
+ Plugin which handles the alcohol consumption.
+
+
+ Antidote Consume Handler
+
+
+ Plugin which handles the antidote consumption.
+
+
+ Apple Consume Handler
+
+
+ Plugin which handles the apple consumption.
+
+
+ Bless Jewel Consume Handler
+
+
+ Plugin which handles the jewel of bless consumption.
+
+
+ Fruit Consume Handler
+
+
+ Plugin which handles the fruit consumption.
+
+
+ Harmony Jewel Consume Handler
+
+
+ Plugin which handles the jewel of harmony consumption.
+
+
+ Higher Refine Stone Consume Handler
+
+
+ Plugin which handles the higher refine stone consumption.
+
+
+ Large Complex Potion Consume Handler
+
+
+ Plugin which handles the large complex potion consumption.
+
+
+ Large Health Potion Consume Handler
+
+
+ Plugin which handles the large health potion consumption.
+
+
+ LargeManaPotionConsumeHandler
+
+
+ Plugin which handles the large mana potion consumption.
+
+
+ Large Shield Potion Consume Handler
+
+
+ Plugin which handles the large shield potion consumption.
+
+
+ Life Jewel Consume Handler
+
+
+ Plugin which handles the jewel of life consumption.
+
+
+ Lower Refine Stone Consume Handler
+
+
+ Plugin which handles the lower refine stone consumption.
+
+
+ Medium Complex Potion Consume Handler
+
+
+ Plugin which handles the medium complex potion consumption.
+
+
+ Medium Health Potion Consume Handler
+
+
+ Plugin which handles the medium health potion consumption.
+
+
+ MediumManaPotionConsumeHandler
+
+
+ Plugin which handles the medium mana potion consumption.
+
+
+ Medium Shield Potion Consume Handler
+
+
+ Plugin which handles the medium shield potion consumption.
+
+
+ Siege Potion Consume Handler
+
+
+ Plugin which handles the siege potion consumption.
+
+
+ Small Complex Potion Consume Handler
+
+
+ Plugin which handles the small complex potion consumption.
+
+
+ Small Health Potion Consume Handler
+
+
+ Plugin which handles the small health potion consumption.
+
+
+ SmallManaPotionConsumeHandler
+
+
+ Plugin which handles the small mana potion consumption.
+
+
+ Small Shield Potion Consume Handler
+
+
+ Plugin which handles the small shield potion consumption.
+
+
+ Soul Jewel Consume Handler
+
+
+ Plugin which handles the jewel of soul consumption.
+
+
+ Summoning Orb Consume Handler
+
+
+ Plugin which handles the summoning orb consumption.
+
+
+ Town Portal Scroll Consume Handler
+
+
+ Plugin which handles the town portal scroll consumption.
+
+
+ Chain Lightning Skill
+
+
+ Handles the chain lightning skill of the summoner class. Additionally to the attacked target, it will hit up to two additional targets.
+
+
+ Drain Life Skill
+
+
+ Handles the drain life skill of the summoner class. Additionally to the attacked target, it regains life for damage dealt.
+
+
+ Earth shake skill
+
+
+ Handles the earth shake skill of the dark horse. Pushes the targets away from the attacker.
+
+
+ ForceSkillAction
+
+
+ Handles the force skill of the dark lord.
+
+
+ ForceWaveStrengSkillAction
+
+
+ Handles the force wave strengthener skill of the dark lord.
+
+
+ NovaSkillStartPlugin
+
+
+ Handles the start of nova skill of the wizard class.
+
+
+ NovaSkillStopPlugin
+
+
+ Handles the stopping of nova skill of the wizard class.
+
+
+ Plasma Storm Skill
+
+
+ Handles the plasma storm skill of the fenrir pet. It randomly halves the durability of a target's equipped item.
+
+
+ SoulBarrierProficieSkillAction
+
+
+ Handles the soul barrier proficiency skill of the grand master.
+
+
+ SoulBarrierStrengSkillAction
+
+
+ Handles the soul barrier strengthener skill of the grand master.
+
+
+ SummonPartySkillPlugin
+
+
+ Handles the summon party skill of the dark lord class.
+
+
+ Add agility chat command
+
+
+ Adds the specified amount of agility points to the character.
+
+
+ Add command chat command
+
+
+ Adds the specified amount of command points to the character.
+
+
+ Add energy chat command
+
+
+ Adds the specified amount of energy points to the character.
+
+
+ Add strength chat command
+
+
+ Adds the specified amount of strength points to the character.
+
+
+ Add vitality chat command
+
+
+ Adds the specified amount of vitality points to the character.
+
+
+ Ban Account command
+
+
+ Handles the chat command '/banacc <acc>'. Bans an account from the game.
+
+
+ Ban Character command
+
+
+ Handles the chat command '/banchar <char>'. Bans the account of a character from the game.
+
+
+ Change language command
+
+
+ Handles the chat command '/language <isoCode>'. Changes the language of the account.
+
+
+ Char Info command
+
+
+ Handles the chat command '/charinfo <char>'. Returns information about the character back to the requester.
+
+
+ Chat Ban Character command
+
+
+ Handles the chat command '/chatban <characterName> <durationMinutes>'. Bans the account of a character from chatting for the specified minutes.
+
+
+ Chat Ban Character command
+
+
+ Handles the chat command '/chatunban <characterName>'. Unbans the account of a character from chatting.
+
+
+ Create monster chat command
+
+
+ Handles the chat command '/createmonster <number> <intelligent>'. Creates a monster which can be remote controlled by the GM.
+
+
+ Disconnect chat command
+
+
+ Handles the chat command '/disconnect <char>'. Disconnects a player from the game server.
+
+
+ Guild battle soccer chat command
+
+
+ Handles the chat command '/battlesoccer <guildname>'. Sends a request to the guild master of the requested guild.
+
+
+ Guild disconnect chat command
+
+
+ Handles the chat command '/guilddisconnect <guild>'. Disconnect the guild members.
+
+
+ Guild move chat command
+
+
+ Handles the chat command '/guildmove <guild> <map> <x?> <y?>'. Move the character from a guild to a specified map and coordinates.
+
+
+ Guild war chat command
+
+
+ Handles the chat command '/war <guild>'. Sends a request to the guild master of the requested guild.
+
+
+ Help command
+
+
+ Handles the /help <command> chat command. Shows information about the requested command.
+
+
+ Hide command
+
+
+ Handles the chat command '/hide'. Hides the own player from others.
+
+
+ Item chat command
+
+
+ Handles the chat command '/item <group> <number> <lvl?> <exc?> <sk?> <lu?> <opt?> <anc?> <ancBonuslvl?>'. Drops a specific item next to the character.
+
+
+ List command
+
+
+ Lists all the commands.
+
+
+ Move chat command
+
+
+ Handles the chat command '/move <target> <mapIdOrName?> <x?> <y?>'. Moves the character to the specified destination.
+
+
+ Move remote monster chat command
+
+
+ Handles the chat command '/movemonster <id> <x> <y>'. Moves a previously created monster which can be remote controlled by the GM.
+
+
+ Notice chat command
+
+
+ Handles the chat command '/goldnotice message'. Sends a global golden notice message to all players of the game.
+
+
+ NPC open merchant chat command
+
+
+ Opens the merchant NPC store.
+
+
+ Online chat command
+
+
+ Handles the chat command '/online'. Gets the count of game masters and players online.
+
+
+ Open Warehouse chat command
+
+
+ Opens the warehouse.
+
+
+ PK chat command
+
+
+ Handles the chat command '/pk <char> <pk_lvl> <pk_count>'. Sets player kill level and count of a character.
+
+
+ PK clear chat command
+
+
+ Handles the chat command '/pkclear <char>'. Clears the player kill count.
+
+
+ Post chat command
+
+
+ Handles the chat command '/post message'. Sends a global blue system message to all players of the game.
+
+
+ Remove npc chat command
+
+
+ Handles the chat command '/removenpc <id>'.
+
+
+ Show fireworks effect chat command
+
+
+ Handles the chat command '/fireworks <x> <y>'. Shows an fireworks effect at the specified coordinates.
+
+
+ Show xmas fireworks effect chat command
+
+
+ Handles the chat command '/xmasfireworks <x> <y>'. Shows an christmas fireworks effect at the specified coordinates.
+
+
+ Skin chat command
+
+
+ Handles the chat command '/skin <number>'. Applies a monster skin to the game masters character.
+
+
+ Start Blood Castle Event Chat Command
+
+
+ Handles the chat command '/startbc'. Starts the blood castle event at the next possible time.
+
+
+ Start Chaos Castle Event Chat Command
+
+
+ Handles the chat command '/startcc'. Starts the chaos castle event at the next possible time.
+
+
+ Start Devil Square Event Chat Command
+
+
+ Handles the chat command '/startds'. Starts the devil square event at the next possible time.
+
+
+ Teleport chat command
+
+
+ Handles the chat command '/teleport <x> <y>'. Teleports the game master to the specified coordinates.
+
+
+ Trace chat command
+
+
+ Handles the chat command '/trace <char>'. Moves the game master to the character's location.
+
+
+ Track chat command
+
+
+ Handles the chat command '/track <char>'. Moves the player to the game masters location.
+
+
+ Unban Account command
+
+
+ Handles the chat command '/unbanacc <acc>'. Unbans an account from the game.
+
+
+ Unban Character command
+
+
+ Handles the chat command '/unbanchar <char>'. Unbans the account of a character from the game.
+
+
+ Hide command
+
+
+ Handles the chat command '/unhide'. Unhides the own player from others.
+
+
+ Walk remote monster chat command
+
+
+ Handles the chat command '/walkmonster <id> <x> <y>'. Walks a previously created monster which can be remote controlled by the GM.
+
+
+ Golden Invasion
+
+
+ Handle Golden Invasion event
+
+
+ Red Dragon Invasion
+
+
+ Handle red dragon invasion event
+
+
+ Happy Hour
+
+
+ Handle Happy Hour event
+
+
+ UnlockDarkLordAtLevel250
+
+
+ Unlocks the Dark Lord character class as soon as the first character of an account reaches level 250.
+
+
+ UnlockMagicGladiatorAtLevel220
+
+
+ Unlocks the Magic Gladiator character class as soon as the first character of an account reaches level 220.
+
+
+ UnlockRageFighterAtLevel150
+
+
+ Unlocks the Rage Fighter character class as soon as the first character of an account reaches level 150.
+
+
+ UnlockSummonerAtLevel1
+
+
+ Unlocks the Summoner character class as soon as the first character of an account reaches level 1.
+
+
+ Wandering Merchants
+
+
+ This plugins spawns and moves the wandering merchants.
+
+
+ Player money loss after death
+
+
+ This plugin decreases the money (zen) after the player has been killed by a monster.
+
+
+ Learnables Consume Handler
+
+
+ Plugin which handles the consumption of items which add skills (e.g. scrolls, orbs).
+
+
+ TargetedSkillDefaultPlugin
+
+
+ Default (catch-all) handler for targeted skills
+
+
+ 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.
+
+
+ Clear Inventory chat command
+
+
+ Clears inventory. Usage: /clearinv (optional:character)
+
+
+ Get level command
+
+
+ Gets level of a player. Usage: /getlevel (optional:character)
+
+
+ Get level up points command
+
+
+ Gets level up points of a player. Usage: /getleveluppoints (optional:character)
+
+
+ Get master level command
+
+
+ Gets master level of a player. Usage: /getmasterlevel (optional:character)
+
+
+ Get master level up points command
+
+
+ Gets master level up points of a player. Usage: /getmasterleveluppoints (optional:character)
+
+
+ Get money command
+
+
+ Gets money of a player. Usage: /getmoney (optional:character)
+
+
+ Get resets command
+
+
+ Gets resets of a player. Usage: /getresets (optional:character)
+
+
+ Get Stat chat command
+
+
+ Get stat points. Usage: /get (ene|agi|vit|str|cmd) (optional:character)
+
+
+ Set level command
+
+
+ Sets level of a player. Usage: /setlevel (level) (optional:character)
+
+
+ Set level up points command
+
+
+ Sets level up points of a player. Usage: /setleveluppoints (points) (optional:character)
+
+
+ Set master level command
+
+
+ Sets master level of a player. Usage: /setmasterlevel (level) (optional:character)
+
+
+ Set master level up points command
+
+
+ Sets master level up points of a player. Usage: /setmasterleveluppoints (points) (optional:character)
+
+
+ Set money command
+
+
+ Sets money of a player. Usage: /setmoney (amount) (optional:character)
+
+
+ Set resets command
+
+
+ Sets resets of a player. Usage: /setresets (resets) (optional:character)
+
+
+ Set Stat chat command
+
+
+ Set stat points. Usage: /set (ene|agi|vit|str|cmd) (amount) (optional:character)
+
+
+ Success Rate %
+
+
+ The success rate percentage for the item level upgrade.
+
+
+ Success Rate Luck Bonus %
+
+
+ The additional success rate, when the item has luck option.
+
+
+ Item Minimum Level
+
+
+ The minimum item level which the item has to have before applying the jewel.
+
+
+ Item Maximum Level
+
+
+ The maximum item level which the item has to have before applying the jewel.
+
+
+ Add Levels Amount
+
+
+ How many times to add a level to the item (will become maximum allowed level).
+
+
+ Fail To 0 min. Level
+
+
+ The item level after which the item will drop to level 0 when it fails.
+
+
+ Allowed items
+
+
+ Defines the items which are allowed to be upgraded. If empty, all items are allowed except those in 'disallowed items'.
+
+
+ Disallowed items
+
+
+ Defines the items which are not allowed to be upgraded.
+
+
+ Money Cost
+
+
+ The money cost to clear inventory (except GMs). Default: 0.
+
+
+ Require Confirmation
+
+
+ If true, the player will need to run the command again within 10 seconds to confirm the inventory clearing (excluding GM).
+
+
+ Confirmation Message
+
+
+ The message to show when the player needs to run the command again within 10 seconds to confirm the inventory clearing.
+
+
+ Not Enough Money Message
+
+
+ The message to show when the player does not have enough money to run the command.
+
+
+ Inventory Cleared Message
+
+
+ The message to show when the inventory is cleared.
+
+
+ NPC ID
+
+
+ The ID of the NPC to open the merchant store. Default: Potion Girl Amy - 253.
+
+
+ Minimum VIP Level
+
+
+ The minimum VIP level to use the command. Default: 0.
+
+
+ Insufficient VIP Level Message
+
+
+ The message to show when the player does not have the required VIP level for this command (excluding GM).
+
+
+ Minimum VIP Level
+
+
+ The minimum VIP level to use the command (excluding GM). Default: 0.
+
+
+ Insufficient VIP Level Message
+
+
+ The message to show when the player does not have the required VIP level for this command (excluding GM).
+
+
+ Show NPC ids chat command
+
+
+ Handles the chat command '/showids'.
+
+
+ Cost per stage
+
+
+ This value is applied per pay interval and multiplied with the total character level.
+
+
+ Pay interval
+
+
+ Stage interval
+
+
+ After each interval, the stage gets increased to the next level with usually increasing costs.
+
+
+ Minimum character level
+
+
+ Maximum character level
+
+
+ Total recover percentage
+
+
+ Recover percentage increase by potion level
+
+
+ Recover delay reduction by potion level
+
+
+ A value between 0 and 1 (exclusive). 1 would mean that the recover works instantly since level 1.
+
+
+ Additional recover minus character level
+
+
+ Defines the value which is additionally recovered. From this value, the character level is subtracted.
+
+
+ Cooldown time
+
+
+ The cooldown time for the next consumption.
+
+
+ Maximum character level
+
+
+ If none are defined, the recover happens instantly.
+
+
+ Self-defense time-out.
+
+
+ Message
+
+
+ Losses per level
+
+
+ Minimum level
+
+
+ Is master
+
+
+ Inventory money loss %
+
+
+ Vault money loss %
+
+
+ Losses per level
+
+
+ Minimum level
+
+
+ Is master
+
+
+ Losses per stage
+
+
+ State
+
+
+ Experience loss %
+
+
+ Save interval
+
+
+ Timetable
+
+
+ Pre-start message delay
+
+
+ Task duration (minimum)
+
+
+ Message
+
+
+ The text which prints as a golden message in the game.
+
+
+ Reset limit
+
+
+ Required level
+
+
+ Level after reset
+
+
+ Required money
+
+
+ Multiply required money by reset count
+
+
+ Reset stats
+
+
+ Points per reset
+
+
+ Multiply points by reset count
+
+
+ Reset points per reset
+
+
+ Move home
+
+
+ Log out
+
+
+ Entrance opened message
+
+
+ Entrance closed message
+
+
+ Experience multiplier
+
+
+ Minimum spawn duration
+
+
+ Maximum spawn duration
+
+
+ [{mapName}] Invasion!
+
+
diff --git a/src/GameLogic/Resets/GatekeeperNpcPlugin.cs b/src/GameLogic/Resets/GatekeeperNpcPlugin.cs
index 03e163a77..fa019e9ef 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(PlugInResources.GatekeeperNpcPlugin_Name), Description = nameof(PlugInResources.GatekeeperNpcPlugin_Description), ResourceType = typeof(PlugInResources))]
public class GatekeeperNpcPlugin : IPlayerTalkToNpcPlugIn
{
///
diff --git a/src/GameLogic/Resets/ResetCharacterAction.cs b/src/GameLogic/Resets/ResetCharacterAction.cs
index 56f6b6312..9623b5643 100644
--- a/src/GameLogic/Resets/ResetCharacterAction.cs
+++ b/src/GameLogic/Resets/ResetCharacterAction.cs
@@ -4,15 +4,12 @@
namespace MUnique.OpenMU.GameLogic.Resets;
-using MUnique.OpenMU.AttributeSystem;
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.Character;
using MUnique.OpenMU.GameLogic.Views.Login;
using MUnique.OpenMU.GameLogic.Views.NPC;
-using MUnique.OpenMU.Interfaces;
///
/// Action to reset a character.
@@ -42,38 +39,38 @@ public async ValueTask ResetCharacterAsync()
var resetFeature = this._player.GameContext.FeaturePlugIns.GetPlugIn();
if (resetFeature is null)
{
- await this.ShowMessageAsync("Reset is not enabled.").ConfigureAwait(false);
+ await this.ShowMessageAsync(nameof(PlayerMessage.ResetNotEnabled)).ConfigureAwait(false);
return;
}
if (this._player.PlayerState.CurrentState != PlayerState.EnteredWorld && this._npc is null)
{
- await this.ShowMessageAsync("Cannot do reset with any windows opened.").ConfigureAwait(false);
+ await this.ShowMessageAsync(nameof(PlayerMessage.CantResetWithOpenedWindows)).ConfigureAwait(false);
return;
}
if (this._player.Attributes is null || this._player.SelectedCharacter is null)
{
- await this.ShowMessageAsync("Not entered the game.").ConfigureAwait(false);
+ await this.ShowMessageAsync(nameof(PlayerMessage.NotEnteredTheGame)).ConfigureAwait(false);
return;
}
var configuration = resetFeature.Configuration;
if (configuration is null)
{
- await this.ShowMessageAsync("Reset is not configured.").ConfigureAwait(false);
+ await this.ShowMessageAsync(nameof(PlayerMessage.ResetNotConfigured)).ConfigureAwait(false);
return;
}
if (this._player.Level < configuration.RequiredLevel)
{
- await this.ShowMessageAsync($"Required level for reset is {configuration.RequiredLevel}.").ConfigureAwait(false);
+ await this.ShowMessageAsync(nameof(PlayerMessage.RequiredLevelForReset), configuration.RequiredLevel).ConfigureAwait(false);
return;
}
if (configuration.ResetLimit > 0 && (this.GetResetCount() + 1) > configuration.ResetLimit)
{
- await this.ShowMessageAsync($"Maximum resets of {configuration.ResetLimit} reached.").ConfigureAwait(false);
+ await this.ShowMessageAsync(nameof(PlayerMessage.MaximumResetsReached), configuration.ResetLimit).ConfigureAwait(false);
return;
}
@@ -101,16 +98,17 @@ public async ValueTask ResetCharacterAsync()
}
}
- private ValueTask ShowMessageAsync(string message)
+ private async ValueTask ShowMessageAsync(string messageKey, params object?[] args)
{
+ var message = this._player.GetLocalizedMessage(messageKey, args);
+
if (this._npc is null)
{
- return this._player.InvokeViewPlugInAsync(p => p.ShowMessageAsync(message, MessageType.BlueNormal));
- }
- else
- {
- return this._player.InvokeViewPlugInAsync(p => p.ShowMessageOfObjectAsync(message, this._npc));
+ await this._player.ShowBlueMessageAsync(message).ConfigureAwait(false);
+ return;
}
+
+ await this._player.InvokeViewPlugInAsync(p => p.ShowMessageOfObjectAsync(message, this._npc)).ConfigureAwait(false);
}
private int GetResetCount()
diff --git a/src/GameLogic/Resets/ResetCharacterNpcPlugin.cs b/src/GameLogic/Resets/ResetCharacterNpcPlugin.cs
index 0457b5881..550887501 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(PlugInResources.ResetCharacterNpcPlugin_Name), Description = nameof(PlugInResources.ResetCharacterNpcPlugin_Description), ResourceType = typeof(PlugInResources))]
public class ResetCharacterNpcPlugin : IPlayerTalkToNpcPlugIn
{
///
diff --git a/src/GameLogic/Resets/ResetChatCommandPlugIn.cs b/src/GameLogic/Resets/ResetChatCommandPlugIn.cs
index 905436e29..1cc9a30b0 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 = nameof(PlugInResources.ResetChatCommandPlugIn_Name), Description = nameof(PlugInResources.ResetChatCommandPlugIn_Description), ResourceType = typeof(PlugInResources))]
[ChatCommandHelp(Command, "Does a character reset, if available.", null)]
public class ResetChatCommandPlugIn : IChatCommandPlugIn
{
diff --git a/src/GameLogic/Resets/ResetConfiguration.cs b/src/GameLogic/Resets/ResetConfiguration.cs
index 04f3f2fe7..699acaddf 100644
--- a/src/GameLogic/Resets/ResetConfiguration.cs
+++ b/src/GameLogic/Resets/ResetConfiguration.cs
@@ -12,56 +12,67 @@ public class ResetConfiguration
///
/// Gets or sets the reset limit, which is the maximum amount of possible resets.
///
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.ResetConfiguration_ResetLimit_Name))]
public int? ResetLimit { get; set; }
///
/// Gets or sets the required level for a reset.
///
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.ResetConfiguration_RequiredLevel_Name))]
public int RequiredLevel { get; set; } = 400;
///
/// Gets or sets the character level after a reset.
///
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.ResetConfiguration_LevelAfterReset_Name))]
public int LevelAfterReset { get; set; } = 10;
///
/// Gets or sets the required money for a reset.
///
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.ResetConfiguration_RequiredMoney_Name))]
public int RequiredMoney { get; set; } = 1;
///
/// Gets or sets a value indicating whether the required money should
/// be multiplied with the current reset count.
///
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.ResetConfiguration_MultiplyRequiredMoneyByResetCount_Name))]
public bool MultiplyRequiredMoneyByResetCount { get; set; } = true;
///
/// Gets or sets a value indicating whether a reset sets the stat points back to the initial values.
///
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.ResetConfiguration_ResetStats_Name))]
public bool ResetStats { get; set; } = true;
///
/// Gets or sets the amount of points which will be set at the when doing a reset.
///
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.ResetConfiguration_PointsPerReset_Name))]
public int PointsPerReset { get; set; } = 1500;
///
/// Gets or sets a value indicating whether the should be multiplied with the current reset count.
///
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.ResetConfiguration_MultiplyPointsByResetCount_Name))]
public bool MultiplyPointsByResetCount { get; set; } = true;
///
/// Gets or sets a value indicating whether a reset will replace (true) or add (false) the .
///
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.ResetConfiguration_ReplacePointsPerReset_Name))]
public bool ReplacePointsPerReset { get; set; } = true;
///
/// Gets or sets a value indicating whether a reset moves the player home.
///
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.ResetConfiguration_MoveHome_Name))]
public bool MoveHome { get; set; } = true;
///
/// Gets or sets a value indicating whether a reset logs the player out back to character selection.
///
+ [Display(ResourceType = typeof(PlugInResources), Name = nameof(PlugInResources.ResetConfiguration_LogOut_Name))]
public bool LogOut { get; set; } = true;
}
\ No newline at end of file
diff --git a/src/GameLogic/Resets/ResetFeaturePlugIn.cs b/src/GameLogic/Resets/ResetFeaturePlugIn.cs
index c899af266..1d3b40ecf 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 = nameof(PlugInResources.ResetFeaturePlugIn_Name), Description = nameof(PlugInResources.ResetFeaturePlugIn_Description), ResourceType = typeof(PlugInResources))]
[Guid("6A9D585D-79D7-4674-B6EA-7E87392FA501")]
public class ResetFeaturePlugIn : IFeaturePlugIn, ISupportCustomConfiguration, ISupportDefaultCustomConfiguration, IDisabledByDefault
{
diff --git a/src/GameLogic/Views/IShowMessagePlugIn.cs b/src/GameLogic/Views/IShowMessagePlugIn.cs
index e65c6755b..d2e08e484 100644
--- a/src/GameLogic/Views/IShowMessagePlugIn.cs
+++ b/src/GameLogic/Views/IShowMessagePlugIn.cs
@@ -8,6 +8,7 @@ namespace MUnique.OpenMU.GameLogic.Views;
///
/// Interface of a view whose implementation informs about a shown message.
+/// TODO: Offer to pass LocalizedString and formatting parameters.
///
public interface IShowMessagePlugIn : IViewPlugIn
{
diff --git a/src/GameServer/GameServer.cs b/src/GameServer/GameServer.cs
index 5c84dc521..17403d52a 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;
@@ -270,7 +270,7 @@ public async ValueTask DisconnectPlayerAsync(string playerName)
var player = this._gameContext.GetPlayerByCharacterName(playerName);
if (player != null)
{
- await player.InvokeViewPlugInAsync(p => p.ShowMessageAsync("You got disconnected by a game master.", MessageType.BlueNormal)).ConfigureAwait(false);
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.DisconnectedByGameMaster)).ConfigureAwait(false);
await player.DisconnectAsync().ConfigureAwait(false);
return true;
}
@@ -285,7 +285,7 @@ public async ValueTask DisconnectAccountAsync(string accountName)
var player = players.FirstOrDefault(p => p.Account?.LoginName == accountName);
if (player != null)
{
- await player.InvokeViewPlugInAsync(p => p.ShowMessageAsync("You got disconnected by an administrator.", MessageType.BlueNormal)).ConfigureAwait(false);
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.DisconnectedByAdmin)).ConfigureAwait(false);
await player.DisconnectAsync().ConfigureAwait(false);
return true;
}
@@ -300,7 +300,7 @@ public async ValueTask BanPlayerAsync(string playerName)
if (player?.Account is not null)
{
player.Account.State = AccountState.TemporarilyBanned;
- await player.InvokeViewPlugInAsync(p => p.ShowMessageAsync("Your account has been temporarily banned by a game master.", MessageType.BlueNormal)).ConfigureAwait(false);
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.TemporaryBanByGameMaster)).ConfigureAwait(false);
await player.DisconnectAsync().ConfigureAwait(false);
return true;
}
@@ -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.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.LoginAttemptWarning)).ConfigureAwait(false);
}
}
diff --git a/src/GameServer/GlobalUsings.cs b/src/GameServer/GlobalUsings.cs
new file mode 100644
index 000000000..11086ebcd
--- /dev/null
+++ b/src/GameServer/GlobalUsings.cs
@@ -0,0 +1,8 @@
+//
+// 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 MUnique.OpenMU.GameServer.Properties;
diff --git a/src/GameServer/MUnique.OpenMU.GameServer.csproj b/src/GameServer/MUnique.OpenMU.GameServer.csproj
index ae6d8b41e..669abfa98 100644
--- a/src/GameServer/MUnique.OpenMU.GameServer.csproj
+++ b/src/GameServer/MUnique.OpenMU.GameServer.csproj
@@ -29,4 +29,19 @@
+
+
+ True
+ True
+ PlugInResources.resx
+
+
+
+
+
+ PublicResXFileCodeGenerator
+ PlugInResources.Designer.cs
+
+
+
diff --git a/src/GameServer/MessageHandler/AnimationHandlerPlugIn.cs b/src/GameServer/MessageHandler/AnimationHandlerPlugIn.cs
index 70821e99c..491caf8f8 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 = nameof(PlugInResources.AnimationHandlerPlugIn_Name), Description = nameof(PlugInResources.AnimationHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..37c22e991 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(PlugInResources.AreaSkillAttackHandlerPlugIn_Name), Description = nameof(PlugInResources.AreaSkillAttackHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..d371c2167 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(PlugInResources.AreaSkillAttackHandlerPlugIn075_Name), Description = nameof(PlugInResources.AreaSkillAttackHandlerPlugIn075_Description), ResourceType = typeof(PlugInResources))]
[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..8fa5e98af 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(PlugInResources.AreaSkillAttackHandlerPlugIn095_Name), Description = nameof(PlugInResources.AreaSkillAttackHandlerPlugIn095_Description), ResourceType = typeof(PlugInResources))]
[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..b2c86026b 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 = nameof(PlugInResources.AreaSkillHitHandlerPlugIn_Name), Description = nameof(PlugInResources.AreaSkillHitHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..3f8670206 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(PlugInResources.AreaSkillHitHandlerPlugIn075_Name), Description = nameof(PlugInResources.AreaSkillHitHandlerPlugIn075_Description), ResourceType = typeof(PlugInResources))]
[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..7ef9586e1 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(PlugInResources.AreaSkillHitHandlerPlugIn095_Name), Description = nameof(PlugInResources.AreaSkillHitHandlerPlugIn095_Description), ResourceType = typeof(PlugInResources))]
[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..88eea6f90 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 = nameof(PlugInResources.CharacterAddMasterPointPacketHandlerPlugIn_Name), Description = nameof(PlugInResources.CharacterAddMasterPointPacketHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..9ca62caa2 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 = nameof(PlugInResources.CharacterClientReadyPacketHandlerPlugIn_Name), Description = nameof(PlugInResources.CharacterClientReadyPacketHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..739b59290 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 = nameof(PlugInResources.CharacterCreatePacketHandlerPlugIn_Name), Description = nameof(PlugInResources.CharacterCreatePacketHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..9406f6668 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 = nameof(PlugInResources.CharacterDeletePacketHandlerPlugIn_Name), Description = nameof(PlugInResources.CharacterDeletePacketHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..3e35bcb76 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 = nameof(PlugInResources.CharacterFocusPacketHandlerPlugIn_Name), Description = nameof(PlugInResources.CharacterFocusPacketHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..d3273f15e 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 = nameof(PlugInResources.CharacterGroupHandlerPlugIn_Name), Description = nameof(PlugInResources.CharacterGroupHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..19cf558cb 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 = nameof(PlugInResources.CharacterKeyConfigurationPacketHandlerPlugIn_Name), Description = nameof(PlugInResources.CharacterKeyConfigurationPacketHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..385dac00f 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 = nameof(PlugInResources.CharacterListRequestPacketHandlerPlugIn_Name), Description = nameof(PlugInResources.CharacterListRequestPacketHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..ba19fab1e 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 = nameof(PlugInResources.CharacterSelectPacketHandlerPlugIn_Name), Description = nameof(PlugInResources.CharacterSelectPacketHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..8a64664f0 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 = nameof(PlugInResources.CharacterStatIncreasePacketHandlerPlugIn_Name), Description = nameof(PlugInResources.CharacterStatIncreasePacketHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..e19102ccd 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 = nameof(PlugInResources.CharacterMoveHandlerPlugIn_Name), Description = nameof(PlugInResources.CharacterMoveHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..81a3a93fc 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 = nameof(PlugInResources.CharacterMoveHandlerPlugIn075_Name), Description = nameof(PlugInResources.CharacterMoveHandlerPlugIn075_Description), ResourceType = typeof(PlugInResources))]
[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..7fcf5695d 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 = nameof(PlugInResources.CharacterWalkHandlerPlugIn_Name), Description = nameof(PlugInResources.CharacterWalkHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..f53a77738 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 = nameof(PlugInResources.CharacterWalkHandlerPlugIn075_Name), Description = nameof(PlugInResources.CharacterWalkHandlerPlugIn075_Description), ResourceType = typeof(PlugInResources))]
[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..2874a333a 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 = nameof(PlugInResources.ChatMessageHandlerPlugIn_Name), Description = nameof(PlugInResources.ChatMessageHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..d2a375bfe 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 = nameof(PlugInResources.CloseNpcDialogHandlerPlugIn_Name), Description = nameof(PlugInResources.CloseNpcDialogHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..2472b2bb7 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(PlugInResources.CraftingDialogCloseRequestHandlerPlugIn_Name), Description = nameof(PlugInResources.CraftingDialogCloseRequestHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..b91a35f28 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(PlugInResources.DuelChannelJoinRequestHandlerPlugIn_Name), Description = nameof(PlugInResources.DuelChannelJoinRequestHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..880aad519 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(PlugInResources.DuelChannelQuitRequestHandlerPlugIn_Name), Description = nameof(PlugInResources.DuelChannelQuitRequestHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..13be25cef 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(PlugInResources.DuelGroupHandlerPlugIn_Name), Description = nameof(PlugInResources.DuelGroupHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..2f6251248 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(PlugInResources.DuelStartRequestHandlerPlugIn_Name), Description = nameof(PlugInResources.DuelStartRequestHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..fc9b6b298 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(PlugInResources.DuelStartResponseHandlerPlugIn_Name), Description = nameof(PlugInResources.DuelStartResponseHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..466a04774 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(PlugInResources.DuelStopResponseHandlerPlugIn_Name), Description = nameof(PlugInResources.DuelStopResponseHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..55d33613a 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(PlugInResources.EnterOnGatekeeperHandlerPlugIn_Name), Description = nameof(PlugInResources.EnterOnGatekeeperHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..a8e70e897 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(PlugInResources.EnterOnWerewolfHandlerPlugIn_Name), Description = nameof(PlugInResources.EnterOnWerewolfHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..8efaf5cd2 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(PlugInResources.CancelGuildCreationHandlerPlugIn_Name), Description = nameof(PlugInResources.CancelGuildCreationHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..830823973 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(PlugInResources.GuildCreateHandlerPlugIn_Name), Description = nameof(PlugInResources.GuildCreateHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..c21cd6967 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(PlugInResources.GuildCreateHandlerPlugIn075_Name), Description = nameof(PlugInResources.GuildCreateHandlerPlugIn075_Description), ResourceType = typeof(PlugInResources))]
[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..bf031b8a0 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 = nameof(PlugInResources.GuildInfoRequestHandlerPlugIn_Name), Description = nameof(PlugInResources.GuildInfoRequestHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..159d4e934 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 = nameof(PlugInResources.GuildKickPlayerHandlerPlugIn_Name), Description = nameof(PlugInResources.GuildKickPlayerHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..54cc98326 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 = nameof(PlugInResources.GuildListRequestHandlerPlugIn_Name), Description = nameof(PlugInResources.GuildListRequestHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..7282e0117 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 = nameof(PlugInResources.GuildMasterAnswerHandlerPlugIn_Name), Description = nameof(PlugInResources.GuildMasterAnswerHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..61e143faf 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 = nameof(PlugInResources.GuildRequestAnswerHandlerPlugIn_Name), Description = nameof(PlugInResources.GuildRequestAnswerHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..870bfa013 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 = nameof(PlugInResources.GuildRequestHandlerPlugIn_Name), Description = nameof(PlugInResources.GuildRequestHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..46cee75f8 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(PlugInResources.GuildWarResponseHandlerPlugIn_Name), Description = nameof(PlugInResources.GuildWarResponseHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..dd853ba31 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 = nameof(PlugInResources.HitHandlerPlugIn_Name), Description = nameof(PlugInResources.HitHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..d8e8b249c 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 = nameof(PlugInResources.HitHandlerPlugIn075_Name), Description = nameof(PlugInResources.HitHandlerPlugIn075_Description), ResourceType = typeof(PlugInResources))]
[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..5109df161 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 = nameof(PlugInResources.BuyNpcItemHandlerPlugIn_Name), Description = nameof(PlugInResources.BuyNpcItemHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..0437cef17 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(PlugInResources.ChaosMixHandlerPlugIn_Name), Description = nameof(PlugInResources.ChaosMixHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..07d00341a 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(PlugInResources.ConsumeItemHandlerPlugIn_Name), Description = nameof(PlugInResources.ConsumeItemHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..60425dc3b 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(PlugInResources.ConsumeItemHandlerPlugIn075_Name), Description = nameof(PlugInResources.ConsumeItemHandlerPlugIn075_Description), ResourceType = typeof(PlugInResources))]
[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..42c9c680e 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 = nameof(PlugInResources.DropItemHandlerPlugIn_Name), Description = nameof(PlugInResources.DropItemHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..ec675de6e 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(PlugInResources.ItemMoveExtendedHandlerPlugIn_Name), Description = nameof(PlugInResources.ItemMoveExtendedHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..cd024b534 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 = nameof(PlugInResources.ItemMoveHandlerPlugIn_Name), Description = nameof(PlugInResources.ItemMoveHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..74addd90d 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 = nameof(PlugInResources.ItemRepairHandlerPlugIn_Name), Description = nameof(PlugInResources.ItemRepairHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..a02d3387d 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 = nameof(PlugInResources.JewelMixHandlerPlugIn_Name), Description = nameof(PlugInResources.JewelMixHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..31dac6c17 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 = nameof(PlugInResources.PickupItemHandlerPlugIn_Name), Description = nameof(PlugInResources.PickupItemHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..6178893a7 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 = nameof(PlugInResources.PickupItemHandlerPlugIn075_Name), Description = nameof(PlugInResources.PickupItemHandlerPlugIn075_Description), ResourceType = typeof(PlugInResources))]
[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..c6bb05a2e 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 = nameof(PlugInResources.SellItemToNpcHandlerPlugIn_Name), Description = nameof(PlugInResources.SellItemToNpcHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..6960d1b20 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 = nameof(PlugInResources.LogInHandlerPlugIn_Name), Description = nameof(PlugInResources.LogInHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..f7f3c4e86 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 = nameof(PlugInResources.LogInOutGroup_Name), Description = nameof(PlugInResources.LogInOutGroup_Description), ResourceType = typeof(PlugInResources))]
[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..615e31830 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 = nameof(PlugInResources.LogOutByCheatDetectionHandlerPlugIn_Name), Description = nameof(PlugInResources.LogOutByCheatDetectionHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..92be2dbb6 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 = nameof(PlugInResources.LogOutHandlerPlugIn_Name), Description = nameof(PlugInResources.LogOutHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..55bddf8fe 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 = nameof(PlugInResources.AddFriendHandlerPlugIn_Name), Description = nameof(PlugInResources.AddFriendHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..9e52546c6 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 = nameof(PlugInResources.ChangeOnlineStateHandlerPlugIn_Name), Description = nameof(PlugInResources.ChangeOnlineStateHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..551b25150 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 = nameof(PlugInResources.ChatRequestHandlerPlugIn_Name), Description = nameof(PlugInResources.ChatRequestHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..398de709f 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 = nameof(PlugInResources.ChatRoomInvitationRequestPlugIn_Name), Description = nameof(PlugInResources.ChatRoomInvitationRequestPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..3ecc6b694 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 = nameof(PlugInResources.DeleteFriendHandlerPlugIn_Name), Description = nameof(PlugInResources.DeleteFriendHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..b9ff50b83 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 = nameof(PlugInResources.FriendAddResponseHandlerPlugIn_Name), Description = nameof(PlugInResources.FriendAddResponseHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..75075e232 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 = nameof(PlugInResources.LetterDeleteHandlerPlugIn_Name), Description = nameof(PlugInResources.LetterDeleteHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..205a4bb72 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 = nameof(PlugInResources.LetterReadRequestHandlerPlugIn_Name), Description = nameof(PlugInResources.LetterReadRequestHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..8fffdce11 100644
--- a/src/GameServer/MessageHandler/Messenger/LetterSendHandlerPlugIn.cs
+++ b/src/GameServer/MessageHandler/Messenger/LetterSendHandlerPlugIn.cs
@@ -7,16 +7,17 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Messenger;
using System.Runtime.InteropServices;
using MUnique.OpenMU.GameLogic;
using MUnique.OpenMU.GameLogic.PlayerActions.Messenger;
-using MUnique.OpenMU.GameLogic.Views;
+using MUnique.OpenMU.GameLogic.Properties;
using MUnique.OpenMU.GameLogic.Views.Messenger;
-using MUnique.OpenMU.Interfaces;
using MUnique.OpenMU.Network.Packets.ClientToServer;
using MUnique.OpenMU.PlugIns;
+using PlugInResources = MUnique.OpenMU.GameServer.Properties.PlugInResources;
///
/// Handler for letter send packets.
///
-[PlugIn("LetterSendHandlerPlugIn", "Handler for letter send packets.")]
+[PlugIn]
+[Display(Name = nameof(PlugInResources.LetterSendHandlerPlugIn_Name), Description = nameof(PlugInResources.LetterSendHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[Guid("6d10d34d-bd20-4dcf-99eb-569d38ef1c1b")]
internal class LetterSendHandlerPlugIn : IPacketHandlerPlugIn
{
@@ -34,7 +35,7 @@ public async ValueTask HandlePacketAsync(Player player, Memory packet)
LetterSendRequest message = packet;
if (packet.Length < 83)
{
- await player.InvokeViewPlugInAsync(p => p.ShowMessageAsync("Letter invalid.", MessageType.BlueNormal)).ConfigureAwait(false);
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.LetterInvalid)).ConfigureAwait(false);
await player.InvokeViewPlugInAsync(p => p.LetterSendResultAsync(LetterSendSuccess.TryAgain, message.LetterId)).ConfigureAwait(false);
return;
}
diff --git a/src/GameServer/MessageHandler/MiniGames/BloodCastleEnterHandlerPlugIn.cs b/src/GameServer/MessageHandler/MiniGames/BloodCastleEnterHandlerPlugIn.cs
index cf252dfff..2436a9bd6 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(PlugInResources.BloodCastleEnterHandlerPlugIn_Name), Description = nameof(PlugInResources.BloodCastleEnterHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..10ec0a8a8 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(PlugInResources.ChaosCastleEnterHandlerPlugIn_Name), Description = nameof(PlugInResources.ChaosCastleEnterHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..c744d9b34 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(PlugInResources.DevilSquareEnterHandlerPlugIn_Name), Description = nameof(PlugInResources.DevilSquareEnterHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..efd44e290 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(PlugInResources.MiniGameOpeningStateRequestHandlerPlugIn_Name), Description = nameof(PlugInResources.MiniGameOpeningStateRequestHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..742460937 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(PlugInResources.MuHelperGroupHandler_Name), Description = nameof(PlugInResources.MuHelperGroupHandler_Description), ResourceType = typeof(PlugInResources))]
[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..8a0b5d871 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(PlugInResources.MuHelperSaveDataRequestHandlerPlugin_Name), Description = nameof(PlugInResources.MuHelperSaveDataRequestHandlerPlugin_Description), ResourceType = typeof(PlugInResources))]
[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..53679b57e 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(PlugInResources.MuHelperStatusChangeRequestHandlerPlugIn_Name), Description = nameof(PlugInResources.MuHelperStatusChangeRequestHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..31833bc57 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 = nameof(PlugInResources.NpcActionGroupHandlerPlugIn_Name), Description = nameof(PlugInResources.NpcActionGroupHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..e9c43df20 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 = nameof(PlugInResources.PartyKickHandlerPlugIn_Name), Description = nameof(PlugInResources.PartyKickHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..97d3c3246 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 = nameof(PlugInResources.PartyListRequestHandlerPlugIn_Name), Description = nameof(PlugInResources.PartyListRequestHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..b2e53afbb 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 = nameof(PlugInResources.PartyRequestHandlerPlugIn_Name), Description = nameof(PlugInResources.PartyRequestHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..afdcf4db6 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 = nameof(PlugInResources.PartyResponseHandlerPlugIn_Name), Description = nameof(PlugInResources.PartyResponseHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..752856b35 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(PlugInResources.PetCommandRequestHandlerPlugIn_Name), Description = nameof(PlugInResources.PetCommandRequestHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..a4a46b7c2 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(PlugInResources.PetInfoRequestHandlerPlugIn_Name), Description = nameof(PlugInResources.PetInfoRequestHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..c0456573f 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 = nameof(PlugInResources.PlayerShopBuyRequestPacketHandlerPlugIn_Name), Description = nameof(PlugInResources.PlayerShopBuyRequestPacketHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..8d9008049 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 = nameof(PlugInResources.PlayerShopClosePacketHandlerPlugIn_Name), Description = nameof(PlugInResources.PlayerShopClosePacketHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..063a070a3 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 = nameof(PlugInResources.PlayerShopOpenPacketHandlerPlugIn_Name), Description = nameof(PlugInResources.PlayerShopOpenPacketHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..7bfbac756 100644
--- a/src/GameServer/MessageHandler/PlayerShop/PlayerShopRequestItemListPacketHandlerPlugIn.cs
+++ b/src/GameServer/MessageHandler/PlayerShop/PlayerShopRequestItemListPacketHandlerPlugIn.cs
@@ -7,15 +7,16 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.PlayerShop;
using System.Runtime.InteropServices;
using MUnique.OpenMU.GameLogic;
using MUnique.OpenMU.GameLogic.PlayerActions.PlayerStore;
-using MUnique.OpenMU.GameLogic.Views;
-using MUnique.OpenMU.Interfaces;
+using MUnique.OpenMU.GameLogic.Properties;
using MUnique.OpenMU.Network.Packets.ClientToServer;
using MUnique.OpenMU.PlugIns;
+using PlugInResources = MUnique.OpenMU.GameServer.Properties.PlugInResources;
///
/// 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 = nameof(PlugInResources.PlayerShopRequestItemListPacketHandlerPlugIn_Name), Description = nameof(PlugInResources.PlayerShopRequestItemListPacketHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[Guid("5A87AD36-1778-4CA4-AE08-B7BC12135C1B")]
[BelongsToGroup(StoreHandlerGroupPlugIn.GroupKey)]
internal class PlayerShopRequestItemListPacketHandlerPlugIn : ISubPacketHandlerPlugIn
@@ -34,13 +35,13 @@ public async ValueTask HandlePacketAsync(Player player, Memory packet)
PlayerShopItemListRequest message = packet;
if (player.CurrentMap?.GetObject(message.PlayerId) is not Player requestedPlayer)
{
- await player.InvokeViewPlugInAsync(p => p.ShowMessageAsync("Open Store: Player not found.", MessageType.BlueNormal)).ConfigureAwait(false);
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.OpenStorePlayerNotFound)).ConfigureAwait(false);
return;
}
if (message.PlayerName != requestedPlayer.SelectedCharacter?.Name)
{
- await player.InvokeViewPlugInAsync(p => p.ShowMessageAsync("Player Names don't match." + message.PlayerName + "<>" + requestedPlayer.SelectedCharacter?.Name, MessageType.BlueNormal)).ConfigureAwait(false);
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.PlayerNamesDontMatch), message.PlayerName, requestedPlayer.SelectedCharacter?.Name).ConfigureAwait(false);
return;
}
diff --git a/src/GameServer/MessageHandler/PlayerShop/PlayerShopSetItemPricePacketHandlerPlugIn.cs b/src/GameServer/MessageHandler/PlayerShop/PlayerShopSetItemPricePacketHandlerPlugIn.cs
index 49a9114c0..81ea58a02 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 = nameof(PlugInResources.PlayerShopSetItemPricePacketHandlerPlugIn_Name), Description = nameof(PlugInResources.PlayerShopSetItemPricePacketHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..e70b6339d 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 = nameof(PlugInResources.StoreHandlerGroupPlugIn_Name), Description = nameof(PlugInResources.StoreHandlerGroupPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..4f654b004 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 = nameof(PlugInResources.ActiveQuestListRequestHandlerPlugIn_Name), Description = nameof(PlugInResources.ActiveQuestListRequestHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..9b06e7709 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 = nameof(PlugInResources.AvailableQuestsRequestHandlerPlugIn_Name), Description = nameof(PlugInResources.AvailableQuestsRequestHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..63617e490 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 = nameof(PlugInResources.BuffRequestHandlerPlugIn_Name), Description = nameof(PlugInResources.BuffRequestHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..7dc6d4786 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 = nameof(PlugInResources.EventQuestStateRequestHandlerPlugIn_Name), Description = nameof(PlugInResources.EventQuestStateRequestHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..2c39a4b40 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 = nameof(PlugInResources.QuestCancelRequestHandlerPlugIn_Name), Description = nameof(PlugInResources.QuestCancelRequestHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..18a91685b 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 = nameof(PlugInResources.QuestClientActionHandlerPlugIn_Name), Description = nameof(PlugInResources.QuestClientActionHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..a0ebee1ae 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 = nameof(PlugInResources.QuestCompletionRequestHandlerPlugIn_Name), Description = nameof(PlugInResources.QuestCompletionRequestHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..01aaa0593 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 = nameof(PlugInResources.QuestGroupHandlerPlugIn_Name), Description = nameof(PlugInResources.QuestGroupHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..fbb208682 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 = nameof(PlugInResources.QuestProceedRequestHandlerPlugIn_Name), Description = nameof(PlugInResources.QuestProceedRequestHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..fea9b7de9 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 = nameof(PlugInResources.QuestSelectRequestHandlerPlugIn_Name), Description = nameof(PlugInResources.QuestSelectRequestHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..7c7dc654d 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 = nameof(PlugInResources.QuestStateListLegacyRequestHandlerPlugIn_Name), Description = nameof(PlugInResources.QuestStateListLegacyRequestHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..0ad541249 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 = nameof(PlugInResources.QuestStateRequestHandlerPlugIn_Name), Description = nameof(PlugInResources.QuestStateRequestHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..06430eb25 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 = nameof(PlugInResources.QuestStateSetLegacyRequestHandlerPlugIn_Name), Description = nameof(PlugInResources.QuestStateSetLegacyRequestHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..5c4073f43 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(PlugInResources.RageSkillAttackHandlerPlugIn_Name), Description = nameof(PlugInResources.RageSkillAttackHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..35571f16a 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(PlugInResources.RageSkillAttackRequestHandlerPlugIn_Name), Description = nameof(PlugInResources.RageSkillAttackRequestHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..31dab3e1d 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(PlugInResources.TalkNpcHandlerPlugIn_Name), Description = nameof(PlugInResources.TalkNpcHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..68818adce 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(PlugInResources.TalkNpcHandlerPlugIn075_Name), Description = nameof(PlugInResources.TalkNpcHandlerPlugIn075_Description), ResourceType = typeof(PlugInResources))]
[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..628535f67 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 = nameof(PlugInResources.TargetedSkillHandlerPlugIn_Name), Description = nameof(PlugInResources.TargetedSkillHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..af33e6115 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(PlugInResources.TargetedSkillHandlerPlugIn075_Name), Description = nameof(PlugInResources.TargetedSkillHandlerPlugIn075_Description), ResourceType = typeof(PlugInResources))]
[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..842ffe039 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(PlugInResources.TargetedSkillHandlerPlugIn095_Name), Description = nameof(PlugInResources.TargetedSkillHandlerPlugIn095_Description), ResourceType = typeof(PlugInResources))]
[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..51345f28e 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(PlugInResources.TeleportTargetHandlerPlugIn_Name), Description = nameof(PlugInResources.TeleportTargetHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..129db2b8f 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 = nameof(PlugInResources.TradeAcceptHandlerPlugIn_Name), Description = nameof(PlugInResources.TradeAcceptHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..594b5420e 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 = nameof(PlugInResources.TradeButtonHandlerPlugIn_Name), Description = nameof(PlugInResources.TradeButtonHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..ad58681c9 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 = nameof(PlugInResources.TradeCancelHandlerPlugIn_Name), Description = nameof(PlugInResources.TradeCancelHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..1bee846ec 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 = nameof(PlugInResources.TradeMoneyHandlerPlugIn_Name), Description = nameof(PlugInResources.TradeMoneyHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..b9a58970a 100644
--- a/src/GameServer/MessageHandler/Trade/TradeRequestHandlerPlugIn.cs
+++ b/src/GameServer/MessageHandler/Trade/TradeRequestHandlerPlugIn.cs
@@ -7,15 +7,16 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Trade;
using System.Runtime.InteropServices;
using MUnique.OpenMU.GameLogic;
using MUnique.OpenMU.GameLogic.PlayerActions.Trade;
-using MUnique.OpenMU.GameLogic.Views;
-using MUnique.OpenMU.Interfaces;
+using MUnique.OpenMU.GameLogic.Properties;
using MUnique.OpenMU.Network.Packets.ClientToServer;
using MUnique.OpenMU.PlugIns;
+using PlugInResources = MUnique.OpenMU.GameServer.Properties.PlugInResources;
///
/// Handles the trade request packets.
///
-[PlugIn("TradeRequestHandlerPlugIn", "Handles the trade request packets.")]
+[PlugIn]
+[Display(Name = nameof(PlugInResources.TradeRequestHandlerPlugIn_Name), Description = nameof(PlugInResources.TradeRequestHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[Guid("f2b8c4c0-2e9d-4f1f-8c42-76b0312e4021")]
internal class TradeRequestHandlerPlugIn : IPacketHandlerPlugIn
{
@@ -34,7 +35,7 @@ public async ValueTask HandlePacketAsync(Player player, Memory packet)
var partner = await player.GetObservingPlayerWithIdAsync(message.PlayerId).ConfigureAwait(false);
if (partner is null)
{
- await player.InvokeViewPlugInAsync(p => p.ShowMessageAsync("Trade partner not found.", MessageType.BlueNormal)).ConfigureAwait(false);
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.TradePartnerNotFound)).ConfigureAwait(false);
return;
}
diff --git a/src/GameServer/MessageHandler/Vault/RemoveVaultPinPlugIn.cs b/src/GameServer/MessageHandler/Vault/RemoveVaultPinPlugIn.cs
index cad84c8a0..fbe9dff1e 100644
--- a/src/GameServer/MessageHandler/Vault/RemoveVaultPinPlugIn.cs
+++ b/src/GameServer/MessageHandler/Vault/RemoveVaultPinPlugIn.cs
@@ -10,10 +10,12 @@ namespace MUnique.OpenMU.GameServer.MessageHandler.Vault;
using MUnique.OpenMU.Network.Packets.ClientToServer;
using MUnique.OpenMU.PlugIns;
+
///
/// 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 = nameof(PlugInResources.RemoveVaultPinPlugIn_Name), Description = nameof(PlugInResources.RemoveVaultPinPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..e7e8c9b1d 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 = nameof(PlugInResources.SetVaultPinPlugIn_Name), Description = nameof(PlugInResources.SetVaultPinPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..4846212ea 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 = nameof(PlugInResources.UnlockVaultPlugIn_Name), Description = nameof(PlugInResources.UnlockVaultPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..ee0f2b102 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(PlugInResources.VaultCloseHandlerPlugIn_Name), Description = nameof(PlugInResources.VaultCloseHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..0388eaed3 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 = nameof(PlugInResources.VaultLockGroupPlugIn_Name), Description = nameof(PlugInResources.VaultLockGroupPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..a77297a91 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(PlugInResources.VaultMoneyHandlerPlugIn_Name), Description = nameof(PlugInResources.VaultMoneyHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..60ea20f0f 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(PlugInResources.WarpGateHandler075PlugIn_Name), Description = nameof(PlugInResources.WarpGateHandler075PlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..829c74a62 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(PlugInResources.WarpGateHandlerPlugIn_Name), Description = nameof(PlugInResources.WarpGateHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..2b20912d4 100644
--- a/src/GameServer/MessageHandler/WarpHandlerPlugIn.cs
+++ b/src/GameServer/MessageHandler/WarpHandlerPlugIn.cs
@@ -7,16 +7,17 @@ namespace MUnique.OpenMU.GameServer.MessageHandler;
using System.Runtime.InteropServices;
using MUnique.OpenMU.GameLogic;
using MUnique.OpenMU.GameLogic.PlayerActions;
-using MUnique.OpenMU.GameLogic.Views;
-using MUnique.OpenMU.Interfaces;
+using MUnique.OpenMU.GameLogic.Properties;
using MUnique.OpenMU.Network.Packets.ClientToServer;
using MUnique.OpenMU.PlugIns;
+using PlugInResources = MUnique.OpenMU.GameServer.Properties.PlugInResources;
///
/// 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 = nameof(PlugInResources.WarpHandlerPlugIn_Name), Description = nameof(PlugInResources.WarpHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[Guid("3d261a26-4357-4367-b999-703ea936f4e9")]
internal class WarpHandlerPlugIn : IPacketHandlerPlugIn
{
@@ -40,7 +41,7 @@ public async ValueTask HandlePacketAsync(Player player, Memory packet)
}
else
{
- await player.InvokeViewPlugInAsync(p => p.ShowMessageAsync($"Unknown warp index {warpInfoIndex}", MessageType.BlueNormal)).ConfigureAwait(false);
+ await player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.UnknownWarpIndex)).ConfigureAwait(false);
}
}
}
\ No newline at end of file
diff --git a/src/GameServer/MessageHandler/WhisperedChatMessageHandlerPlugIn.cs b/src/GameServer/MessageHandler/WhisperedChatMessageHandlerPlugIn.cs
index 29403ebea..d4e938bd0 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 = nameof(PlugInResources.WhisperedChatMessageHandlerPlugIn_Name), Description = nameof(PlugInResources.WhisperedChatMessageHandlerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[Guid("A81C652C-4DAE-477F-A7D0-328924B8A3FC")]
internal class WhisperedChatMessageHandlerPlugIn : ChatMessageBaseHandlerPlugIn
{
diff --git a/src/GameServer/Properties/PlugInResources.Designer.cs b/src/GameServer/Properties/PlugInResources.Designer.cs
new file mode 100644
index 000000000..c1a7d3571
--- /dev/null
+++ b/src/GameServer/Properties/PlugInResources.Designer.cs
@@ -0,0 +1,6039 @@
+//------------------------------------------------------------------------------
+//
+// 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.GameServer.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", "18.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ public class PlugInResources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal PlugInResources() {
+ }
+
+ ///
+ /// Returns the cached ResourceManager instance used by this class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ 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.GameServer.Properties.PlugInResources", typeof(PlugInResources).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)]
+ public static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Packet handler for character focus packets (0xF3, 0x15 identifier)..
+ ///
+ public static string ActiveQuestListRequestHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ActiveQuestListRequestHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Quest - Request active quests list.
+ ///
+ public static string ActiveQuestListRequestHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ActiveQuestListRequestHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The extended implementation of the IAddExperiencePlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string AddExperienceExtendedPlugIn_Description {
+ get {
+ return ResourceManager.GetString("AddExperienceExtendedPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Add Experience Extended.
+ ///
+ public static string AddExperienceExtendedPlugIn_Name {
+ get {
+ return ResourceManager.GetString("AddExperienceExtendedPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IAddExperiencePlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string AddExperiencePlugIn_Description {
+ get {
+ return ResourceManager.GetString("AddExperiencePlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Add Experience.
+ ///
+ public static string AddExperiencePlugIn_Name {
+ get {
+ return ResourceManager.GetString("AddExperiencePlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for add friend packets..
+ ///
+ public static string AddFriendHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("AddFriendHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Add Friend Handler.
+ ///
+ public static string AddFriendHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("AddFriendHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IAddToLetterListPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string AddToLetterListPlugIn_Description {
+ get {
+ return ResourceManager.GetString("AddToLetterListPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Add To Letter List.
+ ///
+ public static string AddToLetterListPlugIn_Name {
+ get {
+ return ResourceManager.GetString("AddToLetterListPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for animation packets..
+ ///
+ public static string AnimationHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("AnimationHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Animation Handler.
+ ///
+ public static string AnimationHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("AnimationHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The extended implementation of the IAppearanceChangedPlugIn which is forwarding appearance changes of other players to the game client with specific data packets..
+ ///
+ public static string AppearanceChangedExtendedPlugIn_Description {
+ get {
+ return ResourceManager.GetString("AppearanceChangedExtendedPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Appearance Changed Extended.
+ ///
+ public static string AppearanceChangedExtendedPlugIn_Name {
+ get {
+ return ResourceManager.GetString("AppearanceChangedExtendedPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IAppearanceChangedPlugIn which is forwarding appearance changes of other players to the game client with specific data packets..
+ ///
+ public static string AppearanceChangedPlugIn_Description {
+ get {
+ return ResourceManager.GetString("AppearanceChangedPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Appearance changed.
+ ///
+ public static string AppearanceChangedPlugIn_Name {
+ get {
+ return ResourceManager.GetString("AppearanceChangedPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Default serializer for the appearance of a player. It will most likely only work correctly in season 6..
+ ///
+ public static string AppearanceSerializer_Description {
+ get {
+ return ResourceManager.GetString("AppearanceSerializer_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Default appearance serializer.
+ ///
+ public static string AppearanceSerializer_Name {
+ get {
+ return ResourceManager.GetString("AppearanceSerializer_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Serializer for the appearance of a player, compatible with the client of version 0.75..
+ ///
+ public static string AppearanceSerializer075_Description {
+ get {
+ return ResourceManager.GetString("AppearanceSerializer075_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Appearance Serializer 0.75.
+ ///
+ public static string AppearanceSerializer075_Name {
+ get {
+ return ResourceManager.GetString("AppearanceSerializer075_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Serializer for the appearance of a player, compatible with the client of version 0.95.
+ ///
+ public static string AppearanceSerializer095_Description {
+ get {
+ return ResourceManager.GetString("AppearanceSerializer095_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to AppearanceSerializer095.
+ ///
+ public static string AppearanceSerializer095_Name {
+ get {
+ return ResourceManager.GetString("AppearanceSerializer095_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Extended serializer for the appearance of a player..
+ ///
+ public static string AppearanceSerializerExtended_Description {
+ get {
+ return ResourceManager.GetString("AppearanceSerializerExtended_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Extended appearance serializer.
+ ///
+ public static string AppearanceSerializerExtended_Name {
+ get {
+ return ResourceManager.GetString("AppearanceSerializerExtended_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IUpdateVaultMoneyPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ApplyKeyConfigurationPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ApplyKeyConfigurationPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Apply Key Configuration.
+ ///
+ public static string ApplyKeyConfigurationPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ApplyKeyConfigurationPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for area skill attack packets..
+ ///
+ public static string AreaSkillAttackHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("AreaSkillAttackHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Area Skill Attack Handler.
+ ///
+ public static string AreaSkillAttackHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("AreaSkillAttackHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for area skill attack packets for version 0.75.
+ ///
+ public static string AreaSkillAttackHandlerPlugIn075_Description {
+ get {
+ return ResourceManager.GetString("AreaSkillAttackHandlerPlugIn075_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Area Skill Attack Handler (075).
+ ///
+ public static string AreaSkillAttackHandlerPlugIn075_Name {
+ get {
+ return ResourceManager.GetString("AreaSkillAttackHandlerPlugIn075_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for area skill attack packets for version 0.95.
+ ///
+ public static string AreaSkillAttackHandlerPlugIn095_Description {
+ get {
+ return ResourceManager.GetString("AreaSkillAttackHandlerPlugIn095_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Area Skill Attack Handler (095).
+ ///
+ public static string AreaSkillAttackHandlerPlugIn095_Name {
+ get {
+ return ResourceManager.GetString("AreaSkillAttackHandlerPlugIn095_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for area skill hit packets..
+ ///
+ public static string AreaSkillHitHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("AreaSkillHitHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Area Skill Hit Handler.
+ ///
+ public static string AreaSkillHitHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("AreaSkillHitHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for area skill hit packets..
+ ///
+ public static string AreaSkillHitHandlerPlugIn075_Description {
+ get {
+ return ResourceManager.GetString("AreaSkillHitHandlerPlugIn075_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Area Skill Hit Handler (075).
+ ///
+ public static string AreaSkillHitHandlerPlugIn075_Name {
+ get {
+ return ResourceManager.GetString("AreaSkillHitHandlerPlugIn075_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for area skill hit packets..
+ ///
+ public static string AreaSkillHitHandlerPlugIn095_Description {
+ get {
+ return ResourceManager.GetString("AreaSkillHitHandlerPlugIn095_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Area Skill Hit Handler (095).
+ ///
+ public static string AreaSkillHitHandlerPlugIn095_Name {
+ get {
+ return ResourceManager.GetString("AreaSkillHitHandlerPlugIn095_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IAssignPlayersToGuildPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string AssignPlayersToGuildPlugIn_Description {
+ get {
+ return ResourceManager.GetString("AssignPlayersToGuildPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Assign Players To Guild.
+ ///
+ public static string AssignPlayersToGuildPlugIn_Name {
+ get {
+ return ResourceManager.GetString("AssignPlayersToGuildPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IAssignPlayersToGuildPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string AssignPlayersToGuildPlugIn075_Description {
+ get {
+ return ResourceManager.GetString("AssignPlayersToGuildPlugIn075_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Assign Players To Guild (075).
+ ///
+ public static string AssignPlayersToGuildPlugIn075_Name {
+ get {
+ return ResourceManager.GetString("AssignPlayersToGuildPlugIn075_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Packet handler for available quest request packets (0xF6, 0x30 identifier).
+ ///
+ public static string AvailableQuestsRequestHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("AvailableQuestsRequestHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Quest - Request available quests.
+ ///
+ public static string AvailableQuestsRequestHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("AvailableQuestsRequestHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for blood castle enter request packets..
+ ///
+ public static string BloodCastleEnterHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("BloodCastleEnterHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Blood Castle Enter Handler.
+ ///
+ public static string BloodCastleEnterHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("BloodCastleEnterHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IBloodCastleScoreTableViewPlugin which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string BloodCastleScoreTableViewPlugin_Description {
+ get {
+ return ResourceManager.GetString("BloodCastleScoreTableViewPlugin_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to BloodCastleScoreTableViewPlugin.
+ ///
+ public static string BloodCastleScoreTableViewPlugin_Name {
+ get {
+ return ResourceManager.GetString("BloodCastleScoreTableViewPlugin_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IBloodCastleStateViewPlugin which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string BloodCastleStateViewPlugIn_Description {
+ get {
+ return ResourceManager.GetString("BloodCastleStateViewPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Blood Castle State View.
+ ///
+ public static string BloodCastleStateViewPlugIn_Name {
+ get {
+ return ResourceManager.GetString("BloodCastleStateViewPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Packet handler for (elf soldier) buff request packets (0xF6, 0x31 identifier).
+ ///
+ public static string BuffRequestHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("BuffRequestHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Quest - Request available quests.
+ ///
+ public static string BuffRequestHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("BuffRequestHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IBuyNpcItemFailedPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string BuyNpcItemFailedPlugIn_Description {
+ get {
+ return ResourceManager.GetString("BuyNpcItemFailedPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Buy Npc Item Failed.
+ ///
+ public static string BuyNpcItemFailedPlugIn_Name {
+ get {
+ return ResourceManager.GetString("BuyNpcItemFailedPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for npc item buy requests..
+ ///
+ public static string BuyNpcItemHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("BuyNpcItemHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Buy Npc Item Handler.
+ ///
+ public static string BuyNpcItemHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("BuyNpcItemHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for CancelGuildCreation packets..
+ ///
+ public static string CancelGuildCreationHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("CancelGuildCreationHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Cancel Guild Creation Handler.
+ ///
+ public static string CancelGuildCreationHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("CancelGuildCreationHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for online state change packets..
+ ///
+ public static string ChangeOnlineStateHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ChangeOnlineStateHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Change Online State Handler.
+ ///
+ public static string ChangeOnlineStateHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ChangeOnlineStateHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IChangeTerrainAttributesViewPlugin which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ChangeTerrainAttributesViewPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ChangeTerrainAttributesViewPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Change Terrain Attributes View.
+ ///
+ public static string ChangeTerrainAttributesViewPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ChangeTerrainAttributesViewPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IChangeTradeButtonStatePlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ChangeTradeButtonStatePlugIn_Description {
+ get {
+ return ResourceManager.GetString("ChangeTradeButtonStatePlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Change Trade Button State.
+ ///
+ public static string ChangeTradeButtonStatePlugIn_Name {
+ get {
+ return ResourceManager.GetString("ChangeTradeButtonStatePlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for chaos castle enter request packets..
+ ///
+ public static string ChaosCastleEnterHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ChaosCastleEnterHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Chaos Castle Enter Handler.
+ ///
+ public static string ChaosCastleEnterHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ChaosCastleEnterHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IChaosCastleStateViewPlugin which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ChaosCastleStateViewPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ChaosCastleStateViewPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Chaos Castle State View.
+ ///
+ public static string ChaosCastleStateViewPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ChaosCastleStateViewPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for chaos mix packets..
+ ///
+ public static string ChaosMixHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ChaosMixHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Chaos Mix Handler.
+ ///
+ public static string ChaosMixHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ChaosMixHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Packet handler for character master skill point adding (0xF3, 0x52 identifier)..
+ ///
+ public static string CharacterAddMasterPointPacketHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("CharacterAddMasterPointPacketHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Character - Add Master Skill Points.
+ ///
+ public static string CharacterAddMasterPointPacketHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("CharacterAddMasterPointPacketHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Packet handler for 'client ready' packets (0xF3, 0x12 identifier) which are sent after map changes..
+ ///
+ public static string CharacterClientReadyPacketHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("CharacterClientReadyPacketHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Character - Client ready.
+ ///
+ public static string CharacterClientReadyPacketHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("CharacterClientReadyPacketHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Packet handler for character creation packets (0xF3, 0x01 identifier)..
+ ///
+ public static string CharacterCreatePacketHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("CharacterCreatePacketHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Character - Create.
+ ///
+ public static string CharacterCreatePacketHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("CharacterCreatePacketHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Packet handler for character delete packets (0xF3, 0x02 identifier)..
+ ///
+ public static string CharacterDeletePacketHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("CharacterDeletePacketHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Character - Delete.
+ ///
+ public static string CharacterDeletePacketHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("CharacterDeletePacketHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the ICharacterFocusedPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string CharacterFocusedPlugIn_Description {
+ get {
+ return ResourceManager.GetString("CharacterFocusedPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Character Focused.
+ ///
+ public static string CharacterFocusedPlugIn_Name {
+ get {
+ return ResourceManager.GetString("CharacterFocusedPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Packet handler for character focus packets (0xF3, 0x15 identifier)..
+ ///
+ public static string CharacterFocusPacketHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("CharacterFocusPacketHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Character - Focus.
+ ///
+ public static string CharacterFocusPacketHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("CharacterFocusPacketHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Packet handler for character packets (0xF3 identifier)..
+ ///
+ public static string CharacterGroupHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("CharacterGroupHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Character Packet Handler.
+ ///
+ public static string CharacterGroupHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("CharacterGroupHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Packet handler for character key configuration packets (0xF3, 0x30 identifier)..
+ ///
+ public static string CharacterKeyConfigurationPacketHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("CharacterKeyConfigurationPacketHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Character - Key Configuration.
+ ///
+ public static string CharacterKeyConfigurationPacketHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("CharacterKeyConfigurationPacketHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Packet handler for character list request packets (0xF3, 0x00 identifier)..
+ ///
+ public static string CharacterListRequestPacketHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("CharacterListRequestPacketHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Character - Request List.
+ ///
+ public static string CharacterListRequestPacketHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("CharacterListRequestPacketHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Packet handler for walk packets..
+ ///
+ public static string CharacterMoveHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("CharacterMoveHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Character move handler (ENG).
+ ///
+ public static string CharacterMoveHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("CharacterMoveHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Packet handler for move packets, version 0.75..
+ ///
+ public static string CharacterMoveHandlerPlugIn075_Description {
+ get {
+ return ResourceManager.GetString("CharacterMoveHandlerPlugIn075_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Character move handler (0.75).
+ ///
+ public static string CharacterMoveHandlerPlugIn075_Name {
+ get {
+ return ResourceManager.GetString("CharacterMoveHandlerPlugIn075_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Packet handler for character select packets (0xF3, 0x03 identifier)..
+ ///
+ public static string CharacterSelectPacketHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("CharacterSelectPacketHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Character - Select.
+ ///
+ public static string CharacterSelectPacketHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("CharacterSelectPacketHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Packet handler for character stat increase packets (0xF3, 0x06 identifier)..
+ ///
+ public static string CharacterStatIncreasePacketHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("CharacterStatIncreasePacketHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Character - Stat increase .
+ ///
+ public static string CharacterStatIncreasePacketHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("CharacterStatIncreasePacketHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Packet handler for walk packets..
+ ///
+ public static string CharacterWalkHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("CharacterWalkHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Character walk handler.
+ ///
+ public static string CharacterWalkHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("CharacterWalkHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Packet handler for walk packets..
+ ///
+ public static string CharacterWalkHandlerPlugIn075_Description {
+ get {
+ return ResourceManager.GetString("CharacterWalkHandlerPlugIn075_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Character walk handler.
+ ///
+ public static string CharacterWalkHandlerPlugIn075_Name {
+ get {
+ return ResourceManager.GetString("CharacterWalkHandlerPlugIn075_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Packet handler for chat messages..
+ ///
+ public static string ChatMessageHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ChatMessageHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Chat Message Handler.
+ ///
+ public static string ChatMessageHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ChatMessageHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for chat request packets..
+ ///
+ public static string ChatRequestHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ChatRequestHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Chat Request Handler.
+ ///
+ public static string ChatRequestHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ChatRequestHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IChatRoomCreatedPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ChatRoomCreatedPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ChatRoomCreatedPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Chat Room Created.
+ ///
+ public static string ChatRoomCreatedPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ChatRoomCreatedPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Packet handler which handles chat room invitation requests, where a player invites additional players to an existing chat room..
+ ///
+ public static string ChatRoomInvitationRequestPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ChatRoomInvitationRequestPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Chat Room Invitation Request.
+ ///
+ public static string ChatRoomInvitationRequestPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ChatRoomInvitationRequestPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to View Plugin to send chat messages to the player.
+ ///
+ public static string ChatViewPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ChatViewPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Chat View PlugIn.
+ ///
+ public static string ChatViewPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ChatViewPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Packet handler for close npc packets..
+ ///
+ public static string CloseNpcDialogHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("CloseNpcDialogHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Close Npc Dialog Handler.
+ ///
+ public static string CloseNpcDialogHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("CloseNpcDialogHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the ICloseVaultPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string CloseVaultPlugIn_Description {
+ get {
+ return ResourceManager.GetString("CloseVaultPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Close Vault.
+ ///
+ public static string CloseVaultPlugIn_Name {
+ get {
+ return ResourceManager.GetString("CloseVaultPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for item consume packets..
+ ///
+ public static string ConsumeItemHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ConsumeItemHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Consume Item Handler.
+ ///
+ public static string ConsumeItemHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ConsumeItemHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for item consume packets of version 0.75.
+ ///
+ public static string ConsumeItemHandlerPlugIn075_Description {
+ get {
+ return ResourceManager.GetString("ConsumeItemHandlerPlugIn075_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Consume Item Handler (075).
+ ///
+ public static string ConsumeItemHandlerPlugIn075_Name {
+ get {
+ return ResourceManager.GetString("ConsumeItemHandlerPlugIn075_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IConsumeSpecialItemPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ConsumeSpecialItemPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ConsumeSpecialItemPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Consume Special Item.
+ ///
+ public static string ConsumeSpecialItemPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ConsumeSpecialItemPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for packets which should close the crafting dialog (Chaos Machine)..
+ ///
+ public static string CraftingDialogCloseRequestHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("CraftingDialogCloseRequestHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Crafting Dialog Close Request Handler.
+ ///
+ public static string CraftingDialogCloseRequestHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("CraftingDialogCloseRequestHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the ICurrentlyActiveQuestsPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string CurrentlyActiveQuestsPlugIn_Description {
+ get {
+ return ResourceManager.GetString("CurrentlyActiveQuestsPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Quest - Currently Active Quests.
+ ///
+ public static string CurrentlyActiveQuestsPlugIn_Name {
+ get {
+ return ResourceManager.GetString("CurrentlyActiveQuestsPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IActivateMagicEffectPlugIn and IDeactivateMagicEffectPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string DeActivateMagicEffectPlugIn_Description {
+ get {
+ return ResourceManager.GetString("DeActivateMagicEffectPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to De & ActivateMagicEffectPlugIn.
+ ///
+ public static string DeActivateMagicEffectPlugIn_Name {
+ get {
+ return ResourceManager.GetString("DeActivateMagicEffectPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IActivateMagicEffectPlugIn and IDeactivateMagicEffectPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string DeActivateMagicEffectPlugIn075_Description {
+ get {
+ return ResourceManager.GetString("DeActivateMagicEffectPlugIn075_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to De Activate Magic Effect (075).
+ ///
+ public static string DeActivateMagicEffectPlugIn075_Name {
+ get {
+ return ResourceManager.GetString("DeActivateMagicEffectPlugIn075_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for delete friend packets..
+ ///
+ public static string DeleteFriendHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("DeleteFriendHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Delete Friend Handler.
+ ///
+ public static string DeleteFriendHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("DeleteFriendHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for devil square enter packets..
+ ///
+ public static string DevilSquareEnterHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("DevilSquareEnterHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Devil Square Enter Handler.
+ ///
+ public static string DevilSquareEnterHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("DevilSquareEnterHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for drop item packets..
+ ///
+ public static string DropItemHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("DropItemHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Drop Item Handler.
+ ///
+ public static string DropItemHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("DropItemHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IDroppedItemsDisappearedPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string DroppedItemsDisappearedPlugIn_Description {
+ get {
+ return ResourceManager.GetString("DroppedItemsDisappearedPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Dropped Items Disappeared.
+ ///
+ public static string DroppedItemsDisappearedPlugIn_Name {
+ get {
+ return ResourceManager.GetString("DroppedItemsDisappearedPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for duel channel join request packets (new duel system), which is sent by a spectator..
+ ///
+ public static string DuelChannelJoinRequestHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("DuelChannelJoinRequestHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Duel Channel Join Request Handler.
+ ///
+ public static string DuelChannelJoinRequestHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("DuelChannelJoinRequestHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for duel channel quit request packets (new duel system), which is sent by a spectator..
+ ///
+ public static string DuelChannelQuitRequestHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("DuelChannelQuitRequestHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Duel Channel Quit Request Handler.
+ ///
+ public static string DuelChannelQuitRequestHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("DuelChannelQuitRequestHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IDuelEndedPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string DuelEndedPlugIn_Description {
+ get {
+ return ResourceManager.GetString("DuelEndedPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Duel Ended.
+ ///
+ public static string DuelEndedPlugIn_Name {
+ get {
+ return ResourceManager.GetString("DuelEndedPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IDuelFinishedPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string DuelFinishedPlugIn_Description {
+ get {
+ return ResourceManager.GetString("DuelFinishedPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Duel Finished.
+ ///
+ public static string DuelFinishedPlugIn_Name {
+ get {
+ return ResourceManager.GetString("DuelFinishedPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Packet handler for duel packets (new system)..
+ ///
+ public static string DuelGroupHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("DuelGroupHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Duel Group Handler.
+ ///
+ public static string DuelGroupHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("DuelGroupHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IDuelHealthUpdatePlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string DuelHealthUpdatePlugIn_Description {
+ get {
+ return ResourceManager.GetString("DuelHealthUpdatePlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Duel Health Update.
+ ///
+ public static string DuelHealthUpdatePlugIn_Name {
+ get {
+ return ResourceManager.GetString("DuelHealthUpdatePlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IDuelSpectatorAddedPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string DuelSpectatorAddedPlugIn_Description {
+ get {
+ return ResourceManager.GetString("DuelSpectatorAddedPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Duel Spectator Added.
+ ///
+ public static string DuelSpectatorAddedPlugIn_Name {
+ get {
+ return ResourceManager.GetString("DuelSpectatorAddedPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IDuelSpectatorListUpdatePlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string DuelSpectatorListUpdatePlugIn_Description {
+ get {
+ return ResourceManager.GetString("DuelSpectatorListUpdatePlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Duel Spectator List Update.
+ ///
+ public static string DuelSpectatorListUpdatePlugIn_Name {
+ get {
+ return ResourceManager.GetString("DuelSpectatorListUpdatePlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IDuelSpectatorRemovedPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string DuelSpectatorRemovedPlugIn_Description {
+ get {
+ return ResourceManager.GetString("DuelSpectatorRemovedPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Duel Spectator Removed.
+ ///
+ public static string DuelSpectatorRemovedPlugIn_Name {
+ get {
+ return ResourceManager.GetString("DuelSpectatorRemovedPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for duel start request packets (new duel system)..
+ ///
+ public static string DuelStartRequestHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("DuelStartRequestHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Duel Start Request Handler.
+ ///
+ public static string DuelStartRequestHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("DuelStartRequestHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for duel start response packets (new duel system)..
+ ///
+ public static string DuelStartResponseHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("DuelStartResponseHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Duel Start Response Handler.
+ ///
+ public static string DuelStartResponseHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("DuelStartResponseHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IDuelStatusUpdatePlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string DuelStatusUpdatePlugIn_Description {
+ get {
+ return ResourceManager.GetString("DuelStatusUpdatePlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Duel Status Update.
+ ///
+ public static string DuelStatusUpdatePlugIn_Name {
+ get {
+ return ResourceManager.GetString("DuelStatusUpdatePlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for duel stop request packets (new duel system)..
+ ///
+ public static string DuelStopResponseHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("DuelStopResponseHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Duel Stop Response Handler.
+ ///
+ public static string DuelStopResponseHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("DuelStopResponseHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for EnterOnGatekeeperRequest packets..
+ ///
+ public static string EnterOnGatekeeperHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("EnterOnGatekeeperHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Enter On Gatekeeper Handler.
+ ///
+ public static string EnterOnGatekeeperHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("EnterOnGatekeeperHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for EnterOnWerewolfRequest packets..
+ ///
+ public static string EnterOnWerewolfHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("EnterOnWerewolfHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Enter On Werewolf Handler.
+ ///
+ public static string EnterOnWerewolfHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("EnterOnWerewolfHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Packet handler for event quest state request packets (0xF6, 0x21 identifier).
+ ///
+ public static string EventQuestStateRequestHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("EventQuestStateRequestHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Quest - Event quest state request.
+ ///
+ public static string EventQuestStateRequestHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("EventQuestStateRequestHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IFriendAddedPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string FriendAddedPlugIn_Description {
+ get {
+ return ResourceManager.GetString("FriendAddedPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Friend Added.
+ ///
+ public static string FriendAddedPlugIn_Name {
+ get {
+ return ResourceManager.GetString("FriendAddedPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for friend add response packets..
+ ///
+ public static string FriendAddResponseHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("FriendAddResponseHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Friend Add Response Handler.
+ ///
+ public static string FriendAddResponseHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("FriendAddResponseHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IFriendDeletedPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string FriendDeletedPlugIn_Description {
+ get {
+ return ResourceManager.GetString("FriendDeletedPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Friend Deleted.
+ ///
+ public static string FriendDeletedPlugIn_Name {
+ get {
+ return ResourceManager.GetString("FriendDeletedPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IFriendStateUpdatePlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string FriendStateUpdatePlugIn_Description {
+ get {
+ return ResourceManager.GetString("FriendStateUpdatePlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Friend State Update.
+ ///
+ public static string FriendStateUpdatePlugIn_Name {
+ get {
+ return ResourceManager.GetString("FriendStateUpdatePlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IFruitConsumptionResponsePlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string FruitConsumptionResultPlugIn_Description {
+ get {
+ return ResourceManager.GetString("FruitConsumptionResultPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to CharacterFocusedPlugIn.
+ ///
+ public static string FruitConsumptionResultPlugIn_Name {
+ get {
+ return ResourceManager.GetString("FruitConsumptionResultPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for guild create packets..
+ ///
+ public static string GuildCreateHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("GuildCreateHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Guild Create Handler.
+ ///
+ public static string GuildCreateHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("GuildCreateHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for guild create packets..
+ ///
+ public static string GuildCreateHandlerPlugIn075_Description {
+ get {
+ return ResourceManager.GetString("GuildCreateHandlerPlugIn075_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Guild Create Handler (075).
+ ///
+ public static string GuildCreateHandlerPlugIn075_Name {
+ get {
+ return ResourceManager.GetString("GuildCreateHandlerPlugIn075_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for guild info request packets..
+ ///
+ public static string GuildInfoRequestHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("GuildInfoRequestHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Guild Info Request Handler.
+ ///
+ public static string GuildInfoRequestHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("GuildInfoRequestHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IGuildJoinResponsePlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string GuildJoinResponsePlugIn_Description {
+ get {
+ return ResourceManager.GetString("GuildJoinResponsePlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Guild Join Response.
+ ///
+ public static string GuildJoinResponsePlugIn_Name {
+ get {
+ return ResourceManager.GetString("GuildJoinResponsePlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for guild player kick packets..
+ ///
+ public static string GuildKickPlayerHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("GuildKickPlayerHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Guild Kick Player Handler.
+ ///
+ public static string GuildKickPlayerHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("GuildKickPlayerHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IGuildKickResultPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string GuildKickResultPlugIn_Description {
+ get {
+ return ResourceManager.GetString("GuildKickResultPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Guild Kick Result.
+ ///
+ public static string GuildKickResultPlugIn_Name {
+ get {
+ return ResourceManager.GetString("GuildKickResultPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for guild list request packets..
+ ///
+ public static string GuildListRequestHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("GuildListRequestHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Guild List Request Handler.
+ ///
+ public static string GuildListRequestHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("GuildListRequestHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for guild master answer packets..
+ ///
+ public static string GuildMasterAnswerHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("GuildMasterAnswerHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Guild Master Answer Handler.
+ ///
+ public static string GuildMasterAnswerHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("GuildMasterAnswerHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for guild request answer packets..
+ ///
+ public static string GuildRequestAnswerHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("GuildRequestAnswerHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Guild Request Answer Handler.
+ ///
+ public static string GuildRequestAnswerHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("GuildRequestAnswerHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for guild requests..
+ ///
+ public static string GuildRequestHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("GuildRequestHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Guild Request Handler.
+ ///
+ public static string GuildRequestHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("GuildRequestHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for guild war response packets..
+ ///
+ public static string GuildWarResponseHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("GuildWarResponseHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Guild War Response Handler.
+ ///
+ public static string GuildWarResponseHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("GuildWarResponseHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IGuildWarScoreUpdatePlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string GuildWarScoreUpdatePlugIn_Description {
+ get {
+ return ResourceManager.GetString("GuildWarScoreUpdatePlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Guild War Score Update.
+ ///
+ public static string GuildWarScoreUpdatePlugIn_Name {
+ get {
+ return ResourceManager.GetString("GuildWarScoreUpdatePlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for hit packets..
+ ///
+ public static string HitHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("HitHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Hit Handler.
+ ///
+ public static string HitHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("HitHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for hit packets..
+ ///
+ public static string HitHandlerPlugIn075_Description {
+ get {
+ return ResourceManager.GetString("HitHandlerPlugIn075_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to HitHandlerPlugIn 0.75.
+ ///
+ public static string HitHandlerPlugIn075_Name {
+ get {
+ return ResourceManager.GetString("HitHandlerPlugIn075_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IInitializeDuelPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string InitializeDuelPlugIn_Description {
+ get {
+ return ResourceManager.GetString("InitializeDuelPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Initialize Duel.
+ ///
+ public static string InitializeDuelPlugIn_Name {
+ get {
+ return ResourceManager.GetString("InitializeDuelPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IInitializeMessengerPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string InitializeMessengerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("InitializeMessengerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Initialize Messenger.
+ ///
+ public static string InitializeMessengerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("InitializeMessengerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IItemAppearPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ItemAppearPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ItemAppearPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Item Appear.
+ ///
+ public static string ItemAppearPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ItemAppearPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IItemDropResultPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ItemDropResultPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ItemDropResultPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Item Drop Result.
+ ///
+ public static string ItemDropResultPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ItemDropResultPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IItemDurabilityChangedPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ItemDurabilityChangedPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ItemDurabilityChangedPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Item Durability Changed.
+ ///
+ public static string ItemDurabilityChangedPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ItemDurabilityChangedPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IItemMovedPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ItemMovedPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ItemMovedPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Item Moved.
+ ///
+ public static string ItemMovedPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ItemMovedPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Packet handler for extended item move packets..
+ ///
+ public static string ItemMoveExtendedHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ItemMoveExtendedHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Item Move Extended Handler.
+ ///
+ public static string ItemMoveExtendedHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ItemMoveExtendedHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IItemMoveFailedPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ItemMoveFailedPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ItemMoveFailedPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Item Move Failed.
+ ///
+ public static string ItemMoveFailedPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ItemMoveFailedPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for item move packets..
+ ///
+ public static string ItemMoveHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ItemMoveHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Item Move Handler.
+ ///
+ public static string ItemMoveHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ItemMoveHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IItemPickUpFailedPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ItemPickUpFailedPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ItemPickUpFailedPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Item Pick Up Failed.
+ ///
+ public static string ItemPickUpFailedPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ItemPickUpFailedPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IItemPriceSetResponsePlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ItemPriceSetResponsePlugIn_Description {
+ get {
+ return ResourceManager.GetString("ItemPriceSetResponsePlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Item Price Set Response.
+ ///
+ public static string ItemPriceSetResponsePlugIn_Name {
+ get {
+ return ResourceManager.GetString("ItemPriceSetResponsePlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IItemRemovedPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ItemRemovedPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ItemRemovedPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Item Removed.
+ ///
+ public static string ItemRemovedPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ItemRemovedPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for item repair packets..
+ ///
+ public static string ItemRepairHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ItemRepairHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Item Repair Handler.
+ ///
+ public static string ItemRepairHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ItemRepairHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default item serializer. It's most likely only correct for season 6..
+ ///
+ public static string ItemSerializer_Description {
+ get {
+ return ResourceManager.GetString("ItemSerializer_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Item Serializer.
+ ///
+ public static string ItemSerializer_Name {
+ get {
+ return ResourceManager.GetString("ItemSerializer_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The item serializer for game client version 0.75.
+ ///
+ public static string ItemSerializer075_Description {
+ get {
+ return ResourceManager.GetString("ItemSerializer075_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Item Serializer 0.75.
+ ///
+ public static string ItemSerializer075_Name {
+ get {
+ return ResourceManager.GetString("ItemSerializer075_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The item serializer for game client version 0.95.
+ ///
+ public static string ItemSerializer095_Description {
+ get {
+ return ResourceManager.GetString("ItemSerializer095_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to ItemSerializer095.
+ ///
+ public static string ItemSerializer095_Name {
+ get {
+ return ResourceManager.GetString("ItemSerializer095_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The extended item serializer. It's most likely only correct for season 6..
+ ///
+ public static string ItemSerializerExtended_Description {
+ get {
+ return ResourceManager.GetString("ItemSerializerExtended_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Item Serializer.
+ ///
+ public static string ItemSerializerExtended_Name {
+ get {
+ return ResourceManager.GetString("ItemSerializerExtended_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IItemSoldByPlayerShopPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ItemSoldByPlayerShopPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ItemSoldByPlayerShopPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Item Sold By Player Shop.
+ ///
+ public static string ItemSoldByPlayerShopPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ItemSoldByPlayerShopPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IItemSoldToNpcPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ItemSoldToNpcPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ItemSoldToNpcPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Item Sold To Npc.
+ ///
+ public static string ItemSoldToNpcPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ItemSoldToNpcPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IItemUpgradedPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ItemUpgradedPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ItemUpgradedPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Item Upgraded.
+ ///
+ public static string ItemUpgradedPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ItemUpgradedPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for jewel mix packets..
+ ///
+ public static string JewelMixHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("JewelMixHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Jewel Mix Handler.
+ ///
+ public static string JewelMixHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("JewelMixHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the ILegacyQuestRewardPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string LegacyQuestRewardPlugIn_Description {
+ get {
+ return ResourceManager.GetString("LegacyQuestRewardPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Quest - Reward.
+ ///
+ public static string LegacyQuestRewardPlugIn_Name {
+ get {
+ return ResourceManager.GetString("LegacyQuestRewardPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the ILegacyQuestStateDialogPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string LegacyQuestStateDialogPlugIn_Description {
+ get {
+ return ResourceManager.GetString("LegacyQuestStateDialogPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Quest - Status Dialog.
+ ///
+ public static string LegacyQuestStateDialogPlugIn_Name {
+ get {
+ return ResourceManager.GetString("LegacyQuestStateDialogPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the ILetterDeletedPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string LetterDeletedPlugIn_Description {
+ get {
+ return ResourceManager.GetString("LetterDeletedPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Letter Deleted.
+ ///
+ public static string LetterDeletedPlugIn_Name {
+ get {
+ return ResourceManager.GetString("LetterDeletedPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for letter delete packets..
+ ///
+ public static string LetterDeleteHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("LetterDeleteHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Letter Delete Handler.
+ ///
+ public static string LetterDeleteHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("LetterDeleteHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for letter read request packets..
+ ///
+ public static string LetterReadRequestHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("LetterReadRequestHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Letter Read Request Handler.
+ ///
+ public static string LetterReadRequestHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("LetterReadRequestHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for letter send packets..
+ ///
+ public static string LetterSendHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("LetterSendHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Letter Send Handler.
+ ///
+ public static string LetterSendHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("LetterSendHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the ILetterSendResultPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string LetterSendResultPlugIn_Description {
+ get {
+ return ResourceManager.GetString("LetterSendResultPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Letter Send Result.
+ ///
+ public static string LetterSendResultPlugIn_Name {
+ get {
+ return ResourceManager.GetString("LetterSendResultPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Packet handler for login packets..
+ ///
+ public static string LogInHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("LogInHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Login.
+ ///
+ public static string LogInHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("LogInHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Packet group handler for log in and out packets (0xF1)..
+ ///
+ public static string LogInOutGroup_Description {
+ get {
+ return ResourceManager.GetString("LogInOutGroup_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Log In & Out Group.
+ ///
+ public static string LogInOutGroup_Name {
+ get {
+ return ResourceManager.GetString("LogInOutGroup_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for logout (by cheat) packets..
+ ///
+ public static string LogOutByCheatDetectionHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("LogOutByCheatDetectionHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Logout by cheat handler.
+ ///
+ public static string LogOutByCheatDetectionHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("LogOutByCheatDetectionHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for logout packets..
+ ///
+ public static string LogOutHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("LogOutHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Logout handler.
+ ///
+ public static string LogOutHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("LogOutHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the ILogoutPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string LogoutPlugIn_Description {
+ get {
+ return ResourceManager.GetString("LogoutPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Logout.
+ ///
+ public static string LogoutPlugIn_Name {
+ get {
+ return ResourceManager.GetString("LogoutPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IMapChangePlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string MapChangePlugIn_Description {
+ get {
+ return ResourceManager.GetString("MapChangePlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Map Change.
+ ///
+ public static string MapChangePlugIn_Name {
+ get {
+ return ResourceManager.GetString("MapChangePlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IMapChangePlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string MapChangePlugIn075_Description {
+ get {
+ return ResourceManager.GetString("MapChangePlugIn075_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Map Change (075).
+ ///
+ public static string MapChangePlugIn075_Name {
+ get {
+ return ResourceManager.GetString("MapChangePlugIn075_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IMapEventStateUpdatePlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string MapEventStateUpdatePlugIn_Description {
+ get {
+ return ResourceManager.GetString("MapEventStateUpdatePlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Map Event State Update.
+ ///
+ public static string MapEventStateUpdatePlugIn_Name {
+ get {
+ return ResourceManager.GetString("MapEventStateUpdatePlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IMasterSkillLevelChangedPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string MasterSkillLevelChangedPlugIn_Description {
+ get {
+ return ResourceManager.GetString("MasterSkillLevelChangedPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Master Skill Level Changed.
+ ///
+ public static string MasterSkillLevelChangedPlugIn_Name {
+ get {
+ return ResourceManager.GetString("MasterSkillLevelChangedPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for mini game opening state request packets..
+ ///
+ public static string MiniGameOpeningStateRequestHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("MiniGameOpeningStateRequestHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Mini Game Opening State Request Handler.
+ ///
+ public static string MiniGameOpeningStateRequestHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("MiniGameOpeningStateRequestHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IMiniGameScoreTableViewPlugin which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string MiniGameScoreTableViewPlugin_Description {
+ get {
+ return ResourceManager.GetString("MiniGameScoreTableViewPlugin_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to MiniGameScoreTableViewPlugin.
+ ///
+ public static string MiniGameScoreTableViewPlugin_Name {
+ get {
+ return ResourceManager.GetString("MiniGameScoreTableViewPlugin_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Sends the new MU Helper status to the client..
+ ///
+ public static string MuHelperConfigurationUpdatePlugIn_Description {
+ get {
+ return ResourceManager.GetString("MuHelperConfigurationUpdatePlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Mu Helper Configuration Update.
+ ///
+ public static string MuHelperConfigurationUpdatePlugIn_Name {
+ get {
+ return ResourceManager.GetString("MuHelperConfigurationUpdatePlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Group packet handler for mu helper packets (0xBF identifier)..
+ ///
+ public static string MuHelperGroupHandler_Description {
+ get {
+ return ResourceManager.GetString("MuHelperGroupHandler_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to MuHelperGroupHandler.
+ ///
+ public static string MuHelperGroupHandler_Name {
+ get {
+ return ResourceManager.GetString("MuHelperGroupHandler_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for mu bot data save request..
+ ///
+ public static string MuHelperSaveDataRequestHandlerPlugin_Description {
+ get {
+ return ResourceManager.GetString("MuHelperSaveDataRequestHandlerPlugin_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to MuHelperSaveDataRequestHandlerPlugin.
+ ///
+ public static string MuHelperSaveDataRequestHandlerPlugin_Name {
+ get {
+ return ResourceManager.GetString("MuHelperSaveDataRequestHandlerPlugin_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for MU Helper status change requests..
+ ///
+ public static string MuHelperStatusChangeRequestHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("MuHelperStatusChangeRequestHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Mu Helper Status Change Request Handler.
+ ///
+ public static string MuHelperStatusChangeRequestHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("MuHelperStatusChangeRequestHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Sends the MU Helper status update to the client..
+ ///
+ public static string MuHelperStatusUpdatePlugIn_Description {
+ get {
+ return ResourceManager.GetString("MuHelperStatusUpdatePlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Mu Helper Status Update.
+ ///
+ public static string MuHelperStatusUpdatePlugIn_Name {
+ get {
+ return ResourceManager.GetString("MuHelperStatusUpdatePlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the INewNpcsInScopePlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string NewNpcsInScopePlugIn_Description {
+ get {
+ return ResourceManager.GetString("NewNpcsInScopePlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to NPCs in scope PlugIn.
+ ///
+ public static string NewNpcsInScopePlugIn_Name {
+ get {
+ return ResourceManager.GetString("NewNpcsInScopePlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the INewNpcsInScopePlugIn which is forwarding everything to the game client with specific data packets for version 0.75..
+ ///
+ public static string NewNpcsInScopePlugIn075_Description {
+ get {
+ return ResourceManager.GetString("NewNpcsInScopePlugIn075_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to NPCs in scope PlugIn 0.75.
+ ///
+ public static string NewNpcsInScopePlugIn075_Name {
+ get {
+ return ResourceManager.GetString("NewNpcsInScopePlugIn075_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the INewNpcsInScopePlugIn which is forwarding everything to the game client with specific data packets for version 0.75..
+ ///
+ public static string NewNpcsInScopePlugIn095_Description {
+ get {
+ return ResourceManager.GetString("NewNpcsInScopePlugIn095_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to New Npcs In Scope (095).
+ ///
+ public static string NewNpcsInScopePlugIn095_Name {
+ get {
+ return ResourceManager.GetString("NewNpcsInScopePlugIn095_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The extended implementation of the INewPlayersInScopePlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string NewPlayersInScopeExtendedPlugIn_Description {
+ get {
+ return ResourceManager.GetString("NewPlayersInScopeExtendedPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to New Players In Scope Extended.
+ ///
+ public static string NewPlayersInScopeExtendedPlugIn_Name {
+ get {
+ return ResourceManager.GetString("NewPlayersInScopeExtendedPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the INewPlayersInScopePlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string NewPlayersInScopePlugIn_Description {
+ get {
+ return ResourceManager.GetString("NewPlayersInScopePlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to New Players In Scope.
+ ///
+ public static string NewPlayersInScopePlugIn_Name {
+ get {
+ return ResourceManager.GetString("NewPlayersInScopePlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the INewPlayersInScopePlugIn which is forwarding everything to the game client with specific data packets for version 0.75..
+ ///
+ public static string NewPlayersInScopePlugIn075_Description {
+ get {
+ return ResourceManager.GetString("NewPlayersInScopePlugIn075_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to New Players In Scope (075).
+ ///
+ public static string NewPlayersInScopePlugIn075_Name {
+ get {
+ return ResourceManager.GetString("NewPlayersInScopePlugIn075_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the INewPlayersInScopePlugIn which is forwarding everything to the game client with specific data packets for version 0.75..
+ ///
+ public static string NewPlayersInScopePlugIn095_Description {
+ get {
+ return ResourceManager.GetString("NewPlayersInScopePlugIn095_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to New Players In Scope (095).
+ ///
+ public static string NewPlayersInScopePlugIn095_Name {
+ get {
+ return ResourceManager.GetString("NewPlayersInScopePlugIn095_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Packet handler for npc action packets (0xD0 identifier)..
+ ///
+ public static string NpcActionGroupHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("NpcActionGroupHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to NPC Action Packet Handler.
+ ///
+ public static string NpcActionGroupHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("NpcActionGroupHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the INpcDialogClosedPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string NpcDialogClosedPlugIn075_Description {
+ get {
+ return ResourceManager.GetString("NpcDialogClosedPlugIn075_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Npc Dialog Closed (075).
+ ///
+ public static string NpcDialogClosedPlugIn075_Name {
+ get {
+ return ResourceManager.GetString("NpcDialogClosedPlugIn075_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the INpcItemBoughtPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string NpcItemBoughtPlugIn_Description {
+ get {
+ return ResourceManager.GetString("NpcItemBoughtPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Npc Item Bought.
+ ///
+ public static string NpcItemBoughtPlugIn_Name {
+ get {
+ return ResourceManager.GetString("NpcItemBoughtPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IObjectGotKilledPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ObjectGotKilledPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ObjectGotKilledPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Object Got Killed.
+ ///
+ public static string ObjectGotKilledPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ObjectGotKilledPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IObjectMovedPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ObjectMovedPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ObjectMovedPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Object Moved.
+ ///
+ public static string ObjectMovedPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ObjectMovedPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IObjectMovedPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ObjectMovedPlugIn075_Description {
+ get {
+ return ResourceManager.GetString("ObjectMovedPlugIn075_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to ObjectMovedPlugIn 0.75.
+ ///
+ public static string ObjectMovedPlugIn075_Name {
+ get {
+ return ResourceManager.GetString("ObjectMovedPlugIn075_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IObjectMovedPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ObjectMovedPlugInExtended_Description {
+ get {
+ return ResourceManager.GetString("ObjectMovedPlugInExtended_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to ObjectMovedPlugInExtended.
+ ///
+ public static string ObjectMovedPlugInExtended_Name {
+ get {
+ return ResourceManager.GetString("ObjectMovedPlugInExtended_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IObjectsOutOfScopePlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ObjectsOutOfScopePlugIn_Description {
+ get {
+ return ResourceManager.GetString("ObjectsOutOfScopePlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Objects Out Of Scope.
+ ///
+ public static string ObjectsOutOfScopePlugIn_Name {
+ get {
+ return ResourceManager.GetString("ObjectsOutOfScopePlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IOpenNpcWindowPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string OpenNpcWindowPlugIn_Description {
+ get {
+ return ResourceManager.GetString("OpenNpcWindowPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Open Npc Window.
+ ///
+ public static string OpenNpcWindowPlugIn_Name {
+ get {
+ return ResourceManager.GetString("OpenNpcWindowPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the party view which is forwarding everything to the game client which specific data packets..
+ ///
+ public static string PartyHealthViewPlugIn_Description {
+ get {
+ return ResourceManager.GetString("PartyHealthViewPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Party View.
+ ///
+ public static string PartyHealthViewPlugIn_Name {
+ get {
+ return ResourceManager.GetString("PartyHealthViewPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for party kick packets..
+ ///
+ public static string PartyKickHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("PartyKickHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Party Kick Handler.
+ ///
+ public static string PartyKickHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("PartyKickHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for party list request packets..
+ ///
+ public static string PartyListRequestHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("PartyListRequestHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Party List Request Handler.
+ ///
+ public static string PartyListRequestHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("PartyListRequestHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IPartyMemberRemovedPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string PartyMemberRemovedPlugIn_Description {
+ get {
+ return ResourceManager.GetString("PartyMemberRemovedPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Party Member Removed.
+ ///
+ public static string PartyMemberRemovedPlugIn_Name {
+ get {
+ return ResourceManager.GetString("PartyMemberRemovedPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for party request packets..
+ ///
+ public static string PartyRequestHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("PartyRequestHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Party Request Handler.
+ ///
+ public static string PartyRequestHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("PartyRequestHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for party response packets..
+ ///
+ public static string PartyResponseHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("PartyResponseHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Party Response Handler.
+ ///
+ public static string PartyResponseHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("PartyResponseHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to View plugin to show pet attacks..
+ ///
+ public static string PetAttackViewPlugIn_Description {
+ get {
+ return ResourceManager.GetString("PetAttackViewPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Pet Attack View.
+ ///
+ public static string PetAttackViewPlugIn_Name {
+ get {
+ return ResourceManager.GetString("PetAttackViewPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to View plugin to signal a changed pet behaviour..
+ ///
+ public static string PetBehaviourChangedViewPlugIn_Description {
+ get {
+ return ResourceManager.GetString("PetBehaviourChangedViewPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Pet Behaviour Changed View.
+ ///
+ public static string PetBehaviourChangedViewPlugIn_Name {
+ get {
+ return ResourceManager.GetString("PetBehaviourChangedViewPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for pet command request packets..
+ ///
+ public static string PetCommandRequestHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("PetCommandRequestHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Pet Command Request Handler.
+ ///
+ public static string PetCommandRequestHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("PetCommandRequestHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for pet info request packets..
+ ///
+ public static string PetInfoRequestHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("PetInfoRequestHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Pet Info Request Handler.
+ ///
+ public static string PetInfoRequestHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("PetInfoRequestHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IPetInfoViewPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string PetInfoViewPlugIn_Description {
+ get {
+ return ResourceManager.GetString("PetInfoViewPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Pet Info View.
+ ///
+ public static string PetInfoViewPlugIn_Name {
+ get {
+ return ResourceManager.GetString("PetInfoViewPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for item pickup packets..
+ ///
+ public static string PickupItemHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("PickupItemHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Pickup Item Handler.
+ ///
+ public static string PickupItemHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("PickupItemHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for item pickup packets for version 0.75..
+ ///
+ public static string PickupItemHandlerPlugIn075_Description {
+ get {
+ return ResourceManager.GetString("PickupItemHandlerPlugIn075_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to PickupItemHandlerPlugIn 0.75.
+ ///
+ public static string PickupItemHandlerPlugIn075_Name {
+ get {
+ return ResourceManager.GetString("PickupItemHandlerPlugIn075_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IPlayerLeftGuildPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string PlayerLeftGuildPlugIn_Description {
+ get {
+ return ResourceManager.GetString("PlayerLeftGuildPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Player Left Guild.
+ ///
+ public static string PlayerLeftGuildPlugIn_Name {
+ get {
+ return ResourceManager.GetString("PlayerLeftGuildPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Packet handler which handles buy requests to a player shop (3F 06)..
+ ///
+ public static string PlayerShopBuyRequestPacketHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("PlayerShopBuyRequestPacketHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Player Shop - Buy request.
+ ///
+ public static string PlayerShopBuyRequestPacketHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("PlayerShopBuyRequestPacketHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The extended implementation of the IPlayerShopBuyRequestResultPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string PlayerShopBuyRequestResultExtendedPlugIn_Description {
+ get {
+ return ResourceManager.GetString("PlayerShopBuyRequestResultExtendedPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Player Shop Buy Request Result Extended.
+ ///
+ public static string PlayerShopBuyRequestResultExtendedPlugIn_Name {
+ get {
+ return ResourceManager.GetString("PlayerShopBuyRequestResultExtendedPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IPlayerShopBuyRequestResultPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string PlayerShopBuyRequestResultPlugIn_Description {
+ get {
+ return ResourceManager.GetString("PlayerShopBuyRequestResultPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Player Shop Buy Request Result.
+ ///
+ public static string PlayerShopBuyRequestResultPlugIn_Name {
+ get {
+ return ResourceManager.GetString("PlayerShopBuyRequestResultPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IPlayerShopClosedPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string PlayerShopClosedPlugIn_Description {
+ get {
+ return ResourceManager.GetString("PlayerShopClosedPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Player Shop Closed.
+ ///
+ public static string PlayerShopClosedPlugIn_Name {
+ get {
+ return ResourceManager.GetString("PlayerShopClosedPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Packet handler which opens the player shop (3F 03)..
+ ///
+ public static string PlayerShopClosePacketHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("PlayerShopClosePacketHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Player Shop - Close.
+ ///
+ public static string PlayerShopClosePacketHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("PlayerShopClosePacketHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IPlayerShopOpenedPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string PlayerShopOpenedPlugIn_Description {
+ get {
+ return ResourceManager.GetString("PlayerShopOpenedPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Player Shop Opened.
+ ///
+ public static string PlayerShopOpenedPlugIn_Name {
+ get {
+ return ResourceManager.GetString("PlayerShopOpenedPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Packet handler which opens the player shop (3F 02)..
+ ///
+ public static string PlayerShopOpenPacketHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("PlayerShopOpenPacketHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Player Shop - Open.
+ ///
+ public static string PlayerShopOpenPacketHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("PlayerShopOpenPacketHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Packet handler which handles requests for the item list of another player (3F 05)..
+ ///
+ public static string PlayerShopRequestItemListPacketHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("PlayerShopRequestItemListPacketHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Player Shop - Request Item List.
+ ///
+ public static string PlayerShopRequestItemListPacketHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("PlayerShopRequestItemListPacketHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Packet handler which sets prices for an item in the player shop (3F 01)..
+ ///
+ public static string PlayerShopSetItemPricePacketHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("PlayerShopSetItemPricePacketHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Player Shop - Set Price.
+ ///
+ public static string PlayerShopSetItemPricePacketHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("PlayerShopSetItemPricePacketHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IQuestCancelledPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string QuestCancelledPlugIn_Description {
+ get {
+ return ResourceManager.GetString("QuestCancelledPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Quest - Cancelled.
+ ///
+ public static string QuestCancelledPlugIn_Name {
+ get {
+ return ResourceManager.GetString("QuestCancelledPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Packet handler for quest cancel request packets (0xF6, 0x0F identifier).
+ ///
+ public static string QuestCancelRequestHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("QuestCancelRequestHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Quest - Cancel Request.
+ ///
+ public static string QuestCancelRequestHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("QuestCancelRequestHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Packet handler for quest client action packets (0xF6, 0x10 identifier).
+ ///
+ public static string QuestClientActionHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("QuestClientActionHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Quest - Client Action.
+ ///
+ public static string QuestClientActionHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("QuestClientActionHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Packet handler for quest completion request packets (0xF6, 0x0D identifier).
+ ///
+ public static string QuestCompletionRequestHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("QuestCompletionRequestHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Quest - Completion Request.
+ ///
+ public static string QuestCompletionRequestHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("QuestCompletionRequestHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IQuestCompletionResponsePlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string QuestCompletionResponsePlugIn_Description {
+ get {
+ return ResourceManager.GetString("QuestCompletionResponsePlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Quest - Completion Response.
+ ///
+ public static string QuestCompletionResponsePlugIn_Name {
+ get {
+ return ResourceManager.GetString("QuestCompletionResponsePlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IQuestEventResponsePlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string QuestEventResponsePlugIn_Description {
+ get {
+ return ResourceManager.GetString("QuestEventResponsePlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Quest - Event Quests Response.
+ ///
+ public static string QuestEventResponsePlugIn_Name {
+ get {
+ return ResourceManager.GetString("QuestEventResponsePlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Packet handler for quest packets (0xF6 identifier)..
+ ///
+ public static string QuestGroupHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("QuestGroupHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Quest Packet Handler.
+ ///
+ public static string QuestGroupHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("QuestGroupHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Packet handler for quest proceed request packets (0xF6, 0x0B identifier).
+ ///
+ public static string QuestProceedRequestHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("QuestProceedRequestHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Quest - Proceed Request.
+ ///
+ public static string QuestProceedRequestHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("QuestProceedRequestHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The extended implementation of the IQuestProgressPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string QuestProgressExtendedPlugIn_Description {
+ get {
+ return ResourceManager.GetString("QuestProgressExtendedPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Quest Progress Extended.
+ ///
+ public static string QuestProgressExtendedPlugIn_Name {
+ get {
+ return ResourceManager.GetString("QuestProgressExtendedPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IQuestProgressPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string QuestProgressPlugIn_Description {
+ get {
+ return ResourceManager.GetString("QuestProgressPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Quest Progress.
+ ///
+ public static string QuestProgressPlugIn_Name {
+ get {
+ return ResourceManager.GetString("QuestProgressPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Packet handler for quest select request packets (0xF6, 0x0A identifier).
+ ///
+ public static string QuestSelectRequestHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("QuestSelectRequestHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Quest - Select Request.
+ ///
+ public static string QuestSelectRequestHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("QuestSelectRequestHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IQuestStartedPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string QuestStartedPlugIn_Description {
+ get {
+ return ResourceManager.GetString("QuestStartedPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Quest - Started.
+ ///
+ public static string QuestStartedPlugIn_Name {
+ get {
+ return ResourceManager.GetString("QuestStartedPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Packet handler for the quest state list request for the legacy quest system (0xA0 identifier).
+ ///
+ public static string QuestStateListLegacyRequestHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("QuestStateListLegacyRequestHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Quest state list request (legacy).
+ ///
+ public static string QuestStateListLegacyRequestHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("QuestStateListLegacyRequestHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Packet handler for quest state request packets (0xF6, 0x1B identifier).
+ ///
+ public static string QuestStateRequestHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("QuestStateRequestHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Quest - Request quest state.
+ ///
+ public static string QuestStateRequestHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("QuestStateRequestHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The extended implementation of the IQuestStateResponsePlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string QuestStateResponseExtendedPlugIn_Description {
+ get {
+ return ResourceManager.GetString("QuestStateResponseExtendedPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Quest State Response Extended.
+ ///
+ public static string QuestStateResponseExtendedPlugIn_Name {
+ get {
+ return ResourceManager.GetString("QuestStateResponseExtendedPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IQuestStateResponsePlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string QuestStateResponsePlugIn_Description {
+ get {
+ return ResourceManager.GetString("QuestStateResponsePlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Quest - State response.
+ ///
+ public static string QuestStateResponsePlugIn_Name {
+ get {
+ return ResourceManager.GetString("QuestStateResponsePlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Packet handler for the quest state set request for the legacy quest system (0xA2 identifier)..
+ ///
+ public static string QuestStateSetLegacyRequestHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("QuestStateSetLegacyRequestHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Quest state set request (legacy).
+ ///
+ public static string QuestStateSetLegacyRequestHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("QuestStateSetLegacyRequestHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IQuestStepInfoPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string QuestStepInfoPlugIn_Description {
+ get {
+ return ResourceManager.GetString("QuestStepInfoPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Quest - Step Info.
+ ///
+ public static string QuestStepInfoPlugIn_Name {
+ get {
+ return ResourceManager.GetString("QuestStepInfoPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for rage fighter area skill attack packets (dark side)..
+ ///
+ public static string RageSkillAttackHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("RageSkillAttackHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Rage Skill Attack Handler.
+ ///
+ public static string RageSkillAttackHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("RageSkillAttackHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for rage fighter area skill attack packets (dark side)..
+ ///
+ public static string RageSkillAttackRequestHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("RageSkillAttackRequestHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Rage Skill Attack Request Handler.
+ ///
+ public static string RageSkillAttackRequestHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("RageSkillAttackRequestHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Packet handler for vault pin remove packets (0x83, 0x02 identifier)..
+ ///
+ public static string RemoveVaultPinPlugIn_Description {
+ get {
+ return ResourceManager.GetString("RemoveVaultPinPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Vault Lock - Remove Pin.
+ ///
+ public static string RemoveVaultPinPlugIn_Name {
+ get {
+ return ResourceManager.GetString("RemoveVaultPinPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The extended implementation of the IRequestedItemConsumptionFailedPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string RequestedItemConsumptionFailedExtendedPlugIn_Description {
+ get {
+ return ResourceManager.GetString("RequestedItemConsumptionFailedExtendedPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Requested Item Consumption Failed Extended.
+ ///
+ public static string RequestedItemConsumptionFailedExtendedPlugIn_Name {
+ get {
+ return ResourceManager.GetString("RequestedItemConsumptionFailedExtendedPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IRequestedItemConsumptionFailedPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string RequestedItemConsumptionFailedPlugIn_Description {
+ get {
+ return ResourceManager.GetString("RequestedItemConsumptionFailedPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Requested Item Consumption Failed.
+ ///
+ public static string RequestedItemConsumptionFailedPlugIn_Name {
+ get {
+ return ResourceManager.GetString("RequestedItemConsumptionFailedPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IRequestedTradeMoneyHasBeenSetPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string RequestedTradeMoneyHasBeenSetPlugIn_Description {
+ get {
+ return ResourceManager.GetString("RequestedTradeMoneyHasBeenSetPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Requested Trade Money Has Been Set.
+ ///
+ public static string RequestedTradeMoneyHasBeenSetPlugIn_Name {
+ get {
+ return ResourceManager.GetString("RequestedTradeMoneyHasBeenSetPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IRespawnAfterDeathPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string RespawnAfterDeathExtendedPlugIn_Description {
+ get {
+ return ResourceManager.GetString("RespawnAfterDeathExtendedPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Respawn After Death Extended.
+ ///
+ public static string RespawnAfterDeathExtendedPlugIn_Name {
+ get {
+ return ResourceManager.GetString("RespawnAfterDeathExtendedPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IRespawnAfterDeathPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string RespawnAfterDeathPlugIn_Description {
+ get {
+ return ResourceManager.GetString("RespawnAfterDeathPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Respawn After Death.
+ ///
+ public static string RespawnAfterDeathPlugIn_Name {
+ get {
+ return ResourceManager.GetString("RespawnAfterDeathPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IRespawnAfterDeathPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string RespawnAfterDeathPlugIn075_Description {
+ get {
+ return ResourceManager.GetString("RespawnAfterDeathPlugIn075_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Respawn After Death (075).
+ ///
+ public static string RespawnAfterDeathPlugIn075_Name {
+ get {
+ return ResourceManager.GetString("RespawnAfterDeathPlugIn075_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IRespawnAfterDeathPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string RespawnAfterDeathPlugIn095_Description {
+ get {
+ return ResourceManager.GetString("RespawnAfterDeathPlugIn095_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Respawn After Death (095).
+ ///
+ public static string RespawnAfterDeathPlugIn095_Name {
+ get {
+ return ResourceManager.GetString("RespawnAfterDeathPlugIn095_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for item sale to npc packets..
+ ///
+ public static string SellItemToNpcHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("SellItemToNpcHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Sell Item To Npc Handler.
+ ///
+ public static string SellItemToNpcHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("SellItemToNpcHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the ISetTradeMoneyPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string SetTradeMoneyPlugIn_Description {
+ get {
+ return ResourceManager.GetString("SetTradeMoneyPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Set Trade Money.
+ ///
+ public static string SetTradeMoneyPlugIn_Name {
+ get {
+ return ResourceManager.GetString("SetTradeMoneyPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Packet handler for vault pin set packets (0x83, 0x01 identifier)..
+ ///
+ public static string SetVaultPinPlugIn_Description {
+ get {
+ return ResourceManager.GetString("SetVaultPinPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Vault Lock - Set Pin.
+ ///
+ public static string SetVaultPinPlugIn_Name {
+ get {
+ return ResourceManager.GetString("SetVaultPinPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowAnimationPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowAnimationPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowAnimationPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Animation.
+ ///
+ public static string ShowAnimationPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowAnimationPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowAnimationPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowAnimationPlugIn075_Description {
+ get {
+ return ResourceManager.GetString("ShowAnimationPlugIn075_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Animation (075).
+ ///
+ public static string ShowAnimationPlugIn075_Name {
+ get {
+ return ResourceManager.GetString("ShowAnimationPlugIn075_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowAreaSkillAnimationPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowAreaSkillAnimationPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowAreaSkillAnimationPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Area Skill Animation.
+ ///
+ public static string ShowAreaSkillAnimationPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowAreaSkillAnimationPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowAreaSkillAnimationPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowAreaSkillAnimationPlugIn075_Description {
+ get {
+ return ResourceManager.GetString("ShowAreaSkillAnimationPlugIn075_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Area Skill Animation (075).
+ ///
+ public static string ShowAreaSkillAnimationPlugIn075_Name {
+ get {
+ return ResourceManager.GetString("ShowAreaSkillAnimationPlugIn075_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowAreaSkillAnimationPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowAreaSkillAnimationPlugIn095_Description {
+ get {
+ return ResourceManager.GetString("ShowAreaSkillAnimationPlugIn095_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Area Skill Animation (095).
+ ///
+ public static string ShowAreaSkillAnimationPlugIn095_Name {
+ get {
+ return ResourceManager.GetString("ShowAreaSkillAnimationPlugIn095_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowAvailableQuestsPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowAvailableQuestsPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowAvailableQuestsPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Quest - Show available quests.
+ ///
+ public static string ShowAvailableQuestsPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowAvailableQuestsPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowChainLightningPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowChainLightningPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowChainLightningPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Chain Lightning.
+ ///
+ public static string ShowChainLightningPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowChainLightningPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowCharacterCreationFailedPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowCharacterCreationFailedPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowCharacterCreationFailedPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Character Creation Failed.
+ ///
+ public static string ShowCharacterCreationFailedPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowCharacterCreationFailedPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowCharacterDeleteResponsePlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowCharacterDeleteResponsePlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowCharacterDeleteResponsePlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Character Delete Response.
+ ///
+ public static string ShowCharacterDeleteResponsePlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowCharacterDeleteResponsePlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The extended implementation of the IShowCharacterListPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowCharacterListExtendedPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowCharacterListExtendedPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Character List Extended.
+ ///
+ public static string ShowCharacterListExtendedPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowCharacterListExtendedPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowCharacterListPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowCharacterListPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowCharacterListPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Character List.
+ ///
+ public static string ShowCharacterListPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowCharacterListPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The implementation of the IShowCharacterListPlugIn which is forwarding everything to the game client with specific data packets for version 0.75..
+ ///
+ public static string ShowCharacterListPlugIn075_Description {
+ get {
+ return ResourceManager.GetString("ShowCharacterListPlugIn075_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to ShowCharacterListPlugIn v0.75.
+ ///
+ public static string ShowCharacterListPlugIn075_Name {
+ get {
+ return ResourceManager.GetString("ShowCharacterListPlugIn075_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The implementation of the IShowCharacterListPlugIn which is forwarding everything to the game client with specific data packets for version 0.75..
+ ///
+ public static string ShowCharacterListPlugIn095_Description {
+ get {
+ return ResourceManager.GetString("ShowCharacterListPlugIn095_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Character List (095).
+ ///
+ public static string ShowCharacterListPlugIn095_Name {
+ get {
+ return ResourceManager.GetString("ShowCharacterListPlugIn095_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowCreatedCharacterPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowCreatedCharacterPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowCreatedCharacterPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Created Character.
+ ///
+ public static string ShowCreatedCharacterPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowCreatedCharacterPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowDialogPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowDialogPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowDialogPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Dialog.
+ ///
+ public static string ShowDialogPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowDialogPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowDroppedItemsPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowDroppedItemsPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowDroppedItemsPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Dropped Items.
+ ///
+ public static string ShowDroppedItemsPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowDroppedItemsPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowDuelRequestPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowDuelRequestPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowDuelRequestPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Duel Request.
+ ///
+ public static string ShowDuelRequestPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowDuelRequestPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowDuelRequestResultPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowDuelRequestResultPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowDuelRequestResultPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Duel Request Result.
+ ///
+ public static string ShowDuelRequestResultPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowDuelRequestResultPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowDuelScoreUpdatePlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowDuelScoreUpdatePlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowDuelScoreUpdatePlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Duel Score Update.
+ ///
+ public static string ShowDuelScoreUpdatePlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowDuelScoreUpdatePlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowEffectPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowEffectPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowEffectPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Effect.
+ ///
+ public static string ShowEffectPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowEffectPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowFriendInvitationResultPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowFriendInvitationResultPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowFriendInvitationResultPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Friend Invitation Result.
+ ///
+ public static string ShowFriendInvitationResultPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowFriendInvitationResultPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowFriendRequestPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowFriendRequestPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowFriendRequestPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Friend Request.
+ ///
+ public static string ShowFriendRequestPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowFriendRequestPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowGuildCreateResultPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowGuildCreateResultPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowGuildCreateResultPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Guild Create Result.
+ ///
+ public static string ShowGuildCreateResultPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowGuildCreateResultPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowGuildCreationDialogPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowGuildCreationDialogPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowGuildCreationDialogPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Guild Creation Dialog.
+ ///
+ public static string ShowGuildCreationDialogPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowGuildCreationDialogPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowGuildInfoPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowGuildInfoPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowGuildInfoPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Guild Info.
+ ///
+ public static string ShowGuildInfoPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowGuildInfoPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowGuildJoinRequestPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowGuildJoinRequestPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowGuildJoinRequestPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Guild Join Request.
+ ///
+ public static string ShowGuildJoinRequestPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowGuildJoinRequestPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowGuildListPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowGuildListPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowGuildListPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Guild List.
+ ///
+ public static string ShowGuildListPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowGuildListPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowGuildListPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowGuildListPlugIn075_Description {
+ get {
+ return ResourceManager.GetString("ShowGuildListPlugIn075_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Guild List (075).
+ ///
+ public static string ShowGuildListPlugIn075_Name {
+ get {
+ return ResourceManager.GetString("ShowGuildListPlugIn075_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowGuildMasterDialogPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowGuildMasterDialogPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowGuildMasterDialogPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Guild Master Dialog.
+ ///
+ public static string ShowGuildMasterDialogPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowGuildMasterDialogPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowGuildWarDeclaredPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowGuildWarDeclaredPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowGuildWarDeclaredPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Guild War Declared.
+ ///
+ public static string ShowGuildWarDeclaredPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowGuildWarDeclaredPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowGuildWarRequestPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowGuildWarRequestPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowGuildWarRequestPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Guild War Request.
+ ///
+ public static string ShowGuildWarRequestPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowGuildWarRequestPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowGuildWarResultPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowGuildWarResultPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowGuildWarResultPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Guild War Result.
+ ///
+ public static string ShowGuildWarResultPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowGuildWarResultPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The extended implementation of the IShowHitPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowHitExtendedPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowHitExtendedPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Hit Extended.
+ ///
+ public static string ShowHitExtendedPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowHitExtendedPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowHitPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowHitPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowHitPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Hit.
+ ///
+ public static string ShowHitPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowHitPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowItemCraftingResultPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowItemCraftingResultPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowItemCraftingResultPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Item Crafting Result.
+ ///
+ public static string ShowItemCraftingResultPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowItemCraftingResultPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the ShowItemDropEffectPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowItemDropEffectPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowItemDropEffectPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Item Drop Effect.
+ ///
+ public static string ShowItemDropEffectPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowItemDropEffectPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The extended implementation of the IShowLetterPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowLetterExtendedPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowLetterExtendedPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Letter Extended.
+ ///
+ public static string ShowLetterExtendedPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowLetterExtendedPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowLetterPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowLetterPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowLetterPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Letter.
+ ///
+ public static string ShowLetterPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowLetterPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowLoginResultPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowLoginResultPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowLoginResultPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Login Result.
+ ///
+ public static string ShowLoginResultPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowLoginResultPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowLoginWindowPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowLoginWindowPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowLoginWindowPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Login Window.
+ ///
+ public static string ShowLoginWindowPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowLoginWindowPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowMerchantStoreItemListPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowMerchantStoreItemListPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowMerchantStoreItemListPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Merchant Store Item List.
+ ///
+ public static string ShowMerchantStoreItemListPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowMerchantStoreItemListPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowMessageOfObjectPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowMessageOfObjectPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowMessageOfObjectPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Message Of Object.
+ ///
+ public static string ShowMessageOfObjectPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowMessageOfObjectPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowMessagePlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowMessagePlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowMessagePlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Message.
+ ///
+ public static string ShowMessagePlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowMessagePlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowMiniGameEnterResultPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowMiniGameEnterResultViewPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowMiniGameEnterResultViewPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Mini Game Enter Result View.
+ ///
+ public static string ShowMiniGameEnterResultViewPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowMiniGameEnterResultViewPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowMiniGameOpeningStatePlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowMiniGameOpeningStateViewPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowMiniGameOpeningStateViewPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Mini Game Opening State View.
+ ///
+ public static string ShowMiniGameOpeningStateViewPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowMiniGameOpeningStateViewPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowMoneyDropPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowMoneyDrop075_Description {
+ get {
+ return ResourceManager.GetString("ShowMoneyDrop075_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to ShowMoneyDrop 0.75.
+ ///
+ public static string ShowMoneyDrop075_Name {
+ get {
+ return ResourceManager.GetString("ShowMoneyDrop075_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The extended implementation of the IShowMoneyDropPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowMoneyDropExtendedPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowMoneyDropExtendedPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Money Drop Extended.
+ ///
+ public static string ShowMoneyDropExtendedPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowMoneyDropExtendedPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowMoneyDropPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowMoneyDropPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowMoneyDropPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Money Drop.
+ ///
+ public static string ShowMoneyDropPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowMoneyDropPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowPartyRequestPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowPartyRequestPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowPartyRequestPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Party Request.
+ ///
+ public static string ShowPartyRequestPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowPartyRequestPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowRageAttackPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowRageAttackPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowRageAttackPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Rage Attack.
+ ///
+ public static string ShowRageAttackPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowRageAttackPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowRageAttackRangePlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowRageAttackRangePlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowRageAttackRangePlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Rage Attack Range.
+ ///
+ public static string ShowRageAttackRangePlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowRageAttackRangePlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The extended implementation of the IShowShopItemListPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowShopItemListExtendedPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowShopItemListExtendedPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Shop Item List Extended.
+ ///
+ public static string ShowShopItemListExtendedPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowShopItemListExtendedPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowShopItemListPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowShopItemListPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowShopItemListPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Shop Item List.
+ ///
+ public static string ShowShopItemListPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowShopItemListPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowShopsOfPlayersPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowShopsOfPlayersPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowShopsOfPlayersPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Shops Of Players.
+ ///
+ public static string ShowShopsOfPlayersPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowShopsOfPlayersPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowShowGuildWarRequestResultPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowShowGuildWarRequestResultPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowShowGuildWarRequestResultPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Show Guild War Request Result.
+ ///
+ public static string ShowShowGuildWarRequestResultPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowShowGuildWarRequestResultPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowSkillAnimationPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowSkillAnimationPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowSkillAnimationPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Skill Animation.
+ ///
+ public static string ShowSkillAnimationPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowSkillAnimationPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowSkillAnimationPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowSkillAnimationPlugIn075_Description {
+ get {
+ return ResourceManager.GetString("ShowSkillAnimationPlugIn075_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Skill Animation (075).
+ ///
+ public static string ShowSkillAnimationPlugIn075_Name {
+ get {
+ return ResourceManager.GetString("ShowSkillAnimationPlugIn075_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowSkillAnimationPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowSkillAnimationPlugIn095_Description {
+ get {
+ return ResourceManager.GetString("ShowSkillAnimationPlugIn095_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Skill Animation (095).
+ ///
+ public static string ShowSkillAnimationPlugIn095_Name {
+ get {
+ return ResourceManager.GetString("ShowSkillAnimationPlugIn095_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowTradeRequestAnswerPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowTradeRequestAnswerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowTradeRequestAnswerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Trade Request Answer.
+ ///
+ public static string ShowTradeRequestAnswerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowTradeRequestAnswerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowTradeRequestPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowTradeRequestPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowTradeRequestPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Trade Request.
+ ///
+ public static string ShowTradeRequestPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowTradeRequestPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowVaultLockChangeResponse which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowVaultLockChangeResponsePlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowVaultLockChangeResponsePlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Vault Lock Change Response.
+ ///
+ public static string ShowVaultLockChangeResponsePlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowVaultLockChangeResponsePlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowVaultPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string ShowVaultPlugIn_Description {
+ get {
+ return ResourceManager.GetString("ShowVaultPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Vault.
+ ///
+ public static string ShowVaultPlugIn_Name {
+ get {
+ return ResourceManager.GetString("ShowVaultPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the ISkillListViewPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string SkillListViewPlugIn_Description {
+ get {
+ return ResourceManager.GetString("SkillListViewPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Skill List View.
+ ///
+ public static string SkillListViewPlugIn_Name {
+ get {
+ return ResourceManager.GetString("SkillListViewPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The implementation of the ISkillListViewPlugIn for version 0.75 which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string SkillListViewPlugIn075_Description {
+ get {
+ return ResourceManager.GetString("SkillListViewPlugIn075_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Skill List View (075).
+ ///
+ public static string SkillListViewPlugIn075_Name {
+ get {
+ return ResourceManager.GetString("SkillListViewPlugIn075_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The implementation of the ISkillListViewPlugIn for version 0.95 which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string SkillListViewPlugIn095_Description {
+ get {
+ return ResourceManager.GetString("SkillListViewPlugIn095_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Skill List View (095).
+ ///
+ public static string SkillListViewPlugIn095_Name {
+ get {
+ return ResourceManager.GetString("SkillListViewPlugIn095_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IShowSkillStageUpdate which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string SkillStageUpdatePlugInPlugIn_Description {
+ get {
+ return ResourceManager.GetString("SkillStageUpdatePlugInPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Skill Stage Update Plug In.
+ ///
+ public static string SkillStageUpdatePlugInPlugIn_Name {
+ get {
+ return ResourceManager.GetString("SkillStageUpdatePlugInPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The extended implementation of the IStatIncreaseResultPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string StatIncreaseResultExtendedPlugIn_Description {
+ get {
+ return ResourceManager.GetString("StatIncreaseResultExtendedPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to StatIncreaseResultPlugIn.
+ ///
+ public static string StatIncreaseResultExtendedPlugIn_Name {
+ get {
+ return ResourceManager.GetString("StatIncreaseResultExtendedPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IStatIncreaseResultPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string StatIncreaseResultPlugIn_Description {
+ get {
+ return ResourceManager.GetString("StatIncreaseResultPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Stat Increase Result.
+ ///
+ public static string StatIncreaseResultPlugIn_Name {
+ get {
+ return ResourceManager.GetString("StatIncreaseResultPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for player store related packets..
+ ///
+ public static string StoreHandlerGroupPlugIn_Description {
+ get {
+ return ResourceManager.GetString("StoreHandlerGroupPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Store Handler Group.
+ ///
+ public static string StoreHandlerGroupPlugIn_Name {
+ get {
+ return ResourceManager.GetString("StoreHandlerGroupPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for talk npc request packets..
+ ///
+ public static string TalkNpcHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("TalkNpcHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Talk Npc Handler.
+ ///
+ public static string TalkNpcHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("TalkNpcHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for talk npc request packets..
+ ///
+ public static string TalkNpcHandlerPlugIn075_Description {
+ get {
+ return ResourceManager.GetString("TalkNpcHandlerPlugIn075_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Talk Npc Handler (075).
+ ///
+ public static string TalkNpcHandlerPlugIn075_Name {
+ get {
+ return ResourceManager.GetString("TalkNpcHandlerPlugIn075_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for targeted skill packets..
+ ///
+ public static string TargetedSkillHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("TargetedSkillHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Targeted Skill Handler.
+ ///
+ public static string TargetedSkillHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("TargetedSkillHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for targeted skill packets for version 0.75.
+ ///
+ public static string TargetedSkillHandlerPlugIn075_Description {
+ get {
+ return ResourceManager.GetString("TargetedSkillHandlerPlugIn075_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Targeted Skill Handler (075).
+ ///
+ public static string TargetedSkillHandlerPlugIn075_Name {
+ get {
+ return ResourceManager.GetString("TargetedSkillHandlerPlugIn075_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for targeted skill packets for version 0.95..
+ ///
+ public static string TargetedSkillHandlerPlugIn095_Description {
+ get {
+ return ResourceManager.GetString("TargetedSkillHandlerPlugIn095_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Targeted Skill Handler (095).
+ ///
+ public static string TargetedSkillHandlerPlugIn095_Name {
+ get {
+ return ResourceManager.GetString("TargetedSkillHandlerPlugIn095_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the ITeleportPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string TeleportPlugIn_Description {
+ get {
+ return ResourceManager.GetString("TeleportPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Teleport.
+ ///
+ public static string TeleportPlugIn_Name {
+ get {
+ return ResourceManager.GetString("TeleportPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the ITeleportPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string TeleportPlugIn075_Description {
+ get {
+ return ResourceManager.GetString("TeleportPlugIn075_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Teleport (075).
+ ///
+ public static string TeleportPlugIn075_Name {
+ get {
+ return ResourceManager.GetString("TeleportPlugIn075_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for target teleport packets of the teleport ally skill..
+ ///
+ public static string TeleportTargetHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("TeleportTargetHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Teleport Target Handler.
+ ///
+ public static string TeleportTargetHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("TeleportTargetHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Packet Handler which is called when a trade request gets answered by the player..
+ ///
+ public static string TradeAcceptHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("TradeAcceptHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Trade Accept Handler.
+ ///
+ public static string TradeAcceptHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("TradeAcceptHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the trade button packets..
+ ///
+ public static string TradeButtonHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("TradeButtonHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Trade Button Handler.
+ ///
+ public static string TradeButtonHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("TradeButtonHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the trade cancel packets..
+ ///
+ public static string TradeCancelHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("TradeCancelHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Trade Cancel Handler.
+ ///
+ public static string TradeCancelHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("TradeCancelHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the ITradeFinishedPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string TradeFinishedPlugIn_Description {
+ get {
+ return ResourceManager.GetString("TradeFinishedPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Trade Finished.
+ ///
+ public static string TradeFinishedPlugIn_Name {
+ get {
+ return ResourceManager.GetString("TradeFinishedPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the ITradeItemAppearPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string TradeItemAppearPlugIn_Description {
+ get {
+ return ResourceManager.GetString("TradeItemAppearPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Trade Item Appear.
+ ///
+ public static string TradeItemAppearPlugIn_Name {
+ get {
+ return ResourceManager.GetString("TradeItemAppearPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the ITradeItemDisappearPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string TradeItemDisappearPlugIn_Description {
+ get {
+ return ResourceManager.GetString("TradeItemDisappearPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Trade Item Disappear.
+ ///
+ public static string TradeItemDisappearPlugIn_Name {
+ get {
+ return ResourceManager.GetString("TradeItemDisappearPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the trade money packets..
+ ///
+ public static string TradeMoneyHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("TradeMoneyHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Trade Money Handler.
+ ///
+ public static string TradeMoneyHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("TradeMoneyHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handles the trade request packets..
+ ///
+ public static string TradeRequestHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("TradeRequestHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Trade Request Handler.
+ ///
+ public static string TradeRequestHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("TradeRequestHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Packet handler for vault unlock packets (0x83, 0x00 identifier)..
+ ///
+ public static string UnlockVaultPlugIn_Description {
+ get {
+ return ResourceManager.GetString("UnlockVaultPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Vault Lock - Unlock.
+ ///
+ public static string UnlockVaultPlugIn_Name {
+ get {
+ return ResourceManager.GetString("UnlockVaultPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The extended implementation of the IUpdateCharacterBaseStatsPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string UpdateCharacterBaseStatsExtendedPlugIn_Description {
+ get {
+ return ResourceManager.GetString("UpdateCharacterBaseStatsExtendedPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Update Character Base Stats Extended.
+ ///
+ public static string UpdateCharacterBaseStatsExtendedPlugIn_Name {
+ get {
+ return ResourceManager.GetString("UpdateCharacterBaseStatsExtendedPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IUpdateCharacterHeroStatePlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string UpdateCharacterHeroStatePlugIn_Description {
+ get {
+ return ResourceManager.GetString("UpdateCharacterHeroStatePlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Update Character Hero State.
+ ///
+ public static string UpdateCharacterHeroStatePlugIn_Name {
+ get {
+ return ResourceManager.GetString("UpdateCharacterHeroStatePlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The extended implementation of the IUpdateCharacterStatsPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string UpdateCharacterStatsExtendedPlugIn_Description {
+ get {
+ return ResourceManager.GetString("UpdateCharacterStatsExtendedPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Update Character Stats Extended.
+ ///
+ public static string UpdateCharacterStatsExtendedPlugIn_Name {
+ get {
+ return ResourceManager.GetString("UpdateCharacterStatsExtendedPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IUpdateCharacterStatsPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string UpdateCharacterStatsPlugIn_Description {
+ get {
+ return ResourceManager.GetString("UpdateCharacterStatsPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Update Character Stats.
+ ///
+ public static string UpdateCharacterStatsPlugIn_Name {
+ get {
+ return ResourceManager.GetString("UpdateCharacterStatsPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IUpdateCharacterStatsPlugIn which is forwarding everything to the game client with specific data packets for version 0.75..
+ ///
+ public static string UpdateCharacterStatsPlugIn075_Description {
+ get {
+ return ResourceManager.GetString("UpdateCharacterStatsPlugIn075_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to UpdateCharacterStatsPlugIn 0.75.
+ ///
+ public static string UpdateCharacterStatsPlugIn075_Name {
+ get {
+ return ResourceManager.GetString("UpdateCharacterStatsPlugIn075_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IUpdateCharacterStatsPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string UpdateCharacterStatsPlugIn097_Description {
+ get {
+ return ResourceManager.GetString("UpdateCharacterStatsPlugIn097_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Update Character Stats (097).
+ ///
+ public static string UpdateCharacterStatsPlugIn097_Name {
+ get {
+ return ResourceManager.GetString("UpdateCharacterStatsPlugIn097_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IUpdateInventoryListPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string UpdateInventoryListPlugIn_Description {
+ get {
+ return ResourceManager.GetString("UpdateInventoryListPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Update Inventory List.
+ ///
+ public static string UpdateInventoryListPlugIn_Name {
+ get {
+ return ResourceManager.GetString("UpdateInventoryListPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The extended implementation of the IUpdateLevelPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string UpdateLevelExtendedPlugIn_Description {
+ get {
+ return ResourceManager.GetString("UpdateLevelExtendedPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Update Level Extended.
+ ///
+ public static string UpdateLevelExtendedPlugIn_Name {
+ get {
+ return ResourceManager.GetString("UpdateLevelExtendedPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IUpdateLevelPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string UpdateLevelPlugIn_Description {
+ get {
+ return ResourceManager.GetString("UpdateLevelPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Update Level.
+ ///
+ public static string UpdateLevelPlugIn_Name {
+ get {
+ return ResourceManager.GetString("UpdateLevelPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IUpdateMasterSkillsPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string UpdateMasterSkillsPlugIn_Description {
+ get {
+ return ResourceManager.GetString("UpdateMasterSkillsPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Update Master Skills.
+ ///
+ public static string UpdateMasterSkillsPlugIn_Name {
+ get {
+ return ResourceManager.GetString("UpdateMasterSkillsPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The extended implementation of the IUpdateMasterStatsPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string UpdateMasterStatsExtendedPlugIn_Description {
+ get {
+ return ResourceManager.GetString("UpdateMasterStatsExtendedPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Update Master Stats Extended.
+ ///
+ public static string UpdateMasterStatsExtendedPlugIn_Name {
+ get {
+ return ResourceManager.GetString("UpdateMasterStatsExtendedPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IUpdateMasterStatsPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string UpdateMasterStatsPlugIn_Description {
+ get {
+ return ResourceManager.GetString("UpdateMasterStatsPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Update Master Stats.
+ ///
+ public static string UpdateMasterStatsPlugIn_Name {
+ get {
+ return ResourceManager.GetString("UpdateMasterStatsPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IUpdateMiniGameStateViewPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string UpdateMiniGameStateViewViewPlugIn_Description {
+ get {
+ return ResourceManager.GetString("UpdateMiniGameStateViewViewPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Update Mini Game State View View.
+ ///
+ public static string UpdateMiniGameStateViewViewPlugIn_Name {
+ get {
+ return ResourceManager.GetString("UpdateMiniGameStateViewViewPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IUpdateMoneyPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string UpdateMoneyPlugIn_Description {
+ get {
+ return ResourceManager.GetString("UpdateMoneyPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Update Money.
+ ///
+ public static string UpdateMoneyPlugIn_Name {
+ get {
+ return ResourceManager.GetString("UpdateMoneyPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IUpdatePartyListPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string UpdatePartyListPlugIn_Description {
+ get {
+ return ResourceManager.GetString("UpdatePartyListPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Update Party List.
+ ///
+ public static string UpdatePartyListPlugIn_Name {
+ get {
+ return ResourceManager.GetString("UpdatePartyListPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IUpdatePartyListPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string UpdatePartyListPlugIn075_Description {
+ get {
+ return ResourceManager.GetString("UpdatePartyListPlugIn075_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Update Party List (075).
+ ///
+ public static string UpdatePartyListPlugIn075_Name {
+ get {
+ return ResourceManager.GetString("UpdatePartyListPlugIn075_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IUpdateRotationPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string UpdateRotationPlugIn_Description {
+ get {
+ return ResourceManager.GetString("UpdateRotationPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Update Rotation.
+ ///
+ public static string UpdateRotationPlugIn_Name {
+ get {
+ return ResourceManager.GetString("UpdateRotationPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The extended implementation of the IUpdateStatsPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string UpdateStatsExtendedPlugIn_Description {
+ get {
+ return ResourceManager.GetString("UpdateStatsExtendedPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Update Stats Extended.
+ ///
+ public static string UpdateStatsExtendedPlugIn_Name {
+ get {
+ return ResourceManager.GetString("UpdateStatsExtendedPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IUpdateStatsPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string UpdateStatsPlugIn_Description {
+ get {
+ return ResourceManager.GetString("UpdateStatsPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Update Stats.
+ ///
+ public static string UpdateStatsPlugIn_Name {
+ get {
+ return ResourceManager.GetString("UpdateStatsPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IUpdateVaultMoneyPlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string UpdateVaultMoneyPlugIn_Description {
+ get {
+ return ResourceManager.GetString("UpdateVaultMoneyPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Update Vault Money.
+ ///
+ public static string UpdateVaultMoneyPlugIn_Name {
+ get {
+ return ResourceManager.GetString("UpdateVaultMoneyPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IUpdateVaultStatePlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string UpdateVaultStatePlugIn_Description {
+ get {
+ return ResourceManager.GetString("UpdateVaultStatePlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Update Vault State.
+ ///
+ public static string UpdateVaultStatePlugIn_Name {
+ get {
+ return ResourceManager.GetString("UpdateVaultStatePlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for warehouse close packets..
+ ///
+ public static string VaultCloseHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("VaultCloseHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Vault Close Handler.
+ ///
+ public static string VaultCloseHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("VaultCloseHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Packet handler for vault lock packets (0x83 identifier)..
+ ///
+ public static string VaultLockGroupPlugIn_Description {
+ get {
+ return ResourceManager.GetString("VaultLockGroupPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Vault Lock Packet Handler.
+ ///
+ public static string VaultLockGroupPlugIn_Name {
+ get {
+ return ResourceManager.GetString("VaultLockGroupPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for warehouse money packets..
+ ///
+ public static string VaultMoneyHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("VaultMoneyHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Vault Money Handler.
+ ///
+ public static string VaultMoneyHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("VaultMoneyHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for warp gate packets..
+ ///
+ public static string WarpGateHandler075PlugIn_Description {
+ get {
+ return ResourceManager.GetString("WarpGateHandler075PlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Warp Gate Handler075.
+ ///
+ public static string WarpGateHandler075PlugIn_Name {
+ get {
+ return ResourceManager.GetString("WarpGateHandler075PlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for warp gate packets..
+ ///
+ public static string WarpGateHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("WarpGateHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Warp Gate Handler.
+ ///
+ public static string WarpGateHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("WarpGateHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Handler for warp request packets..
+ ///
+ public static string WarpHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("WarpHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Warp Handler.
+ ///
+ public static string WarpHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("WarpHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The default implementation of the IWeatherStatusUpdatePlugIn which is forwarding everything to the game client with specific data packets..
+ ///
+ public static string WeatherStatusUpdatePlugIn_Description {
+ get {
+ return ResourceManager.GetString("WeatherStatusUpdatePlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Weather status update.
+ ///
+ public static string WeatherStatusUpdatePlugIn_Name {
+ get {
+ return ResourceManager.GetString("WeatherStatusUpdatePlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Packet handler for whispered chat messages..
+ ///
+ public static string WhisperedChatMessageHandlerPlugIn_Description {
+ get {
+ return ResourceManager.GetString("WhisperedChatMessageHandlerPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Whisper Message Handler.
+ ///
+ public static string WhisperedChatMessageHandlerPlugIn_Name {
+ get {
+ return ResourceManager.GetString("WhisperedChatMessageHandlerPlugIn_Name", resourceCulture);
+ }
+ }
+ }
+}
diff --git a/src/GameServer/Properties/PlugInResources.resx b/src/GameServer/Properties/PlugInResources.resx
new file mode 100644
index 000000000..b2688a78f
--- /dev/null
+++ b/src/GameServer/Properties/PlugInResources.resx
@@ -0,0 +1,2112 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+ Animation Handler
+
+
+ Handler for animation packets.
+
+
+ Area Skill Attack Handler
+
+
+ Handler for area skill attack packets.
+
+
+ Area Skill Attack Handler (075)
+
+
+ Handler for area skill attack packets for version 0.75
+
+
+ Area Skill Attack Handler (095)
+
+
+ Handler for area skill attack packets for version 0.95
+
+
+ Area Skill Hit Handler
+
+
+ Handler for area skill hit packets.
+
+
+ Area Skill Hit Handler (075)
+
+
+ Handler for area skill hit packets.
+
+
+ Area Skill Hit Handler (095)
+
+
+ Handler for area skill hit packets.
+
+
+ Character move handler (ENG)
+
+
+ Packet handler for walk packets.
+
+
+ Character move handler (0.75)
+
+
+ Packet handler for move packets, version 0.75.
+
+
+ Character walk handler
+
+
+ Packet handler for walk packets.
+
+
+ Character walk handler
+
+
+ Packet handler for walk packets.
+
+
+ Chat Message Handler
+
+
+ Packet handler for chat messages.
+
+
+ Close Npc Dialog Handler
+
+
+ Packet handler for close npc packets.
+
+
+ Enter On Gatekeeper Handler
+
+
+ Handler for EnterOnGatekeeperRequest packets.
+
+
+ Enter On Werewolf Handler
+
+
+ Handler for EnterOnWerewolfRequest packets.
+
+
+ Hit Handler
+
+
+ Handler for hit packets.
+
+
+ HitHandlerPlugIn 0.75
+
+
+ Handler for hit packets.
+
+
+ Talk Npc Handler
+
+
+ Handler for talk npc request packets.
+
+
+ Talk Npc Handler (075)
+
+
+ Handler for talk npc request packets.
+
+
+ Targeted Skill Handler
+
+
+ Handler for targeted skill packets.
+
+
+ Targeted Skill Handler (075)
+
+
+ Handler for targeted skill packets for version 0.75
+
+
+ Targeted Skill Handler (095)
+
+
+ Handler for targeted skill packets for version 0.95.
+
+
+ Teleport Target Handler
+
+
+ Handler for target teleport packets of the teleport ally skill.
+
+
+ Warp Gate Handler075
+
+
+ Handler for warp gate packets.
+
+
+ Warp Gate Handler
+
+
+ Handler for warp gate packets.
+
+
+ Warp Handler
+
+
+ Handler for warp request packets.
+
+
+ Whisper Message Handler
+
+
+ Packet handler for whispered chat messages.
+
+
+ Default appearance serializer
+
+
+ Default serializer for the appearance of a player. It will most likely only work correctly in season 6.
+
+
+ Appearance Serializer 0.75
+
+
+ Serializer for the appearance of a player, compatible with the client of version 0.75.
+
+
+ AppearanceSerializer095
+
+
+ Serializer for the appearance of a player, compatible with the client of version 0.95
+
+
+ Extended appearance serializer
+
+
+ Extended serializer for the appearance of a player.
+
+
+ Chat View PlugIn
+
+
+ View Plugin to send chat messages to the player
+
+
+ Consume Special Item
+
+
+ The default implementation of the IConsumeSpecialItemPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Item Serializer
+
+
+ The default item serializer. It's most likely only correct for season 6.
+
+
+ Item Serializer 0.75
+
+
+ The item serializer for game client version 0.75
+
+
+ ItemSerializer095
+
+
+ The item serializer for game client version 0.95
+
+
+ Item Serializer
+
+
+ The extended item serializer. It's most likely only correct for season 6.
+
+
+ Show Message
+
+
+ The default implementation of the IShowMessagePlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Cancel Guild Creation Handler
+
+
+ Handler for CancelGuildCreation packets.
+
+
+ Guild Create Handler
+
+
+ Handler for guild create packets.
+
+
+ Guild Create Handler (075)
+
+
+ Handler for guild create packets.
+
+
+ Guild Info Request Handler
+
+
+ Handler for guild info request packets.
+
+
+ Guild Kick Player Handler
+
+
+ Handler for guild player kick packets.
+
+
+ Guild List Request Handler
+
+
+ Handler for guild list request packets.
+
+
+ Guild Master Answer Handler
+
+
+ Handler for guild master answer packets.
+
+
+ Guild Request Answer Handler
+
+
+ Handler for guild request answer packets.
+
+
+ Guild Request Handler
+
+
+ Handler for guild requests.
+
+
+ Guild War Response Handler
+
+
+ Handler for guild war response packets.
+
+
+ Buy Npc Item Handler
+
+
+ Handler for npc item buy requests.
+
+
+ Chaos Mix Handler
+
+
+ Handler for chaos mix packets.
+
+
+ Consume Item Handler
+
+
+ Handler for item consume packets.
+
+
+ Consume Item Handler (075)
+
+
+ Handler for item consume packets of version 0.75
+
+
+ Drop Item Handler
+
+
+ Handler for drop item packets.
+
+
+ Item Move Extended Handler
+
+
+ Packet handler for extended item move packets.
+
+
+ Item Move Handler
+
+
+ Handler for item move packets.
+
+
+ Item Repair Handler
+
+
+ Handler for item repair packets.
+
+
+ Jewel Mix Handler
+
+
+ Handler for jewel mix packets.
+
+
+ Pickup Item Handler
+
+
+ Handler for item pickup packets.
+
+
+ PickupItemHandlerPlugIn 0.75
+
+
+ Handler for item pickup packets for version 0.75.
+
+
+ Sell Item To Npc Handler
+
+
+ Handler for item sale to npc packets.
+
+
+ Login
+
+
+ Packet handler for login packets.
+
+
+ Logout handler
+
+
+ Handler for logout packets.
+
+
+ Add Friend Handler
+
+
+ Handler for add friend packets.
+
+
+ Change Online State Handler
+
+
+ Handler for online state change packets.
+
+
+ Chat Request Handler
+
+
+ Handler for chat request packets.
+
+
+ Chat Room Invitation Request
+
+
+ Packet handler which handles chat room invitation requests, where a player invites additional players to an existing chat room.
+
+
+ Delete Friend Handler
+
+
+ Handler for delete friend packets.
+
+
+ Friend Add Response Handler
+
+
+ Handler for friend add response packets.
+
+
+ Letter Delete Handler
+
+
+ Handler for letter delete packets.
+
+
+ Letter Read Request Handler
+
+
+ Handler for letter read request packets.
+
+
+ Letter Send Handler
+
+
+ Handler for letter send packets.
+
+
+ Blood Castle Enter Handler
+
+
+ Handler for blood castle enter request packets.
+
+
+ Chaos Castle Enter Handler
+
+
+ Handler for chaos castle enter request packets.
+
+
+ Devil Square Enter Handler
+
+
+ Handler for devil square enter packets.
+
+
+ Mini Game Opening State Request Handler
+
+
+ Handler for mini game opening state request packets.
+
+
+ MuHelperSaveDataRequestHandlerPlugin
+
+
+ Handler for mu bot data save request.
+
+
+ Mu Helper Status Change Request Handler
+
+
+ Handler for MU Helper status change requests.
+
+
+ Party Kick Handler
+
+
+ Handler for party kick packets.
+
+
+ Party List Request Handler
+
+
+ Handler for party list request packets.
+
+
+ Party Request Handler
+
+
+ Handler for party request packets.
+
+
+ Party Response Handler
+
+
+ Handler for party response packets.
+
+
+ Pet Command Request Handler
+
+
+ Handler for pet command request packets.
+
+
+ Pet Info Request Handler
+
+
+ Handler for pet info request packets.
+
+
+ Store Handler Group
+
+
+ Handler for player store related packets.
+
+
+ Trade Accept Handler
+
+
+ Packet Handler which is called when a trade request gets answered by the player.
+
+
+ Trade Button Handler
+
+
+ Handles the trade button packets.
+
+
+ Trade Cancel Handler
+
+
+ Handles the trade cancel packets.
+
+
+ Trade Money Handler
+
+
+ Handles the trade money packets.
+
+
+ Trade Request Handler
+
+
+ Handles the trade request packets.
+
+
+ Vault Close Handler
+
+
+ Handler for warehouse close packets.
+
+
+ Vault Money Handler
+
+
+ Handler for warehouse money packets.
+
+
+ Add Experience Extended
+
+
+ The extended implementation of the IAddExperiencePlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Add Experience
+
+
+ The default implementation of the IAddExperiencePlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Apply Key Configuration
+
+
+ The default implementation of the IUpdateVaultMoneyPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Character Focused
+
+
+ The default implementation of the ICharacterFocusedPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ CharacterFocusedPlugIn
+
+
+ The default implementation of the IFruitConsumptionResponsePlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Master Skill Level Changed
+
+
+ The default implementation of the IMasterSkillLevelChangedPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Character Creation Failed
+
+
+ The default implementation of the IShowCharacterCreationFailedPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Character Delete Response
+
+
+ The default implementation of the IShowCharacterDeleteResponsePlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Character List Extended
+
+
+ The extended implementation of the IShowCharacterListPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Character List
+
+
+ The default implementation of the IShowCharacterListPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ ShowCharacterListPlugIn v0.75
+
+
+ The implementation of the IShowCharacterListPlugIn which is forwarding everything to the game client with specific data packets for version 0.75.
+
+
+ Show Character List (095)
+
+
+ The implementation of the IShowCharacterListPlugIn which is forwarding everything to the game client with specific data packets for version 0.75.
+
+
+ Show Created Character
+
+
+ The default implementation of the IShowCreatedCharacterPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Dialog
+
+
+ The default implementation of the IShowDialogPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Effect
+
+
+ The default implementation of the IShowEffectPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Item Drop Effect
+
+
+ The default implementation of the ShowItemDropEffectPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Skill List View
+
+
+ The default implementation of the ISkillListViewPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Skill List View (075)
+
+
+ The implementation of the ISkillListViewPlugIn for version 0.75 which is forwarding everything to the game client with specific data packets.
+
+
+ Skill List View (095)
+
+
+ The implementation of the ISkillListViewPlugIn for version 0.95 which is forwarding everything to the game client with specific data packets.
+
+
+ StatIncreaseResultPlugIn
+
+
+ The extended implementation of the IStatIncreaseResultPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Stat Increase Result
+
+
+ The default implementation of the IStatIncreaseResultPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Update Character Base Stats Extended
+
+
+ The extended implementation of the IUpdateCharacterBaseStatsPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Update Character Hero State
+
+
+ The default implementation of the IUpdateCharacterHeroStatePlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Update Character Stats Extended
+
+
+ The extended implementation of the IUpdateCharacterStatsPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Update Character Stats
+
+
+ The default implementation of the IUpdateCharacterStatsPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ 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.
+
+
+ Update Character Stats (097)
+
+
+ The default implementation of the IUpdateCharacterStatsPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Update Level Extended
+
+
+ The extended implementation of the IUpdateLevelPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Update Level
+
+
+ The default implementation of the IUpdateLevelPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Update Master Skills
+
+
+ The default implementation of the IUpdateMasterSkillsPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Update Master Stats Extended
+
+
+ The extended implementation of the IUpdateMasterStatsPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Update Master Stats
+
+
+ The default implementation of the IUpdateMasterStatsPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Update Stats Extended
+
+
+ The extended implementation of the IUpdateStatsPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Update Stats
+
+
+ The default implementation of the IUpdateStatsPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Duel Ended
+
+
+ The default implementation of the IDuelEndedPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Duel Finished
+
+
+ The default implementation of the IDuelFinishedPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Duel Health Update
+
+
+ The default implementation of the IDuelHealthUpdatePlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Duel Spectator Added
+
+
+ The default implementation of the IDuelSpectatorAddedPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Duel Spectator List Update
+
+
+ The default implementation of the IDuelSpectatorListUpdatePlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Duel Spectator Removed
+
+
+ The default implementation of the IDuelSpectatorRemovedPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Duel Status Update
+
+
+ The default implementation of the IDuelStatusUpdatePlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Initialize Duel
+
+
+ The default implementation of the IInitializeDuelPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Duel Request
+
+
+ The default implementation of the IShowDuelRequestPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Duel Request Result
+
+
+ The default implementation of the IShowDuelRequestResultPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Duel Score Update
+
+
+ The default implementation of the IShowDuelScoreUpdatePlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Assign Players To Guild
+
+
+ The default implementation of the IAssignPlayersToGuildPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Assign Players To Guild (075)
+
+
+ The default implementation of the IAssignPlayersToGuildPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Guild Join Response
+
+
+ The default implementation of the IGuildJoinResponsePlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Guild Kick Result
+
+
+ The default implementation of the IGuildKickResultPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Guild War Score Update
+
+
+ The default implementation of the IGuildWarScoreUpdatePlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Player Left Guild
+
+
+ The default implementation of the IPlayerLeftGuildPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Guild Create Result
+
+
+ The default implementation of the IShowGuildCreateResultPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Guild Creation Dialog
+
+
+ The default implementation of the IShowGuildCreationDialogPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Guild Info
+
+
+ The default implementation of the IShowGuildInfoPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Guild Join Request
+
+
+ The default implementation of the IShowGuildJoinRequestPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Guild List
+
+
+ The default implementation of the IShowGuildListPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Guild List (075)
+
+
+ The default implementation of the IShowGuildListPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Guild Master Dialog
+
+
+ The default implementation of the IShowGuildMasterDialogPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Guild War Declared
+
+
+ The default implementation of the IShowGuildWarDeclaredPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Guild War Request
+
+
+ The default implementation of the IShowGuildWarRequestPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Guild War Result
+
+
+ The default implementation of the IShowGuildWarResultPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Show Guild War Request Result
+
+
+ The default implementation of the IShowShowGuildWarRequestResultPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Buy Npc Item Failed
+
+
+ The default implementation of the IBuyNpcItemFailedPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Item Appear
+
+
+ The default implementation of the IItemAppearPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Item Drop Result
+
+
+ The default implementation of the IItemDropResultPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Item Durability Changed
+
+
+ The default implementation of the IItemDurabilityChangedPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Item Moved
+
+
+ The default implementation of the IItemMovedPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Item Move Failed
+
+
+ The default implementation of the IItemMoveFailedPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Item Pick Up Failed
+
+
+ The default implementation of the IItemPickUpFailedPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Item Price Set Response
+
+
+ The default implementation of the IItemPriceSetResponsePlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Item Removed
+
+
+ The default implementation of the IItemRemovedPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Item Sold By Player Shop
+
+
+ The default implementation of the IItemSoldByPlayerShopPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Item Sold To Npc
+
+
+ The default implementation of the IItemSoldToNpcPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Item Upgraded
+
+
+ The default implementation of the IItemUpgradedPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Npc Item Bought
+
+
+ The default implementation of the INpcItemBoughtPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Player Shop Buy Request Result Extended
+
+
+ The extended implementation of the IPlayerShopBuyRequestResultPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Player Shop Buy Request Result
+
+
+ The default implementation of the IPlayerShopBuyRequestResultPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Requested Item Consumption Failed Extended
+
+
+ The extended implementation of the IRequestedItemConsumptionFailedPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Requested Item Consumption Failed
+
+
+ The default implementation of the IRequestedItemConsumptionFailedPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Update Inventory List
+
+
+ The default implementation of the IUpdateInventoryListPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Update Money
+
+
+ The default implementation of the IUpdateMoneyPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Logout
+
+
+ The default implementation of the ILogoutPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Login Result
+
+
+ The default implementation of the IShowLoginResultPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Login Window
+
+
+ The default implementation of the IShowLoginWindowPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Add To Letter List
+
+
+ The default implementation of the IAddToLetterListPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Chat Room Created
+
+
+ The default implementation of the IChatRoomCreatedPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Friend Added
+
+
+ The default implementation of the IFriendAddedPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Friend Deleted
+
+
+ The default implementation of the IFriendDeletedPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Friend State Update
+
+
+ The default implementation of the IFriendStateUpdatePlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Initialize Messenger
+
+
+ The default implementation of the IInitializeMessengerPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Letter Deleted
+
+
+ The default implementation of the ILetterDeletedPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Letter Send Result
+
+
+ The default implementation of the ILetterSendResultPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Friend Invitation Result
+
+
+ The default implementation of the IShowFriendInvitationResultPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Friend Request
+
+
+ The default implementation of the IShowFriendRequestPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Letter Extended
+
+
+ The extended implementation of the IShowLetterPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Letter
+
+
+ The default implementation of the IShowLetterPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ BloodCastleScoreTableViewPlugin
+
+
+ The default implementation of the IBloodCastleScoreTableViewPlugin which is forwarding everything to the game client with specific data packets.
+
+
+ Blood Castle State View
+
+
+ The default implementation of the IBloodCastleStateViewPlugin which is forwarding everything to the game client with specific data packets.
+
+
+ Change Terrain Attributes View
+
+
+ The default implementation of the IChangeTerrainAttributesViewPlugin which is forwarding everything to the game client with specific data packets.
+
+
+ Chaos Castle State View
+
+
+ The default implementation of the IChaosCastleStateViewPlugin which is forwarding everything to the game client with specific data packets.
+
+
+ MiniGameScoreTableViewPlugin
+
+
+ The default implementation of the IMiniGameScoreTableViewPlugin which is forwarding everything to the game client with specific data packets.
+
+
+ Show Mini Game Enter Result View
+
+
+ The default implementation of the IShowMiniGameEnterResultPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Mini Game Opening State View
+
+
+ The default implementation of the IShowMiniGameOpeningStatePlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Update Mini Game State View View
+
+
+ The default implementation of the IUpdateMiniGameStateViewPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Mu Helper Configuration Update
+
+
+ Sends the new MU Helper status to the client.
+
+
+ Mu Helper Status Update
+
+
+ Sends the MU Helper status update to the client.
+
+
+ Npc Dialog Closed (075)
+
+
+ The default implementation of the INpcDialogClosedPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Open Npc Window
+
+
+ The default implementation of the IOpenNpcWindowPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Item Crafting Result
+
+
+ The default implementation of the IShowItemCraftingResultPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Merchant Store Item List
+
+
+ The default implementation of the IShowMerchantStoreItemListPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Message Of Object
+
+
+ The default implementation of the IShowMessageOfObjectPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Party View
+
+
+ The default implementation of the party view which is forwarding everything to the game client which specific data packets.
+
+
+ Party Member Removed
+
+
+ The default implementation of the IPartyMemberRemovedPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Party Request
+
+
+ The default implementation of the IShowPartyRequestPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Update Party List
+
+
+ The default implementation of the IUpdatePartyListPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Update Party List (075)
+
+
+ The default implementation of the IUpdatePartyListPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Pet Attack View
+
+
+ View plugin to show pet attacks.
+
+
+ Pet Behaviour Changed View
+
+
+ View plugin to signal a changed pet behaviour.
+
+
+ Pet Info View
+
+
+ The default implementation of the IPetInfoViewPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Player Shop Closed
+
+
+ The default implementation of the IPlayerShopClosedPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Player Shop Opened
+
+
+ The default implementation of the IPlayerShopOpenedPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Shop Item List Extended
+
+
+ The extended implementation of the IShowShopItemListPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Shop Item List
+
+
+ The default implementation of the IShowShopItemListPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Shops Of Players
+
+
+ The default implementation of the IShowShopsOfPlayersPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Quest - Currently Active Quests
+
+
+ The default implementation of the ICurrentlyActiveQuestsPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Quest - Reward
+
+
+ The default implementation of the ILegacyQuestRewardPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Quest - Status Dialog
+
+
+ The default implementation of the ILegacyQuestStateDialogPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Quest - Cancelled
+
+
+ The default implementation of the IQuestCancelledPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Quest - Completion Response
+
+
+ The default implementation of the IQuestCompletionResponsePlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Quest - Event Quests Response
+
+
+ The default implementation of the IQuestEventResponsePlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Quest Progress Extended
+
+
+ The extended implementation of the IQuestProgressPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Quest Progress
+
+
+ The default implementation of the IQuestProgressPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Quest - Started
+
+
+ The default implementation of the IQuestStartedPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Quest State Response Extended
+
+
+ The extended implementation of the IQuestStateResponsePlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Quest - State response
+
+
+ The default implementation of the IQuestStateResponsePlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Quest - Step Info
+
+
+ The default implementation of the IQuestStepInfoPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Quest - Show available quests
+
+
+ The default implementation of the IShowAvailableQuestsPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Change Trade Button State
+
+
+ The default implementation of the IChangeTradeButtonStatePlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Requested Trade Money Has Been Set
+
+
+ The default implementation of the IRequestedTradeMoneyHasBeenSetPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Set Trade Money
+
+
+ The default implementation of the ISetTradeMoneyPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Trade Request Answer
+
+
+ The default implementation of the IShowTradeRequestAnswerPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Trade Request
+
+
+ The default implementation of the IShowTradeRequestPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Trade Finished
+
+
+ The default implementation of the ITradeFinishedPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Trade Item Appear
+
+
+ The default implementation of the ITradeItemAppearPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Trade Item Disappear
+
+
+ The default implementation of the ITradeItemDisappearPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Close Vault
+
+
+ The default implementation of the ICloseVaultPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Vault Lock Change Response
+
+
+ The default implementation of the IShowVaultLockChangeResponse which is forwarding everything to the game client with specific data packets.
+
+
+ Show Vault
+
+
+ The default implementation of the IShowVaultPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Update Vault Money
+
+
+ The default implementation of the IUpdateVaultMoneyPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Update Vault State
+
+
+ The default implementation of the IUpdateVaultStatePlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Appearance changed
+
+
+ The default implementation of the IAppearanceChangedPlugIn which is forwarding appearance changes of other players to the game client with specific data packets.
+
+
+ De & ActivateMagicEffectPlugIn
+
+
+ The default implementation of the IActivateMagicEffectPlugIn and IDeactivateMagicEffectPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ De Activate Magic Effect (075)
+
+
+ The default implementation of the IActivateMagicEffectPlugIn and IDeactivateMagicEffectPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Dropped Items Disappeared
+
+
+ The default implementation of the IDroppedItemsDisappearedPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Map Change
+
+
+ The default implementation of the IMapChangePlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Map Change (075)
+
+
+ The default implementation of the IMapChangePlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Map Event State Update
+
+
+ The default implementation of the IMapEventStateUpdatePlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ NPCs in scope PlugIn
+
+
+ The default implementation of the INewNpcsInScopePlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ 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.
+
+
+ New Npcs In Scope (095)
+
+
+ The default implementation of the INewNpcsInScopePlugIn which is forwarding everything to the game client with specific data packets for version 0.75.
+
+
+ New Players In Scope Extended
+
+
+ The extended implementation of the INewPlayersInScopePlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ New Players In Scope
+
+
+ The default implementation of the INewPlayersInScopePlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ New Players In Scope (075)
+
+
+ The default implementation of the INewPlayersInScopePlugIn which is forwarding everything to the game client with specific data packets for version 0.75.
+
+
+ New Players In Scope (095)
+
+
+ The default implementation of the INewPlayersInScopePlugIn which is forwarding everything to the game client with specific data packets for version 0.75.
+
+
+ Object Got Killed
+
+
+ The default implementation of the IObjectGotKilledPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Object Moved
+
+
+ The default implementation of the IObjectMovedPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ ObjectMovedPlugIn 0.75
+
+
+ The default implementation of the IObjectMovedPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ ObjectMovedPlugInExtended
+
+
+ The default implementation of the IObjectMovedPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Objects Out Of Scope
+
+
+ The default implementation of the IObjectsOutOfScopePlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Respawn After Death Extended
+
+
+ The default implementation of the IRespawnAfterDeathPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Respawn After Death
+
+
+ The default implementation of the IRespawnAfterDeathPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Respawn After Death (075)
+
+
+ The default implementation of the IRespawnAfterDeathPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Respawn After Death (095)
+
+
+ The default implementation of the IRespawnAfterDeathPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Animation
+
+
+ The default implementation of the IShowAnimationPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Animation (075)
+
+
+ The default implementation of the IShowAnimationPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Area Skill Animation
+
+
+ The default implementation of the IShowAreaSkillAnimationPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Area Skill Animation (075)
+
+
+ The default implementation of the IShowAreaSkillAnimationPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Area Skill Animation (095)
+
+
+ The default implementation of the IShowAreaSkillAnimationPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Chain Lightning
+
+
+ The default implementation of the IShowChainLightningPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Dropped Items
+
+
+ The default implementation of the IShowDroppedItemsPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Hit Extended
+
+
+ The extended implementation of the IShowHitPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Hit
+
+
+ The default implementation of the IShowHitPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ ShowMoneyDrop 0.75
+
+
+ The default implementation of the IShowMoneyDropPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Money Drop Extended
+
+
+ The extended implementation of the IShowMoneyDropPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Money Drop
+
+
+ The default implementation of the IShowMoneyDropPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Rage Attack
+
+
+ The default implementation of the IShowRageAttackPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Rage Attack Range
+
+
+ The default implementation of the IShowRageAttackRangePlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Skill Animation
+
+
+ The default implementation of the IShowSkillAnimationPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Skill Animation (075)
+
+
+ The default implementation of the IShowSkillAnimationPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Show Skill Animation (095)
+
+
+ The default implementation of the IShowSkillAnimationPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Skill Stage Update Plug In
+
+
+ The default implementation of the IShowSkillStageUpdate which is forwarding everything to the game client with specific data packets.
+
+
+ Teleport
+
+
+ The default implementation of the ITeleportPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Teleport (075)
+
+
+ The default implementation of the ITeleportPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Update Rotation
+
+
+ The default implementation of the IUpdateRotationPlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Weather status update
+
+
+ The default implementation of the IWeatherStatusUpdatePlugIn which is forwarding everything to the game client with specific data packets.
+
+
+ Crafting Dialog Close Request Handler
+
+
+ Handler for packets which should close the crafting dialog (Chaos Machine).
+
+
+ NPC Action Packet Handler
+
+
+ Packet handler for npc action packets (0xD0 identifier).
+
+
+ Rage Skill Attack Handler
+
+
+ Handler for rage fighter area skill attack packets (dark side).
+
+
+ Rage Skill Attack Request Handler
+
+
+ Handler for rage fighter area skill attack packets (dark side).
+
+
+ Character - Add Master Skill Points
+
+
+ Packet handler for character master skill point adding (0xF3, 0x52 identifier).
+
+
+ Character - Client ready
+
+
+ Packet handler for 'client ready' packets (0xF3, 0x12 identifier) which are sent after map changes.
+
+
+ Character - Create
+
+
+ Packet handler for character creation packets (0xF3, 0x01 identifier).
+
+
+ Character - Delete
+
+
+ Packet handler for character delete packets (0xF3, 0x02 identifier).
+
+
+ Character - Focus
+
+
+ Packet handler for character focus packets (0xF3, 0x15 identifier).
+
+
+ Character Packet Handler
+
+
+ Packet handler for character packets (0xF3 identifier).
+
+
+ Character - Key Configuration
+
+
+ Packet handler for character key configuration packets (0xF3, 0x30 identifier).
+
+
+ Character - Request List
+
+
+ Packet handler for character list request packets (0xF3, 0x00 identifier).
+
+
+ Character - Select
+
+
+ Packet handler for character select packets (0xF3, 0x03 identifier).
+
+
+ Character - Stat increase
+
+
+ Packet handler for character stat increase packets (0xF3, 0x06 identifier).
+
+
+ Duel Channel Join Request Handler
+
+
+ Handler for duel channel join request packets (new duel system), which is sent by a spectator.
+
+
+ Duel Channel Quit Request Handler
+
+
+ Handler for duel channel quit request packets (new duel system), which is sent by a spectator.
+
+
+ Duel Group Handler
+
+
+ Packet handler for duel packets (new system).
+
+
+ Duel Start Request Handler
+
+
+ Handler for duel start request packets (new duel system).
+
+
+ Duel Start Response Handler
+
+
+ Handler for duel start response packets (new duel system).
+
+
+ Duel Stop Response Handler
+
+
+ Handler for duel stop request packets (new duel system).
+
+
+ Log In & Out Group
+
+
+ Packet group handler for log in and out packets (0xF1).
+
+
+ Logout by cheat handler
+
+
+ Handler for logout (by cheat) packets.
+
+
+ MuHelperGroupHandler
+
+
+ Group packet handler for mu helper packets (0xBF identifier).
+
+
+ Player Shop - Buy request
+
+
+ Packet handler which handles buy requests to a player shop (3F 06).
+
+
+ Player Shop - Close
+
+
+ Packet handler which opens the player shop (3F 03).
+
+
+ Player Shop - Open
+
+
+ Packet handler which opens the player shop (3F 02).
+
+
+ Player Shop - Request Item List
+
+
+ Packet handler which handles requests for the item list of another player (3F 05).
+
+
+ Player Shop - Set Price
+
+
+ Packet handler which sets prices for an item in the player shop (3F 01).
+
+
+ Quest - Request active quests list
+
+
+ Packet handler for character focus packets (0xF3, 0x15 identifier).
+
+
+ Quest - Request available quests
+
+
+ Packet handler for available quest request packets (0xF6, 0x30 identifier)
+
+
+ Quest - Request available quests
+
+
+ Packet handler for (elf soldier) buff request packets (0xF6, 0x31 identifier)
+
+
+ Quest - Event quest state request
+
+
+ Packet handler for event quest state request packets (0xF6, 0x21 identifier)
+
+
+ Quest - Cancel Request
+
+
+ Packet handler for quest cancel request packets (0xF6, 0x0F identifier)
+
+
+ Quest - Client Action
+
+
+ Packet handler for quest client action packets (0xF6, 0x10 identifier)
+
+
+ Quest - Completion Request
+
+
+ Packet handler for quest completion request packets (0xF6, 0x0D identifier)
+
+
+ Quest Packet Handler
+
+
+ Packet handler for quest packets (0xF6 identifier).
+
+
+ Quest - Proceed Request
+
+
+ Packet handler for quest proceed request packets (0xF6, 0x0B identifier)
+
+
+ Quest - Select Request
+
+
+ Packet handler for quest select request packets (0xF6, 0x0A identifier)
+
+
+ Quest state list request (legacy)
+
+
+ Packet handler for the quest state list request for the legacy quest system (0xA0 identifier)
+
+
+ Quest - Request quest state
+
+
+ Packet handler for quest state request packets (0xF6, 0x1B identifier)
+
+
+ Quest state set request (legacy)
+
+
+ Packet handler for the quest state set request for the legacy quest system (0xA2 identifier).
+
+
+ Vault Lock - Remove Pin
+
+
+ Packet handler for vault pin remove packets (0x83, 0x02 identifier).
+
+
+ Vault Lock - Set Pin
+
+
+ Packet handler for vault pin set packets (0x83, 0x01 identifier).
+
+
+ Vault Lock - Unlock
+
+
+ Packet handler for vault unlock packets (0x83, 0x00 identifier).
+
+
+ Vault Lock Packet Handler
+
+
+ Packet handler for vault lock packets (0x83 identifier).
+
+
+ Appearance Changed Extended
+
+
+ The extended implementation of the IAppearanceChangedPlugIn which is forwarding appearance changes of other players to the game client with specific data packets.
+
+
diff --git a/src/GameServer/RemoteView/AppearanceSerializer.cs b/src/GameServer/RemoteView/AppearanceSerializer.cs
index 761bf23b7..fbe3085c7 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 = nameof(PlugInResources.AppearanceSerializer_Name), Description = nameof(PlugInResources.AppearanceSerializer_Description), ResourceType = typeof(PlugInResources))]
[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..6f6fa86c0 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 = nameof(PlugInResources.AppearanceSerializer075_Name), Description = nameof(PlugInResources.AppearanceSerializer075_Description), ResourceType = typeof(PlugInResources))]
[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..c6868687e 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(PlugInResources.AppearanceSerializer095_Name), Description = nameof(PlugInResources.AppearanceSerializer095_Description), ResourceType = typeof(PlugInResources))]
[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..9bd1cf7fd 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 = nameof(PlugInResources.AppearanceSerializerExtended_Name), Description = nameof(PlugInResources.AppearanceSerializerExtended_Description), ResourceType = typeof(PlugInResources))]
[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..1965d318b 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(PlugInResources.AddExperienceExtendedPlugIn_Name), Description = nameof(PlugInResources.AddExperienceExtendedPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..2471d7bfc 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 = nameof(PlugInResources.AddExperiencePlugIn_Name), Description = nameof(PlugInResources.AddExperiencePlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..d215c5d6c 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 = nameof(PlugInResources.ApplyKeyConfigurationPlugIn_Name), Description = nameof(PlugInResources.ApplyKeyConfigurationPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..a624d2a46 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 = nameof(PlugInResources.CharacterFocusedPlugIn_Name), Description = nameof(PlugInResources.CharacterFocusedPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..7ac1408ee 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 = nameof(PlugInResources.FruitConsumptionResultPlugIn_Name), Description = nameof(PlugInResources.FruitConsumptionResultPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..a84363231 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 = nameof(PlugInResources.MasterSkillLevelChangedPlugIn_Name), Description = nameof(PlugInResources.MasterSkillLevelChangedPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..0f42e4d7f 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 = nameof(PlugInResources.ShowCharacterCreationFailedPlugIn_Name), Description = nameof(PlugInResources.ShowCharacterCreationFailedPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..406345395 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 = nameof(PlugInResources.ShowCharacterDeleteResponsePlugIn_Name), Description = nameof(PlugInResources.ShowCharacterDeleteResponsePlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..77a373336 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(PlugInResources.ShowCharacterListExtendedPlugIn_Name), Description = nameof(PlugInResources.ShowCharacterListExtendedPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..01a5a6451 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 = nameof(PlugInResources.ShowCharacterListPlugIn_Name), Description = nameof(PlugInResources.ShowCharacterListPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..3e2e8e581 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 = nameof(PlugInResources.ShowCharacterListPlugIn075_Name), Description = nameof(PlugInResources.ShowCharacterListPlugIn075_Description), ResourceType = typeof(PlugInResources))]
[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..1faa9b9d2 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(PlugInResources.ShowCharacterListPlugIn095_Name), Description = nameof(PlugInResources.ShowCharacterListPlugIn095_Description), ResourceType = typeof(PlugInResources))]
[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..ed0700ed1 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 = nameof(PlugInResources.ShowCreatedCharacterPlugIn_Name), Description = nameof(PlugInResources.ShowCreatedCharacterPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..a253592cd 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 = nameof(PlugInResources.ShowDialogPlugIn_Name), Description = nameof(PlugInResources.ShowDialogPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..b3f386c70 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 = nameof(PlugInResources.ShowEffectPlugIn_Name), Description = nameof(PlugInResources.ShowEffectPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..481d8c52c 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(PlugInResources.ShowItemDropEffectPlugIn_Name), Description = nameof(PlugInResources.ShowItemDropEffectPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..f214e3756 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 = nameof(PlugInResources.SkillListViewPlugIn_Name), Description = nameof(PlugInResources.SkillListViewPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..ad5f5fd3c 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(PlugInResources.SkillListViewPlugIn075_Name), Description = nameof(PlugInResources.SkillListViewPlugIn075_Description), ResourceType = typeof(PlugInResources))]
[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..da63ffbb2 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(PlugInResources.SkillListViewPlugIn095_Name), Description = nameof(PlugInResources.SkillListViewPlugIn095_Description), ResourceType = typeof(PlugInResources))]
[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..cbf9ea380 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 = nameof(PlugInResources.StatIncreaseResultExtendedPlugIn_Name), Description = nameof(PlugInResources.StatIncreaseResultExtendedPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..1b9f31f2d 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 = nameof(PlugInResources.StatIncreaseResultPlugIn_Name), Description = nameof(PlugInResources.StatIncreaseResultPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..df06d9749 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(PlugInResources.UpdateCharacterBaseStatsExtendedPlugIn_Name), Description = nameof(PlugInResources.UpdateCharacterBaseStatsExtendedPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..17c4115b3 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 = nameof(PlugInResources.UpdateCharacterHeroStatePlugIn_Name), Description = nameof(PlugInResources.UpdateCharacterHeroStatePlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..346de1d2f 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(PlugInResources.UpdateCharacterStatsExtendedPlugIn_Name), Description = nameof(PlugInResources.UpdateCharacterStatsExtendedPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..8048900f1 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 = nameof(PlugInResources.UpdateCharacterStatsPlugIn_Name), Description = nameof(PlugInResources.UpdateCharacterStatsPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..3ff607661 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 = nameof(PlugInResources.UpdateCharacterStatsPlugIn075_Name), Description = nameof(PlugInResources.UpdateCharacterStatsPlugIn075_Description), ResourceType = typeof(PlugInResources))]
[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..c573ff52c 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(PlugInResources.UpdateCharacterStatsPlugIn097_Name), Description = nameof(PlugInResources.UpdateCharacterStatsPlugIn097_Description), ResourceType = typeof(PlugInResources))]
[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..df686d524 100644
--- a/src/GameServer/RemoteView/Character/UpdateLevelExtendedPlugIn.cs
+++ b/src/GameServer/RemoteView/Character/UpdateLevelExtendedPlugIn.cs
@@ -7,17 +7,18 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Character;
using System.Runtime.InteropServices;
using MUnique.OpenMU.GameLogic;
using MUnique.OpenMU.GameLogic.Attributes;
-using MUnique.OpenMU.GameLogic.Views;
+using MUnique.OpenMU.GameLogic.Properties;
using MUnique.OpenMU.GameLogic.Views.Character;
-using MUnique.OpenMU.Interfaces;
using MUnique.OpenMU.Network.Packets.ServerToClient;
using MUnique.OpenMU.Network.PlugIns;
using MUnique.OpenMU.PlugIns;
+using PlugInResources = MUnique.OpenMU.GameServer.Properties.PlugInResources;
///
/// 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(PlugInResources.UpdateLevelExtendedPlugIn_Name), Description = nameof(PlugInResources.UpdateLevelExtendedPlugIn_Description), ResourceType = typeof(PlugInResources))]
[Guid("6F358202-6678-4417-9537-D8739AEF78C2")]
[MinimumClient(106, 3, ClientLanguage.Invariant)]
public class UpdateLevelExtendedPlugIn : IUpdateLevelPlugIn
@@ -53,7 +54,7 @@ await connection.SendCharacterLevelUpdateExtendedAsync(
(ushort)selectedCharacter.UsedNegFruitPoints,
selectedCharacter.GetMaximumFruitPoints()).ConfigureAwait(false);
- await this._player.InvokeViewPlugInAsync(p => p.ShowMessageAsync($"Congratulations, you are Level {charStats[Stats.Level]} now.", MessageType.BlueNormal)).ConfigureAwait(false);
+ await this._player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.LevelUpCongrats), charStats[Stats.Level]).ConfigureAwait(false);
}
///
@@ -77,6 +78,6 @@ await connection.SendMasterCharacterLevelUpdateExtendedAsync(
(uint)charStats[Stats.MaximumShield],
(uint)charStats[Stats.MaximumAbility]).ConfigureAwait(false);
- await this._player.InvokeViewPlugInAsync(p => p.ShowMessageAsync($"Congratulations, you are Master Level {charStats[Stats.MasterLevel]} now.", MessageType.BlueNormal)).ConfigureAwait(false);
+ await this._player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.MasterLevelUpCongrats), charStats[Stats.MasterLevel]).ConfigureAwait(false);
}
}
\ No newline at end of file
diff --git a/src/GameServer/RemoteView/Character/UpdateLevelPlugIn.cs b/src/GameServer/RemoteView/Character/UpdateLevelPlugIn.cs
index 846553fcb..440481df1 100644
--- a/src/GameServer/RemoteView/Character/UpdateLevelPlugIn.cs
+++ b/src/GameServer/RemoteView/Character/UpdateLevelPlugIn.cs
@@ -7,16 +7,17 @@ namespace MUnique.OpenMU.GameServer.RemoteView.Character;
using System.Runtime.InteropServices;
using MUnique.OpenMU.GameLogic;
using MUnique.OpenMU.GameLogic.Attributes;
-using MUnique.OpenMU.GameLogic.Views;
+using MUnique.OpenMU.GameLogic.Properties;
using MUnique.OpenMU.GameLogic.Views.Character;
-using MUnique.OpenMU.Interfaces;
using MUnique.OpenMU.Network.Packets.ServerToClient;
using MUnique.OpenMU.PlugIns;
+using PlugInResources = MUnique.OpenMU.GameServer.Properties.PlugInResources;
///
/// 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 = nameof(PlugInResources.UpdateLevelPlugIn_Name), Description = nameof(PlugInResources.UpdateLevelPlugIn_Description), ResourceType = typeof(PlugInResources))]
[Guid("1ff3709e-d99b-4c00-b926-efce281b3997")]
public class UpdateLevelPlugIn : IUpdateLevelPlugIn
{
@@ -51,7 +52,7 @@ await connection.SendCharacterLevelUpdateAsync(
(ushort)selectedCharacter.UsedNegFruitPoints,
selectedCharacter.GetMaximumFruitPoints()).ConfigureAwait(false);
- await this._player.InvokeViewPlugInAsync(p => p.ShowMessageAsync($"Congratulations, you are Level {charStats[Stats.Level]} now.", MessageType.BlueNormal)).ConfigureAwait(false);
+ await this._player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.LevelUpCongrats), charStats[Stats.Level]).ConfigureAwait(false);
}
///
@@ -75,6 +76,6 @@ await connection.SendMasterCharacterLevelUpdateAsync(
(ushort)charStats[Stats.MaximumShield],
(ushort)charStats[Stats.MaximumAbility]).ConfigureAwait(false);
- await this._player.InvokeViewPlugInAsync(p => p.ShowMessageAsync($"Congratulations, you are Master Level {charStats[Stats.MasterLevel]} now.", MessageType.BlueNormal)).ConfigureAwait(false);
+ await this._player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.MasterLevelUpCongrats), charStats[Stats.MasterLevel]).ConfigureAwait(false);
}
}
\ No newline at end of file
diff --git a/src/GameServer/RemoteView/Character/UpdateMasterSkillsPlugIn.cs b/src/GameServer/RemoteView/Character/UpdateMasterSkillsPlugIn.cs
index 86c675442..5c48d0f3a 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 = nameof(PlugInResources.UpdateMasterSkillsPlugIn_Name), Description = nameof(PlugInResources.UpdateMasterSkillsPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..42cf19b68 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(PlugInResources.UpdateMasterStatsExtendedPlugIn_Name), Description = nameof(PlugInResources.UpdateMasterStatsExtendedPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..b2b5a26f2 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 = nameof(PlugInResources.UpdateMasterStatsPlugIn_Name), Description = nameof(PlugInResources.UpdateMasterStatsPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..fa997e1bd 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(PlugInResources.UpdateStatsExtendedPlugIn_Name), Description = nameof(PlugInResources.UpdateStatsExtendedPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..c0b135b43 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(PlugInResources.UpdateStatsPlugIn_Name), Description = nameof(PlugInResources.UpdateStatsPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..4f19ae2f3 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 = nameof(PlugInResources.ChatViewPlugIn_Name), Description = nameof(PlugInResources.ChatViewPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..2143117c8 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(PlugInResources.ConsumeSpecialItemPlugIn_Name), Description = nameof(PlugInResources.ConsumeSpecialItemPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..d4af82eda 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(PlugInResources.DuelEndedPlugIn_Name), Description = nameof(PlugInResources.DuelEndedPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..e8fd64531 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(PlugInResources.DuelFinishedPlugIn_Name), Description = nameof(PlugInResources.DuelFinishedPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..df275a75d 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(PlugInResources.DuelHealthUpdatePlugIn_Name), Description = nameof(PlugInResources.DuelHealthUpdatePlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..d32e37593 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(PlugInResources.DuelSpectatorAddedPlugIn_Name), Description = nameof(PlugInResources.DuelSpectatorAddedPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..0356914bf 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(PlugInResources.DuelSpectatorListUpdatePlugIn_Name), Description = nameof(PlugInResources.DuelSpectatorListUpdatePlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..39142d466 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(PlugInResources.DuelSpectatorRemovedPlugIn_Name), Description = nameof(PlugInResources.DuelSpectatorRemovedPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..5dbf25795 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(PlugInResources.DuelStatusUpdatePlugIn_Name), Description = nameof(PlugInResources.DuelStatusUpdatePlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..a514a1763 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(PlugInResources.InitializeDuelPlugIn_Name), Description = nameof(PlugInResources.InitializeDuelPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..85e335e54 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(PlugInResources.ShowDuelRequestPlugIn_Name), Description = nameof(PlugInResources.ShowDuelRequestPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..921a79884 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(PlugInResources.ShowDuelRequestResultPlugIn_Name), Description = nameof(PlugInResources.ShowDuelRequestResultPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..2e70dbb4e 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(PlugInResources.ShowDuelScoreUpdatePlugIn_Name), Description = nameof(PlugInResources.ShowDuelScoreUpdatePlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..a57091caf 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(PlugInResources.AssignPlayersToGuildPlugIn_Name), Description = nameof(PlugInResources.AssignPlayersToGuildPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..bb7360a6c 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(PlugInResources.AssignPlayersToGuildPlugIn075_Name), Description = nameof(PlugInResources.AssignPlayersToGuildPlugIn075_Description), ResourceType = typeof(PlugInResources))]
[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..79e1b1a03 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 = nameof(PlugInResources.GuildJoinResponsePlugIn_Name), Description = nameof(PlugInResources.GuildJoinResponsePlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..fd9ab1f5f 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 = nameof(PlugInResources.GuildKickResultPlugIn_Name), Description = nameof(PlugInResources.GuildKickResultPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..214ac43fd 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(PlugInResources.GuildWarScoreUpdatePlugIn_Name), Description = nameof(PlugInResources.GuildWarScoreUpdatePlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..e88f7e736 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 = nameof(PlugInResources.PlayerLeftGuildPlugIn_Name), Description = nameof(PlugInResources.PlayerLeftGuildPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..037a54519 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 = nameof(PlugInResources.ShowGuildCreateResultPlugIn_Name), Description = nameof(PlugInResources.ShowGuildCreateResultPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..34ba0e9fb 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 = nameof(PlugInResources.ShowGuildCreationDialogPlugIn_Name), Description = nameof(PlugInResources.ShowGuildCreationDialogPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..1773e18c2 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 = nameof(PlugInResources.ShowGuildInfoPlugIn_Name), Description = nameof(PlugInResources.ShowGuildInfoPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..72809080b 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 = nameof(PlugInResources.ShowGuildJoinRequestPlugIn_Name), Description = nameof(PlugInResources.ShowGuildJoinRequestPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..33696cfef 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(PlugInResources.ShowGuildListPlugIn_Name), Description = nameof(PlugInResources.ShowGuildListPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..c440c1f9a 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(PlugInResources.ShowGuildListPlugIn075_Name), Description = nameof(PlugInResources.ShowGuildListPlugIn075_Description), ResourceType = typeof(PlugInResources))]
[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..a9f8b987a 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 = nameof(PlugInResources.ShowGuildMasterDialogPlugIn_Name), Description = nameof(PlugInResources.ShowGuildMasterDialogPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..c56dcbcae 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(PlugInResources.ShowGuildWarDeclaredPlugIn_Name), Description = nameof(PlugInResources.ShowGuildWarDeclaredPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..86de9ce7d 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(PlugInResources.ShowGuildWarRequestPlugIn_Name), Description = nameof(PlugInResources.ShowGuildWarRequestPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..17ad8bb89 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(PlugInResources.ShowGuildWarResultPlugIn_Name), Description = nameof(PlugInResources.ShowGuildWarResultPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..adf8b6ba3 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(PlugInResources.ShowShowGuildWarRequestResultPlugIn_Name), Description = nameof(PlugInResources.ShowShowGuildWarRequestResultPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..a3e3c9ed6 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 = nameof(PlugInResources.BuyNpcItemFailedPlugIn_Name), Description = nameof(PlugInResources.BuyNpcItemFailedPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..ddc85b9b3 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 = nameof(PlugInResources.ItemAppearPlugIn_Name), Description = nameof(PlugInResources.ItemAppearPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..2e94b842a 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 = nameof(PlugInResources.ItemDropResultPlugIn_Name), Description = nameof(PlugInResources.ItemDropResultPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..8fb450728 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(PlugInResources.ItemDurabilityChangedPlugIn_Name), Description = nameof(PlugInResources.ItemDurabilityChangedPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..1af84d913 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 = nameof(PlugInResources.ItemMoveFailedPlugIn_Name), Description = nameof(PlugInResources.ItemMoveFailedPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..941b0396a 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 = nameof(PlugInResources.ItemMovedPlugIn_Name), Description = nameof(PlugInResources.ItemMovedPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..f3bc302e6 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 = nameof(PlugInResources.ItemPickUpFailedPlugIn_Name), Description = nameof(PlugInResources.ItemPickUpFailedPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..ec75172f7 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 = nameof(PlugInResources.ItemPriceSetResponsePlugIn_Name), Description = nameof(PlugInResources.ItemPriceSetResponsePlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..846a773cb 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(PlugInResources.ItemRemovedPlugIn_Name), Description = nameof(PlugInResources.ItemRemovedPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..ece34e962 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 = nameof(PlugInResources.ItemSoldByPlayerShopPlugIn_Name), Description = nameof(PlugInResources.ItemSoldByPlayerShopPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..ba9c223c7 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 = nameof(PlugInResources.ItemSoldToNpcPlugIn_Name), Description = nameof(PlugInResources.ItemSoldToNpcPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..0e28223b2 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 = nameof(PlugInResources.ItemUpgradedPlugIn_Name), Description = nameof(PlugInResources.ItemUpgradedPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..90810d09d 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 = nameof(PlugInResources.NpcItemBoughtPlugIn_Name), Description = nameof(PlugInResources.NpcItemBoughtPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..a4b865ea4 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(PlugInResources.PlayerShopBuyRequestResultExtendedPlugIn_Name), Description = nameof(PlugInResources.PlayerShopBuyRequestResultExtendedPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..2f8bc25de 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(PlugInResources.PlayerShopBuyRequestResultPlugIn_Name), Description = nameof(PlugInResources.PlayerShopBuyRequestResultPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..bd6c55266 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(PlugInResources.RequestedItemConsumptionFailedExtendedPlugIn_Name), Description = nameof(PlugInResources.RequestedItemConsumptionFailedExtendedPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..7b30119c6 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 = nameof(PlugInResources.RequestedItemConsumptionFailedPlugIn_Name), Description = nameof(PlugInResources.RequestedItemConsumptionFailedPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..369a21d3a 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 = nameof(PlugInResources.UpdateInventoryListPlugIn_Name), Description = nameof(PlugInResources.UpdateInventoryListPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..41b006f07 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 = nameof(PlugInResources.UpdateMoneyPlugIn_Name), Description = nameof(PlugInResources.UpdateMoneyPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..7f12d56c3 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 = nameof(PlugInResources.ItemSerializer_Name), Description = nameof(PlugInResources.ItemSerializer_Description), ResourceType = typeof(PlugInResources))]
[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..519fd8b3d 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 = nameof(PlugInResources.ItemSerializer075_Name), Description = nameof(PlugInResources.ItemSerializer075_Description), ResourceType = typeof(PlugInResources))]
[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..945f43b7b 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(PlugInResources.ItemSerializer095_Name), Description = nameof(PlugInResources.ItemSerializer095_Description), ResourceType = typeof(PlugInResources))]
[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..5396a298b 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 = nameof(PlugInResources.ItemSerializerExtended_Name), Description = nameof(PlugInResources.ItemSerializerExtended_Description), ResourceType = typeof(PlugInResources))]
[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..db7fed906 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 = nameof(PlugInResources.LogoutPlugIn_Name), Description = nameof(PlugInResources.LogoutPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..8eff79921 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 = nameof(PlugInResources.ShowLoginResultPlugIn_Name), Description = nameof(PlugInResources.ShowLoginResultPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..8e474dad1 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(PlugInResources.ShowLoginWindowPlugIn_Name), Description = nameof(PlugInResources.ShowLoginWindowPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..3f99bd208 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 = nameof(PlugInResources.AddToLetterListPlugIn_Name), Description = nameof(PlugInResources.AddToLetterListPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..f941af9d2 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 = nameof(PlugInResources.ChatRoomCreatedPlugIn_Name), Description = nameof(PlugInResources.ChatRoomCreatedPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..9256ee81c 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 = nameof(PlugInResources.FriendAddedPlugIn_Name), Description = nameof(PlugInResources.FriendAddedPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..ab95c144d 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 = nameof(PlugInResources.FriendDeletedPlugIn_Name), Description = nameof(PlugInResources.FriendDeletedPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..a3178cda8 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 = nameof(PlugInResources.FriendStateUpdatePlugIn_Name), Description = nameof(PlugInResources.FriendStateUpdatePlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..cd5074382 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 = nameof(PlugInResources.InitializeMessengerPlugIn_Name), Description = nameof(PlugInResources.InitializeMessengerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..f71322222 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 = nameof(PlugInResources.LetterDeletedPlugIn_Name), Description = nameof(PlugInResources.LetterDeletedPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..2dda04049 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 = nameof(PlugInResources.LetterSendResultPlugIn_Name), Description = nameof(PlugInResources.LetterSendResultPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..bd092c800 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 = nameof(PlugInResources.ShowFriendInvitationResultPlugIn_Name), Description = nameof(PlugInResources.ShowFriendInvitationResultPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..1fe5fae70 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 = nameof(PlugInResources.ShowFriendRequestPlugIn_Name), Description = nameof(PlugInResources.ShowFriendRequestPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..a5327db70 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(PlugInResources.ShowLetterExtendedPlugIn_Name), Description = nameof(PlugInResources.ShowLetterExtendedPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..3f0d7eac0 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 = nameof(PlugInResources.ShowLetterPlugIn_Name), Description = nameof(PlugInResources.ShowLetterPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..99ecdcc73 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(PlugInResources.BloodCastleScoreTableViewPlugin_Name), Description = nameof(PlugInResources.BloodCastleScoreTableViewPlugin_Description), ResourceType = typeof(PlugInResources))]
[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..9709d5a17 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(PlugInResources.BloodCastleStateViewPlugIn_Name), Description = nameof(PlugInResources.BloodCastleStateViewPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..1b0dfe185 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(PlugInResources.ChangeTerrainAttributesViewPlugIn_Name), Description = nameof(PlugInResources.ChangeTerrainAttributesViewPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..0f391f798 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(PlugInResources.ChaosCastleStateViewPlugIn_Name), Description = nameof(PlugInResources.ChaosCastleStateViewPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..d011f8fe2 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(PlugInResources.MiniGameScoreTableViewPlugin_Name), Description = nameof(PlugInResources.MiniGameScoreTableViewPlugin_Description), ResourceType = typeof(PlugInResources))]
[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..702a53909 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(PlugInResources.ShowMiniGameEnterResultViewPlugIn_Name), Description = nameof(PlugInResources.ShowMiniGameEnterResultViewPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..0e2c4cf98 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(PlugInResources.ShowMiniGameOpeningStateViewPlugIn_Name), Description = nameof(PlugInResources.ShowMiniGameOpeningStateViewPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..1436e2672 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(PlugInResources.UpdateMiniGameStateViewViewPlugIn_Name), Description = nameof(PlugInResources.UpdateMiniGameStateViewViewPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..88d18e7a3 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(PlugInResources.MuHelperConfigurationUpdatePlugIn_Name), Description = nameof(PlugInResources.MuHelperConfigurationUpdatePlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..f3e298d37 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(PlugInResources.MuHelperStatusUpdatePlugIn_Name), Description = nameof(PlugInResources.MuHelperStatusUpdatePlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..44e03ad36 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(PlugInResources.NpcDialogClosedPlugIn075_Name), Description = nameof(PlugInResources.NpcDialogClosedPlugIn075_Description), ResourceType = typeof(PlugInResources))]
[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..2dbb1ad47 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 = nameof(PlugInResources.OpenNpcWindowPlugIn_Name), Description = nameof(PlugInResources.OpenNpcWindowPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..c95912aab 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(PlugInResources.ShowItemCraftingResultPlugIn_Name), Description = nameof(PlugInResources.ShowItemCraftingResultPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..99e203751 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 = nameof(PlugInResources.ShowMerchantStoreItemListPlugIn_Name), Description = nameof(PlugInResources.ShowMerchantStoreItemListPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..487d0cdca 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 = nameof(PlugInResources.ShowMessageOfObjectPlugIn_Name), Description = nameof(PlugInResources.ShowMessageOfObjectPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..403969fb4 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 = nameof(PlugInResources.PartyHealthViewPlugIn_Name), Description = nameof(PlugInResources.PartyHealthViewPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..d42a4b357 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 = nameof(PlugInResources.PartyMemberRemovedPlugIn_Name), Description = nameof(PlugInResources.PartyMemberRemovedPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..31212c50f 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 = nameof(PlugInResources.ShowPartyRequestPlugIn_Name), Description = nameof(PlugInResources.ShowPartyRequestPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..5f45d6e9e 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(PlugInResources.UpdatePartyListPlugIn_Name), Description = nameof(PlugInResources.UpdatePartyListPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..d34d2c6aa 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(PlugInResources.UpdatePartyListPlugIn075_Name), Description = nameof(PlugInResources.UpdatePartyListPlugIn075_Description), ResourceType = typeof(PlugInResources))]
[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..917cb8275 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(PlugInResources.PetAttackViewPlugIn_Name), Description = nameof(PlugInResources.PetAttackViewPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..e8dce64c4 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(PlugInResources.PetBehaviourChangedViewPlugIn_Name), Description = nameof(PlugInResources.PetBehaviourChangedViewPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..893055dc4 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(PlugInResources.PetInfoViewPlugIn_Name), Description = nameof(PlugInResources.PetInfoViewPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..1a7f0d771 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 = nameof(PlugInResources.PlayerShopClosedPlugIn_Name), Description = nameof(PlugInResources.PlayerShopClosedPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..fe44d2a3b 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 = nameof(PlugInResources.PlayerShopOpenedPlugIn_Name), Description = nameof(PlugInResources.PlayerShopOpenedPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..c46dc355f 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(PlugInResources.ShowShopItemListExtendedPlugIn_Name), Description = nameof(PlugInResources.ShowShopItemListExtendedPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..48b5505ab 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 = nameof(PlugInResources.ShowShopItemListPlugIn_Name), Description = nameof(PlugInResources.ShowShopItemListPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..5476ee340 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 = nameof(PlugInResources.ShowShopsOfPlayersPlugIn_Name), Description = nameof(PlugInResources.ShowShopsOfPlayersPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..215cb8d8d 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 = nameof(PlugInResources.CurrentlyActiveQuestsPlugIn_Name), Description = nameof(PlugInResources.CurrentlyActiveQuestsPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..3af585858 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 = nameof(PlugInResources.LegacyQuestRewardPlugIn_Name), Description = nameof(PlugInResources.LegacyQuestRewardPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..948ff56b5 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 = nameof(PlugInResources.LegacyQuestStateDialogPlugIn_Name), Description = nameof(PlugInResources.LegacyQuestStateDialogPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..57cf34d0f 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 = nameof(PlugInResources.QuestCancelledPlugIn_Name), Description = nameof(PlugInResources.QuestCancelledPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..42eda8dcb 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 = nameof(PlugInResources.QuestCompletionResponsePlugIn_Name), Description = nameof(PlugInResources.QuestCompletionResponsePlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..72518c990 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 = nameof(PlugInResources.QuestEventResponsePlugIn_Name), Description = nameof(PlugInResources.QuestEventResponsePlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..fafbc54f7 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(PlugInResources.QuestProgressExtendedPlugIn_Name), Description = nameof(PlugInResources.QuestProgressExtendedPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..a770a2e4a 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(PlugInResources.QuestProgressPlugIn_Name), Description = nameof(PlugInResources.QuestProgressPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..8c85324f0 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 = nameof(PlugInResources.QuestStartedPlugIn_Name), Description = nameof(PlugInResources.QuestStartedPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..907701860 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(PlugInResources.QuestStateResponseExtendedPlugIn_Name), Description = nameof(PlugInResources.QuestStateResponseExtendedPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..2a2614393 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 = nameof(PlugInResources.QuestStateResponsePlugIn_Name), Description = nameof(PlugInResources.QuestStateResponsePlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..65b997715 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 = nameof(PlugInResources.QuestStepInfoPlugIn_Name), Description = nameof(PlugInResources.QuestStepInfoPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..626f5d22f 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 = nameof(PlugInResources.ShowAvailableQuestsPlugIn_Name), Description = nameof(PlugInResources.ShowAvailableQuestsPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..f9930b379 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 = nameof(PlugInResources.ShowMessagePlugIn_Name), Description = nameof(PlugInResources.ShowMessagePlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..45b09453c 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 = nameof(PlugInResources.ChangeTradeButtonStatePlugIn_Name), Description = nameof(PlugInResources.ChangeTradeButtonStatePlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..fd4f3c26f 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 = nameof(PlugInResources.RequestedTradeMoneyHasBeenSetPlugIn_Name), Description = nameof(PlugInResources.RequestedTradeMoneyHasBeenSetPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..0c51c97d1 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 = nameof(PlugInResources.SetTradeMoneyPlugIn_Name), Description = nameof(PlugInResources.SetTradeMoneyPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..400d85641 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 = nameof(PlugInResources.ShowTradeRequestAnswerPlugIn_Name), Description = nameof(PlugInResources.ShowTradeRequestAnswerPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..11acaab18 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 = nameof(PlugInResources.ShowTradeRequestPlugIn_Name), Description = nameof(PlugInResources.ShowTradeRequestPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..57b576e18 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 = nameof(PlugInResources.TradeFinishedPlugIn_Name), Description = nameof(PlugInResources.TradeFinishedPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..a53b6cdc8 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 = nameof(PlugInResources.TradeItemAppearPlugIn_Name), Description = nameof(PlugInResources.TradeItemAppearPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..aadba2908 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 = nameof(PlugInResources.TradeItemDisappearPlugIn_Name), Description = nameof(PlugInResources.TradeItemDisappearPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..5040ed75d 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 = nameof(PlugInResources.CloseVaultPlugIn_Name), Description = nameof(PlugInResources.CloseVaultPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..20a9876af 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(PlugInResources.ShowVaultLockChangeResponsePlugIn_Name), Description = nameof(PlugInResources.ShowVaultLockChangeResponsePlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..89fa31571 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 = nameof(PlugInResources.ShowVaultPlugIn_Name), Description = nameof(PlugInResources.ShowVaultPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..58b13fb54 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 = nameof(PlugInResources.UpdateVaultMoneyPlugIn_Name), Description = nameof(PlugInResources.UpdateVaultMoneyPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..5dca48711 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(PlugInResources.UpdateVaultStatePlugIn_Name), Description = nameof(PlugInResources.UpdateVaultStatePlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..b88bee720 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 = nameof(PlugInResources.AppearanceChangedPlugIn_Name), Description = nameof(PlugInResources.AppearanceChangedPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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(PlugInResources.AppearanceChangedExtendedPlugIn_Name), Description = nameof(PlugInResources.AppearanceChangedExtendedPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..735ab77bd 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 = nameof(PlugInResources.DeActivateMagicEffectPlugIn_Name), Description = nameof(PlugInResources.DeActivateMagicEffectPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..7bd262e32 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(PlugInResources.DeActivateMagicEffectPlugIn075_Name), Description = nameof(PlugInResources.DeActivateMagicEffectPlugIn075_Description), ResourceType = typeof(PlugInResources))]
[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..0fe7b30a6 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 = nameof(PlugInResources.DroppedItemsDisappearedPlugIn_Name), Description = nameof(PlugInResources.DroppedItemsDisappearedPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..6ddede299 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 = nameof(PlugInResources.MapChangePlugIn_Name), Description = nameof(PlugInResources.MapChangePlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..d1e38f834 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(PlugInResources.MapChangePlugIn075_Name), Description = nameof(PlugInResources.MapChangePlugIn075_Description), ResourceType = typeof(PlugInResources))]
[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..57241f189 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(PlugInResources.MapEventStateUpdatePlugIn_Name), Description = nameof(PlugInResources.MapEventStateUpdatePlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..f3c162a4e 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 = nameof(PlugInResources.NewNpcsInScopePlugIn_Name), Description = nameof(PlugInResources.NewNpcsInScopePlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..6a74e31b7 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 = nameof(PlugInResources.NewNpcsInScopePlugIn075_Name), Description = nameof(PlugInResources.NewNpcsInScopePlugIn075_Description), ResourceType = typeof(PlugInResources))]
[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..34043aba6 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(PlugInResources.NewNpcsInScopePlugIn095_Name), Description = nameof(PlugInResources.NewNpcsInScopePlugIn095_Description), ResourceType = typeof(PlugInResources))]
[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..0a6a62239 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(PlugInResources.NewPlayersInScopeExtendedPlugIn_Name), Description = nameof(PlugInResources.NewPlayersInScopeExtendedPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..f415d762e 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 = nameof(PlugInResources.NewPlayersInScopePlugIn_Name), Description = nameof(PlugInResources.NewPlayersInScopePlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..ab59ea523 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(PlugInResources.NewPlayersInScopePlugIn075_Name), Description = nameof(PlugInResources.NewPlayersInScopePlugIn075_Description), ResourceType = typeof(PlugInResources))]
[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..0d1baeed5 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(PlugInResources.NewPlayersInScopePlugIn095_Name), Description = nameof(PlugInResources.NewPlayersInScopePlugIn095_Description), ResourceType = typeof(PlugInResources))]
[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..994738a75 100644
--- a/src/GameServer/RemoteView/World/ObjectGotKilledPlugIn.cs
+++ b/src/GameServer/RemoteView/World/ObjectGotKilledPlugIn.cs
@@ -6,16 +6,18 @@ namespace MUnique.OpenMU.GameServer.RemoteView.World;
using System.Runtime.InteropServices;
using MUnique.OpenMU.GameLogic;
+using MUnique.OpenMU.GameLogic.Properties;
using MUnique.OpenMU.GameLogic.Views;
using MUnique.OpenMU.GameLogic.Views.World;
-using MUnique.OpenMU.Interfaces;
using MUnique.OpenMU.Network.Packets.ServerToClient;
using MUnique.OpenMU.PlugIns;
+using PlugInResources = MUnique.OpenMU.GameServer.Properties.PlugInResources;
///
/// 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(PlugInResources.ObjectGotKilledPlugIn_Name), Description = nameof(PlugInResources.ObjectGotKilledPlugIn_Description), ResourceType = typeof(PlugInResources))]
[Guid("fbe6666e-4425-4f33-b7c7-fc9b5fa36430")]
public class ObjectGotKilledPlugIn : IObjectGotKilledPlugIn
{
@@ -43,7 +45,7 @@ public async ValueTask ObjectGotKilledAsync(IAttackable killed, IAttacker? kille
await connection.SendObjectGotKilledAsync(killedId, skillId, killerId).ConfigureAwait(false);
if (this._player == killed && killer is Player killerPlayer && this._player.DuelRoom is null)
{
- await this._player.InvokeViewPlugInAsync(p => p.ShowMessageAsync($"You got killed by {killerPlayer.Name}", MessageType.BlueNormal)).ConfigureAwait(false);
+ await this._player.ShowLocalizedBlueMessageAsync(nameof(PlayerMessage.YouGotKilledBy), killerPlayer.Name).ConfigureAwait(false);
}
}
}
\ No newline at end of file
diff --git a/src/GameServer/RemoteView/World/ObjectMovedPlugIn.cs b/src/GameServer/RemoteView/World/ObjectMovedPlugIn.cs
index f30eb6f3a..95072df92 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(PlugInResources.ObjectMovedPlugIn_Name), Description = nameof(PlugInResources.ObjectMovedPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..c090b5cf2 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 = nameof(PlugInResources.ObjectMovedPlugIn075_Name), Description = nameof(PlugInResources.ObjectMovedPlugIn075_Description), ResourceType = typeof(PlugInResources))]
[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..85535a1f1 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(PlugInResources.ObjectMovedPlugInExtended_Name), Description = nameof(PlugInResources.ObjectMovedPlugInExtended_Description), ResourceType = typeof(PlugInResources))]
[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..6c6eb3f94 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 = nameof(PlugInResources.ObjectsOutOfScopePlugIn_Name), Description = nameof(PlugInResources.ObjectsOutOfScopePlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..a619d05ed 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(PlugInResources.RespawnAfterDeathExtendedPlugIn_Name), Description = nameof(PlugInResources.RespawnAfterDeathExtendedPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..07ceaf440 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(PlugInResources.RespawnAfterDeathPlugIn_Name), Description = nameof(PlugInResources.RespawnAfterDeathPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..924854aeb 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(PlugInResources.RespawnAfterDeathPlugIn075_Name), Description = nameof(PlugInResources.RespawnAfterDeathPlugIn075_Description), ResourceType = typeof(PlugInResources))]
[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..080f953c2 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(PlugInResources.RespawnAfterDeathPlugIn095_Name), Description = nameof(PlugInResources.RespawnAfterDeathPlugIn095_Description), ResourceType = typeof(PlugInResources))]
[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..fc477d563 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(PlugInResources.ShowAnimationPlugIn_Name), Description = nameof(PlugInResources.ShowAnimationPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..bc8dfacc8 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(PlugInResources.ShowAnimationPlugIn075_Name), Description = nameof(PlugInResources.ShowAnimationPlugIn075_Description), ResourceType = typeof(PlugInResources))]
[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..935a4e4a8 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(PlugInResources.ShowAreaSkillAnimationPlugIn_Name), Description = nameof(PlugInResources.ShowAreaSkillAnimationPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..1dbd001f8 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(PlugInResources.ShowAreaSkillAnimationPlugIn075_Name), Description = nameof(PlugInResources.ShowAreaSkillAnimationPlugIn075_Description), ResourceType = typeof(PlugInResources))]
[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..ddcb704ad 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(PlugInResources.ShowAreaSkillAnimationPlugIn095_Name), Description = nameof(PlugInResources.ShowAreaSkillAnimationPlugIn095_Description), ResourceType = typeof(PlugInResources))]
[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..5d1fa5cee 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(PlugInResources.ShowChainLightningPlugIn_Name), Description = nameof(PlugInResources.ShowChainLightningPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..5cdae219f 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 = nameof(PlugInResources.ShowDroppedItemsPlugIn_Name), Description = nameof(PlugInResources.ShowDroppedItemsPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..5f44b6704 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(PlugInResources.ShowHitExtendedPlugIn_Name), Description = nameof(PlugInResources.ShowHitExtendedPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..c304b49a3 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 = nameof(PlugInResources.ShowHitPlugIn_Name), Description = nameof(PlugInResources.ShowHitPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..4ea758868 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 = nameof(PlugInResources.ShowMoneyDrop075_Name), Description = nameof(PlugInResources.ShowMoneyDrop075_Description), ResourceType = typeof(PlugInResources))]
[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..afbe11c58 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(PlugInResources.ShowMoneyDropExtendedPlugIn_Name), Description = nameof(PlugInResources.ShowMoneyDropExtendedPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..458e92046 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(PlugInResources.ShowMoneyDropPlugIn_Name), Description = nameof(PlugInResources.ShowMoneyDropPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..6f67533a6 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(PlugInResources.ShowRageAttackPlugIn_Name), Description = nameof(PlugInResources.ShowRageAttackPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..4158ab991 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(PlugInResources.ShowRageAttackRangePlugIn_Name), Description = nameof(PlugInResources.ShowRageAttackRangePlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..3d3ee21a5 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(PlugInResources.ShowSkillAnimationPlugIn_Name), Description = nameof(PlugInResources.ShowSkillAnimationPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..90a1721d9 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(PlugInResources.ShowSkillAnimationPlugIn075_Name), Description = nameof(PlugInResources.ShowSkillAnimationPlugIn075_Description), ResourceType = typeof(PlugInResources))]
[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..c8a0e9388 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(PlugInResources.ShowSkillAnimationPlugIn095_Name), Description = nameof(PlugInResources.ShowSkillAnimationPlugIn095_Description), ResourceType = typeof(PlugInResources))]
[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..71a7d4a08 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(PlugInResources.SkillStageUpdatePlugInPlugIn_Name), Description = nameof(PlugInResources.SkillStageUpdatePlugInPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..cf89fadd0 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(PlugInResources.TeleportPlugIn_Name), Description = nameof(PlugInResources.TeleportPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..b5324959d 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(PlugInResources.TeleportPlugIn075_Name), Description = nameof(PlugInResources.TeleportPlugIn075_Description), ResourceType = typeof(PlugInResources))]
[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..45e0362f4 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 = nameof(PlugInResources.UpdateRotationPlugIn_Name), Description = nameof(PlugInResources.UpdateRotationPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..1dfcacc5d 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 = nameof(PlugInResources.WeatherStatusUpdatePlugIn_Name), Description = nameof(PlugInResources.WeatherStatusUpdatePlugIn_Description), ResourceType = typeof(PlugInResources))]
[Guid("44369927-4EE4-47D7-9C6C-DD74FC824071")]
public class WeatherStatusUpdatePlugIn : IWeatherStatusUpdatePlugIn
{
diff --git a/src/Interfaces/LocalizedString.cs b/src/Interfaces/LocalizedString.cs
new file mode 100644
index 000000000..44bc9d953
--- /dev/null
+++ b/src/Interfaces/LocalizedString.cs
@@ -0,0 +1,352 @@
+//
+// 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 : IEquatable
+{
+ ///
+ /// Initializes a new instance of the struct.
+ ///
+ /// The value.
+ public LocalizedString(string? value)
+ {
+ this.Value = value;
+ }
+
+ ///
+ /// Gets the separator string which separates the different languages.
+ ///
+ public static string Separator => "||";
+
+ ///
+ /// Gets the neutral language code.
+ ///
+ public static string NeutralLanguageCode => "en";
+
+ ///
+ /// Gets the underlying serialized value of this localized string.
+ ///
+ public string? Value { get; }
+
+ ///
+ /// Gets the value in the neutral language as a .
+ ///
+ ///
+ /// A that contains the neutral language text, or an empty string
+ /// if the underlying value is .
+ ///
+ public string ValueInNeutralLanguage
+ {
+ get
+ {
+ if (this.Value?.IndexOf(Separator, StringComparison.OrdinalIgnoreCase) is not >= 0)
+ {
+ return this.Value ?? string.Empty;
+ }
+
+ var span = this.ValueInNeutralLanguageAsSpan;
+ return new(span);
+ }
+ }
+
+ ///
+ /// Gets the value in the neutral language as a of characters.
+ ///
+ ///
+ /// A that contains the neutral language text, or an empty span
+ /// if the underlying value is .
+ ///
+ public ReadOnlySpan ValueInNeutralLanguageAsSpan
+ {
+ get
+ {
+ if (this.Value is null)
+ {
+ return [];
+ }
+
+ var separatorIndex = this.Value.IndexOf(Separator, StringComparison.OrdinalIgnoreCase);
+ if (separatorIndex == -1)
+ {
+ return this.Value.AsSpan();
+ }
+
+ return this.Value.AsSpan(0, separatorIndex);
+ }
+ }
+
+ ///
+ /// Performs an implicit conversion from to .
+ ///
+ /// The localized string.
+ /// The underlying serialized value of the localized string, or if the instance is .
+ public static implicit operator string?(LocalizedString? localizedString)
+ {
+ return localizedString?.Value;
+ }
+
+ ///
+ /// Performs an implicit conversion from to .
+ ///
+ /// The localized string.
+ /// The underlying serialized value of the localized string, or an empty string if the underlying value is .
+ public static implicit operator string(LocalizedString localizedString)
+ {
+ return localizedString.Value ?? string.Empty;
+ }
+
+ ///
+ /// Performs an implicit conversion from to a nullable .
+ ///
+ /// The serialized localized string value.
+ /// A new instance, or if is .
+ public static implicit operator LocalizedString?(string? localizedString)
+ {
+ if (localizedString is null)
+ {
+ return null;
+ }
+
+ return new LocalizedString(localizedString);
+ }
+
+ ///
+ /// Performs an implicit conversion from to .
+ ///
+ /// The serialized localized string value.
+ /// A new instance.
+ public static implicit operator LocalizedString(string localizedString)
+ {
+ return new LocalizedString(localizedString);
+ }
+
+ ///
+ /// Returns a that represents this instance for the current UI culture.
+ ///
+ ///
+ /// A containing the translation for the current UI culture,
+ /// or the neutral language translation if none is available for the current culture.
+ ///
+ public override string? ToString()
+ {
+ return this.GetTranslation(CultureInfo.CurrentCulture);
+ }
+
+ ///
+ /// Gets the translation for the specified culture.
+ ///
+ /// The culture for which the translation is requested.
+ ///
+ /// If set to , falls back to the neutral language if no translation for
+ /// is available; otherwise returns an empty string.
+ ///
+ ///
+ /// The translation for the specified culture, the neutral language translation if
+ /// is and no specific translation exists,
+ /// or an empty string if neither is available.
+ ///
+ public string GetTranslation(CultureInfo cultureInfo, bool fallbackToNeutral = true)
+ {
+ var span = this.GetTranslationAsSpan(cultureInfo, fallbackToNeutral);
+ return new(span);
+ }
+
+ ///
+ /// Gets the translation for the specified culture as a of characters.
+ ///
+ /// The culture for which the translation is requested.
+ ///
+ /// If set to , falls back to the neutral language if no translation for
+ /// is available; otherwise returns an empty span.
+ ///
+ ///
+ /// A containing the translation for the specified culture,
+ /// the neutral language translation if is
+ /// and no specific translation exists, or an empty span if neither is available.
+ ///
+ public ReadOnlySpan GetTranslationAsSpan(CultureInfo cultureInfo, bool fallbackToNeutral = true)
+ {
+ // Implementation for retrieving the localized string based on the cultureInfo
+ if (this.Value is null)
+ {
+ return [];
+ }
+
+ if (cultureInfo.TwoLetterISOLanguageName == NeutralLanguageCode)
+ {
+ return this.ValueInNeutralLanguageAsSpan;
+ }
+
+ var searchPattern = Separator + cultureInfo.TwoLetterISOLanguageName + "=";
+ var startIndex = this.Value.IndexOf(searchPattern, StringComparison.OrdinalIgnoreCase);
+ if (startIndex == -1)
+ {
+ return fallbackToNeutral ? this.ValueInNeutralLanguageAsSpan : [];
+ }
+
+ var part = this.Value.AsSpan(startIndex + searchPattern.Length);
+ var endIndex = part.IndexOf(Separator);
+ if (endIndex == -1)
+ {
+ return part;
+ }
+
+ return part.Slice(0, endIndex);
+ }
+
+ ///
+ /// Returns a new with the specified translation added, updated, or removed.
+ ///
+ /// The culture for which the translation should be added or updated.
+ ///
+ /// The translation text. If or empty, an existing translation for the specified culture
+ /// is removed.
+ ///
+ ///
+ /// A new instance with the modified translation for the specified culture.
+ ///
+ public LocalizedString WithTranslation(CultureInfo cultureInfo, string? text)
+ {
+ // Plan (pseudocode):
+ // 1. Determine language code from culture (TwoLetterISOLanguageName).
+ // 2. If language is neutral ("en"):
+ // a. If Value is null or empty:
+ // - If text is null or empty: return this (no change).
+ // - Else: create new base + keep all existing non-neutral parts (if any) and return new instance.
+ // b. If Value has separator:
+ // - Replace the part before first separator with the new text (may be null/empty).
+ // c. If Value has no separator:
+ // - Replace whole value with new text.
+ // 3. If language is non-neutral:
+ // a. If Value is null or empty:
+ // - If text is null or empty: return this.
+ // - Else: initialize base as empty string and append "||xx=text".
+ // b. Search for existing "||xx=" section.
+ // - If found:
+ // i. If text is null or empty: remove that section (and possible trailing/leading separators).
+ // ii. Else: replace its content with text.
+ // - If not found and text is not null/empty: append "||xx=text".
+ // 4. Return new LocalizedString with computed value.
+
+ var languageCode = cultureInfo.TwoLetterISOLanguageName;
+
+ // Work with a mutable string representation
+ var current = this.Value ?? string.Empty;
+
+ if (languageCode == NeutralLanguageCode)
+ {
+ // Handle neutral language as the base string (before first separator)
+ var separatorIndex = current.IndexOf(Separator, StringComparison.OrdinalIgnoreCase);
+ if (separatorIndex == -1)
+ {
+ // Only neutral text present
+ if (string.IsNullOrEmpty(text))
+ {
+ if (string.IsNullOrEmpty(current))
+ {
+ return this;
+ }
+
+ return new LocalizedString(string.Empty);
+ }
+
+ return new LocalizedString(text);
+ }
+
+ // There are additional translations after the base text
+ var suffix = current.Substring(separatorIndex); // includes the separator
+ var newBase = text ?? string.Empty;
+ return new LocalizedString(newBase + suffix);
+ }
+
+ // Handle non-neutral languages
+ var searchPattern = Separator + languageCode + "=";
+ var startIndex = current.IndexOf(searchPattern, StringComparison.OrdinalIgnoreCase);
+
+ if (startIndex == -1)
+ {
+ // No existing translation for this language
+ if (string.IsNullOrEmpty(text))
+ {
+ return this;
+ }
+
+ if (string.IsNullOrEmpty(current))
+ {
+ // No base text yet, just start with empty base and language entry
+ return new LocalizedString(string.Empty + Separator + languageCode + "=" + text);
+ }
+
+ return new LocalizedString(current + Separator + languageCode + "=" + text);
+ }
+
+ // Existing translation found
+ var partStart = startIndex + searchPattern.Length;
+ var span = current.AsSpan(partStart);
+ var endIndex = span.IndexOf(Separator);
+ var removeLength = endIndex == -1 ? current.Length - partStart : endIndex;
+
+ if (string.IsNullOrEmpty(text))
+ {
+ // Remove this translation entry completely, including "||xx=" prefix
+ var prefix = current.AsSpan(0, startIndex);
+ ReadOnlySpan suffixSpan;
+ if (endIndex == -1)
+ {
+ suffixSpan = ReadOnlySpan.Empty;
+ }
+ else
+ {
+ suffixSpan = current.AsSpan(partStart + removeLength);
+ }
+
+ var result = string.Concat(prefix, suffixSpan);
+ return new LocalizedString(result);
+ }
+ else
+ {
+ // Replace the content of this translation
+ var prefix = current.AsSpan(0, partStart);
+ ReadOnlySpan suffixSpan;
+ if (endIndex == -1)
+ {
+ suffixSpan = ReadOnlySpan.Empty;
+ }
+ else
+ {
+ suffixSpan = current.AsSpan(partStart + removeLength);
+ }
+
+ var result = string.Concat(prefix, text, suffixSpan);
+ return new LocalizedString(result);
+ }
+ }
+
+ ///
+ public bool Equals(LocalizedString other)
+ {
+ return this.Value == other.Value;
+ }
+
+ ///
+ public override bool Equals(object? obj)
+ {
+ return obj is LocalizedString other && this.Equals(other);
+ }
+
+ ///
+ public override int GetHashCode()
+ {
+ return this.Value != null ? this.Value.GetHashCode() : 0;
+ }
+}
\ No newline at end of file
diff --git a/src/Interfaces/LocalizedStringJsonConverter.cs b/src/Interfaces/LocalizedStringJsonConverter.cs
new file mode 100644
index 000000000..0ee63fcce
--- /dev/null
+++ b/src/Interfaces/LocalizedStringJsonConverter.cs
@@ -0,0 +1,36 @@
+//
+// Licensed under the MIT License. See LICENSE file in the project root for full license information.
+//
+
+namespace MUnique.OpenMU.Interfaces;
+
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+///
+/// A JSON converter for the type which serializes it as a simple JSON string.
+///
+public class LocalizedStringJsonConverter : JsonConverter
+{
+ ///
+ public override LocalizedString Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+ {
+ if (reader.TokenType == JsonTokenType.Null)
+ {
+ return default;
+ }
+
+ if (reader.TokenType == JsonTokenType.String)
+ {
+ return new LocalizedString(reader.GetString());
+ }
+
+ throw new Exception($"Unexpected token parsing binary. Expected String, got {reader.TokenType}.");
+ }
+
+ ///
+ public override void Write(Utf8JsonWriter writer, LocalizedString value, JsonSerializerOptions options)
+ {
+ writer.WriteStringValue(value.Value);
+ }
+}
\ 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/Network/GlobalUsings.cs b/src/Network/GlobalUsings.cs
new file mode 100644
index 000000000..ccd70c96a
--- /dev/null
+++ b/src/Network/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 MUnique.OpenMU.Network.Properties;
\ No newline at end of file
diff --git a/src/Network/IpResolverType.cs b/src/Network/IpResolverType.cs
index 32f367bff..2bb0379e3 100644
--- a/src/Network/IpResolverType.cs
+++ b/src/Network/IpResolverType.cs
@@ -10,31 +10,31 @@ public enum IpResolverType
///
/// The IP is detected automatically by considering the environment.
///
- [Display(Name = "Automatic", Description = "The IP is detected automatically by considering the environment. No parameter required.")]
+ [Display(ResourceType = typeof(Resources), Name = nameof(Resources.IpResolverType_Auto_Name), Description = nameof(Resources.IpResolverType_Auto_Description))]
Auto,
///
/// The IP is detected by asking an external service. As a result, we resolve
/// to the public IP.
///
- [Display(Name = "Public", Description = "The IP is detected by asking an external service (https://www.ipify.org/) about the own IP. No parameter required. Use this, when the server is running on a server and should be reachable from the internet. Firewall is required to be opened for the ports of game, connect and chat servers.")]
+ [Display(ResourceType = typeof(Resources), Name = nameof(Resources.IpResolverType_Public_Name), Description = nameof(Resources.IpResolverType_Public_Description))]
Public,
///
/// The IP is detected by asking the DNS about the IP of the own host name.
///
- [Display(Name = "Local", Description = "The IP is detected by asking the DNS about the IP of the own host name. The first IP is used. No parameter required. Use this, if you want to use the server within a local LAN, e.g. at home.")]
+ [Display(ResourceType = typeof(Resources), Name = "IpResolverType_Local_Name", Description = "IpResolverType_Local_Description")]
Local,
///
/// The IP is resolved as '127.127.127.127'.
///
- [Display(Name = "Loopback", Description = "The IP is resolved as '127.127.127.127'. No parameter required. Use this, if you want to use the server and client just within your own computer, e.g. during development.")]
+ [Display(ResourceType = typeof(Resources), Name = "IpResolverType_Loopback_Name", Description = "IpResolverType_Loopback_Description")]
Loopback,
///
/// The IP or a host name can be set manually.
///
- [Display(Name = "Custom", Description = "The IP or a host name can be set manually. Use this, if the other options don't work for you.")]
+ [Display(ResourceType = typeof(Resources), Name = "IpResolverType_Custom_Name", Description = "IpResolverType_Custom_Description")]
Custom,
}
\ No newline at end of file
diff --git a/src/Network/MUnique.OpenMU.Network.csproj b/src/Network/MUnique.OpenMU.Network.csproj
index 2a918f839..2ad6e62af 100644
--- a/src/Network/MUnique.OpenMU.Network.csproj
+++ b/src/Network/MUnique.OpenMU.Network.csproj
@@ -54,4 +54,27 @@
+
+
+ True
+ True
+ PlugInResources.resx
+
+
+ True
+ True
+ Resources.resx
+
+
+
+
+ PublicResXFileCodeGenerator
+ PlugInResources.Designer.cs
+
+
+ PublicResXFileCodeGenerator
+ Resources.Designer.cs
+
+
+
diff --git a/src/Network/PlugIns/OpenSourceClientNetworkEncryptionFactoryPlugIn.cs b/src/Network/PlugIns/OpenSourceClientNetworkEncryptionFactoryPlugIn.cs
index 37194b8cb..e8cb1c938 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 = nameof(PlugInResources.OpenSourceClientNetworkEncryptionFactoryPlugIn_Name), Description = nameof(PlugInResources.OpenSourceClientNetworkEncryptionFactoryPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..53b0e9b0f 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 = nameof(PlugInResources.PreSeason6NetworkEncryptionFactoryPlugIn_Name), Description = nameof(PlugInResources.PreSeason6NetworkEncryptionFactoryPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..3b142dc8f 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 = nameof(PlugInResources.Season6Episode3NetworkEncryptionFactoryPlugIn_Name), Description = nameof(PlugInResources.Season6Episode3NetworkEncryptionFactoryPlugIn_Description), ResourceType = typeof(PlugInResources))]
[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..cd91ff3f5 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 = nameof(PlugInResources.Version075NetworkEncryptionFactoryPlugIn_Name), Description = nameof(PlugInResources.Version075NetworkEncryptionFactoryPlugIn_Description), ResourceType = typeof(PlugInResources))]
[Guid("E83F05AC-18D4-4714-AEFB-2F4F3B37951C")]
public class Version075NetworkEncryptionFactoryPlugIn : INetworkEncryptionFactoryPlugIn
{
diff --git a/src/Network/Properties/PlugInResources.Designer.cs b/src/Network/Properties/PlugInResources.Designer.cs
new file mode 100644
index 000000000..87fe28055
--- /dev/null
+++ b/src/Network/Properties/PlugInResources.Designer.cs
@@ -0,0 +1,135 @@
+//------------------------------------------------------------------------------
+//
+// 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.Network.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", "18.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ public class PlugInResources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal PlugInResources() {
+ }
+
+ ///
+ /// Returns the cached ResourceManager instance used by this class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ 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.Network.Properties.PlugInResources", typeof(PlugInResources).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)]
+ public static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to A plugin which provides network encryptors and decryptors for the english open source game clients of season 6 episode 3, version 2.04d.
+ ///
+ public static string OpenSourceClientNetworkEncryptionFactoryPlugIn_Description {
+ get {
+ return ResourceManager.GetString("OpenSourceClientNetworkEncryptionFactoryPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Network Encryption - Season 6 Episode 3, Open Source Client.
+ ///
+ public static string OpenSourceClientNetworkEncryptionFactoryPlugIn_Name {
+ get {
+ return ResourceManager.GetString("OpenSourceClientNetworkEncryptionFactoryPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to A plugin which provides network encryptors and decryptors for game clients before season 6..
+ ///
+ public static string PreSeason6NetworkEncryptionFactoryPlugIn_Description {
+ get {
+ return ResourceManager.GetString("PreSeason6NetworkEncryptionFactoryPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Network Encryption - Before Season 6.
+ ///
+ public static string PreSeason6NetworkEncryptionFactoryPlugIn_Name {
+ get {
+ return ResourceManager.GetString("PreSeason6NetworkEncryptionFactoryPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to A plugin which provides network encryptors and decryptors for english game clients of season 6 episode 3, version 1.04d.
+ ///
+ public static string Season6Episode3NetworkEncryptionFactoryPlugIn_Description {
+ get {
+ return ResourceManager.GetString("Season6Episode3NetworkEncryptionFactoryPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Network Encryption - Season 6 Episode 3, 1.04d, ENG.
+ ///
+ public static string Season6Episode3NetworkEncryptionFactoryPlugIn_Name {
+ get {
+ return ResourceManager.GetString("Season6Episode3NetworkEncryptionFactoryPlugIn_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to A plugin which provides network encryptors and decryptors for game clients of version 0.75 (server version 0.65).
+ ///
+ public static string Version075NetworkEncryptionFactoryPlugIn_Description {
+ get {
+ return ResourceManager.GetString("Version075NetworkEncryptionFactoryPlugIn_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Network Encryption - 0.75.
+ ///
+ public static string Version075NetworkEncryptionFactoryPlugIn_Name {
+ get {
+ return ResourceManager.GetString("Version075NetworkEncryptionFactoryPlugIn_Name", resourceCulture);
+ }
+ }
+ }
+}
diff --git a/src/Network/Properties/PlugInResources.resx b/src/Network/Properties/PlugInResources.resx
new file mode 100644
index 000000000..2b1d47e09
--- /dev/null
+++ b/src/Network/Properties/PlugInResources.resx
@@ -0,0 +1,144 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+ 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
+
+
+ Network Encryption - Before Season 6
+
+
+ A plugin which provides network encryptors and decryptors for game clients before season 6.
+
+
+ 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
+
+
+ Network Encryption - 0.75
+
+
+ A plugin which provides network encryptors and decryptors for game clients of version 0.75 (server version 0.65)
+
+
diff --git a/src/Network/Properties/Resources.Designer.cs b/src/Network/Properties/Resources.Designer.cs
new file mode 100644
index 000000000..d2d48645b
--- /dev/null
+++ b/src/Network/Properties/Resources.Designer.cs
@@ -0,0 +1,153 @@
+//------------------------------------------------------------------------------
+//
+// 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.Network.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", "18.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ public class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ ///
+ /// Returns the cached ResourceManager instance used by this class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ 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.Network.Properties.Resources", typeof(Resources).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)]
+ public static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The IP is detected automatically by considering the environment. No parameter required..
+ ///
+ public static string IpResolverType_Auto_Description {
+ get {
+ return ResourceManager.GetString("IpResolverType_Auto_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Automatic.
+ ///
+ public static string IpResolverType_Auto_Name {
+ get {
+ return ResourceManager.GetString("IpResolverType_Auto_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The IP or a host name can be set manually. Use this, if the other options don't work for you..
+ ///
+ public static string IpResolverType_Custom_Description {
+ get {
+ return ResourceManager.GetString("IpResolverType_Custom_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Custom.
+ ///
+ public static string IpResolverType_Custom_Name {
+ get {
+ return ResourceManager.GetString("IpResolverType_Custom_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The IP is detected by asking the DNS about the IP of the own host name. The first IP is used. No parameter required. Use this, if you want to use the server within a local LAN, e.g. at home..
+ ///
+ public static string IpResolverType_Local_Description {
+ get {
+ return ResourceManager.GetString("IpResolverType_Local_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Local.
+ ///
+ public static string IpResolverType_Local_Name {
+ get {
+ return ResourceManager.GetString("IpResolverType_Local_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The IP is resolved as '127.127.127.127'. No parameter required. Use this, if you want to use the server and client just within your own computer, e.g. during development..
+ ///
+ public static string IpResolverType_Loopback_Description {
+ get {
+ return ResourceManager.GetString("IpResolverType_Loopback_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Loopback.
+ ///
+ public static string IpResolverType_Loopback_Name {
+ get {
+ return ResourceManager.GetString("IpResolverType_Loopback_Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The IP is detected by asking an external service (https://www.ipify.org/) about the own IP. No parameter required. Use this, when the server is running on a server and should be reachable from the internet. Firewall is required to be opened for the ports of game, connect and chat servers..
+ ///
+ public static string IpResolverType_Public_Description {
+ get {
+ return ResourceManager.GetString("IpResolverType_Public_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Public.
+ ///
+ public static string IpResolverType_Public_Name {
+ get {
+ return ResourceManager.GetString("IpResolverType_Public_Name", resourceCulture);
+ }
+ }
+ }
+}
diff --git a/src/Network/Properties/Resources.resx b/src/Network/Properties/Resources.resx
new file mode 100644
index 000000000..44c972ed8
--- /dev/null
+++ b/src/Network/Properties/Resources.resx
@@ -0,0 +1,131 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 1.3
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Automatic
+
+
+ The IP is detected automatically by considering the environment. No parameter required.
+
+
+ Public
+
+
+ The IP is detected by asking an external service (https://www.ipify.org/) about the own IP. No parameter required. Use this, when the server is running on a server and should be reachable from the internet. Firewall is required to be opened for the ports of game, connect and chat servers.
+
+
+ Local
+
+
+ The IP is detected by asking the DNS about the IP of the own host name. The first IP is used. No parameter required. Use this, if you want to use the server within a local LAN, e.g. at home.
+
+
+ Loopback
+
+
+ The IP is resolved as '127.127.127.127'. No parameter required. Use this, if you want to use the server and client just within your own computer, e.g. during development.
+
+
+ Custom
+
+
+ The IP or a host name can be set manually. Use this, if the other options don't work for you.
+
+
\ No newline at end of file
diff --git a/src/Persistence/EntityFramework/EntityDataContext.cs b/src/Persistence/EntityFramework/EntityDataContext.cs
index 20ba7d70e..f3997b6f0 100644
--- a/src/Persistence/EntityFramework/EntityDataContext.cs
+++ b/src/Persistence/EntityFramework/EntityDataContext.cs
@@ -49,7 +49,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
{
entity.Property(e => e.PvpEnabled).HasDefaultValue(true);
});
- modelBuilder.Entity();
+ modelBuilder.Entity().Apply();
modelBuilder.Entity();
modelBuilder.Entity();
@@ -57,20 +57,38 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
modelBuilder.Entity().Apply();
modelBuilder.Entity().Apply();
modelBuilder.Entity().Apply();
- modelBuilder.Entity().Apply();
+ modelBuilder.Entity().Apply();
+ modelBuilder.Entity().Apply();
+ modelBuilder.Entity().Apply();
+ modelBuilder.Entity().Apply();
+ modelBuilder.Entity().Apply();
+ modelBuilder.Entity().Apply();
+ modelBuilder.Entity().Apply();
+ modelBuilder.Entity().Apply();
+ modelBuilder.Entity().Apply();
+ modelBuilder.Entity().Apply();
+ modelBuilder.Entity().Apply();
+ modelBuilder.Entity().Apply();
modelBuilder.Entity().Apply();
+ modelBuilder.Entity().Apply();
+ modelBuilder.Entity().Apply();
modelBuilder.Entity().Apply();
modelBuilder.Entity().Apply();
- modelBuilder.Entity().Apply();
- modelBuilder.Entity().Apply();
+ modelBuilder.Entity().Apply();
+ modelBuilder.Entity().Apply();
+ modelBuilder.Entity().Apply();
+ modelBuilder.Entity().Apply();
+ modelBuilder.Entity().Apply();
+ modelBuilder.Entity().Apply();
modelBuilder.Entity().Apply();
+ modelBuilder.Entity().Apply();
+ modelBuilder.Entity().Apply();
modelBuilder.Entity().Apply();
- modelBuilder.Entity().Apply();
modelBuilder.Entity().Apply();
modelBuilder.Entity().Apply();
modelBuilder.Entity().Apply();
- modelBuilder.Entity().Apply();
- modelBuilder.Entity().Apply();
+ modelBuilder.Entity().Apply();
+ modelBuilder.Entity().Apply();
// join entity keys:
this.AddJoinDefinitions(modelBuilder);
diff --git a/src/Persistence/EntityFramework/Extensions/LocalizedStringConverter.cs b/src/Persistence/EntityFramework/Extensions/LocalizedStringConverter.cs
new file mode 100644
index 000000000..7a1ffdef4
--- /dev/null
+++ b/src/Persistence/EntityFramework/Extensions/LocalizedStringConverter.cs
@@ -0,0 +1,28 @@
+//
+// Licensed under the MIT License. See LICENSE file in the project root for full license information.
+//
+
+namespace MUnique.OpenMU.Persistence.EntityFramework.Extensions;
+
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using MUnique.OpenMU.Interfaces;
+
+///
+/// A value converter for which stores only the underlying string value.
+///
+internal class LocalizedStringConverter : ValueConverter
+{
+ ///
+ /// Gets the singleton instance of the .
+ ///
+ public static LocalizedStringConverter Instance { get; } = new();
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ private LocalizedStringConverter()
+
+ : base(value => value.Value ?? string.Empty, value => new LocalizedString(value))
+ {
+ }
+}
\ No newline at end of file
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/Extensions/ModelBuilder/CharacterExtensions.cs b/src/Persistence/EntityFramework/Extensions/ModelBuilder/CharacterExtensions.cs
index 1e56d93ba..46ed821e2 100644
--- a/src/Persistence/EntityFramework/Extensions/ModelBuilder/CharacterExtensions.cs
+++ b/src/Persistence/EntityFramework/Extensions/ModelBuilder/CharacterExtensions.cs
@@ -37,6 +37,7 @@ public static void Apply(this EntityTypeBuilder builder)
/// The builder.
public static void Apply(this EntityTypeBuilder builder)
{
+ builder.Property(p => p.Name).HasConversion(LocalizedStringConverter.Instance);
builder.HasMany(c => c.RawBaseAttributeValues)
.WithOne(c => c.CharacterClass!);
}
diff --git a/src/Persistence/EntityFramework/Extensions/ModelBuilder/GameConfigurationExtensions.cs b/src/Persistence/EntityFramework/Extensions/ModelBuilder/GameConfigurationExtensions.cs
index 598ab978c..1ee750ea0 100644
--- a/src/Persistence/EntityFramework/Extensions/ModelBuilder/GameConfigurationExtensions.cs
+++ b/src/Persistence/EntityFramework/Extensions/ModelBuilder/GameConfigurationExtensions.cs
@@ -23,4 +23,14 @@ public static void Apply(this EntityTypeBuilder builder)
builder.Property(c => c.ExperienceFormula).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))))");
builder.Property(c => c.MasterExperienceFormula).HasDefaultValue("(505 * level * level * level) + (35278500 * level) + (228045 * level * level)");
}
+
+ ///
+ /// Applies the settings for the entity.
+ ///
+ /// The builder.
+ public static void Apply(this EntityTypeBuilder builder)
+ {
+ builder.Property(p => p.Name).HasConversion(LocalizedStringConverter.Instance);
+ builder.Property(p => p.Description).HasConversion(LocalizedStringConverter.Instance);
+ }
}
\ No newline at end of file
diff --git a/src/Persistence/EntityFramework/Extensions/ModelBuilder/GameMapDefinitionExtensions.cs b/src/Persistence/EntityFramework/Extensions/ModelBuilder/GameMapDefinitionExtensions.cs
index dc132f982..0cbd8e93e 100644
--- a/src/Persistence/EntityFramework/Extensions/ModelBuilder/GameMapDefinitionExtensions.cs
+++ b/src/Persistence/EntityFramework/Extensions/ModelBuilder/GameMapDefinitionExtensions.cs
@@ -18,9 +18,19 @@ internal static class GameMapDefinitionExtensions
/// The builder.
public static void Apply(this EntityTypeBuilder builder)
{
+ builder.Property(p => p.Name).HasConversion(LocalizedStringConverter.Instance);
builder.HasMany(map => map.RawEnterGates);
builder.HasMany(map => map.RawExitGates).WithOne(g => g.RawMap);
builder.HasOne(map => map.RawSafezoneMap);
builder.HasMany(map => map.RawMonsterSpawns);
}
+
+ ///
+ /// Applies the settings for the entity.
+ ///
+ /// The builder.
+ public static void Apply(this EntityTypeBuilder builder)
+ {
+ builder.Property(p => p.Name).HasConversion(LocalizedStringConverter.Instance);
+ }
}
\ No newline at end of file
diff --git a/src/Persistence/EntityFramework/Extensions/ModelBuilder/ItemExtensions.cs b/src/Persistence/EntityFramework/Extensions/ModelBuilder/ItemExtensions.cs
index 2d7af5916..f1d81f3b7 100644
--- a/src/Persistence/EntityFramework/Extensions/ModelBuilder/ItemExtensions.cs
+++ b/src/Persistence/EntityFramework/Extensions/ModelBuilder/ItemExtensions.cs
@@ -12,6 +12,15 @@ namespace MUnique.OpenMU.Persistence.EntityFramework.Extensions.ModelBuilder;
///
internal static class ItemExtensions
{
+ ///
+ /// Applies the settings for the entity.
+ ///
+ /// The builder.
+ public static void Apply(this EntityTypeBuilder builder)
+ {
+ builder.Property(p => p.Name).HasConversion(LocalizedStringConverter.Instance);
+ }
+
///
/// Applies the settings for the entity.
///
@@ -27,6 +36,7 @@ public static void Apply(this EntityTypeBuilder builder)
/// The builder.
public static void Apply(this EntityTypeBuilder builder)
{
+ builder.Property(p => p.Name).HasConversion(LocalizedStringConverter.Instance);
builder.HasMany(isg => isg.RawItems).WithOne(item => item.RawItemSetGroup!);
}
@@ -39,6 +49,25 @@ public static void Apply(this EntityTypeBuilder build
builder.Ignore(d => d.BaseValueElement);
}
+ ///
+ /// Applies the settings for the entity.
+ ///
+ /// The builder.
+ public static void Apply(this EntityTypeBuilder builder)
+ {
+ builder.Property(p => p.Name).HasConversion(LocalizedStringConverter.Instance);
+ builder.Property(p => p.Description).HasConversion(LocalizedStringConverter.Instance);
+ }
+
+ ///
+ /// Applies the settings for the entity.
+ ///
+ /// The builder.
+ public static void Apply(this EntityTypeBuilder builder)
+ {
+ builder.Property(p => p.Description).HasConversion(LocalizedStringConverter.Instance);
+ }
+
///
/// Applies the settings for the entity.
///
@@ -46,4 +75,59 @@ public static void Apply(this EntityTypeBuilder build
public static void Apply(this EntityTypeBuilder builder)
{
}
+
+ ///
+ /// Applies the settings for the entity.
+ ///
+ /// The builder.
+ public static void Apply(this EntityTypeBuilder builder)
+ {
+ builder.Property(p => p.Description).HasConversion(LocalizedStringConverter.Instance);
+ }
+
+ ///
+ /// Applies the settings for the entity.
+ ///
+ /// The builder.
+ public static void Apply(this EntityTypeBuilder builder)
+ {
+ builder.Property(p => p.Description).HasConversion(LocalizedStringConverter.Instance);
+ }
+
+ ///
+ /// Applies the settings for the entity.
+ ///
+ /// The builder.
+ public static void Apply(this EntityTypeBuilder builder)
+ {
+ builder.Property(p => p.Name).HasConversion(LocalizedStringConverter.Instance);
+ }
+
+ ///
+ /// Applies the settings for the entity.
+ ///
+ /// The builder.
+ public static void Apply(this EntityTypeBuilder builder)
+ {
+ builder.Property(p => p.Name).HasConversion(LocalizedStringConverter.Instance);
+ builder.Property(p => p.Description).HasConversion(LocalizedStringConverter.Instance);
+ }
+
+ ///
+ /// Applies the settings for the entity.
+ ///
+ /// The builder.
+ public static void Apply(this EntityTypeBuilder builder)
+ {
+ builder.Property(p => p.Name).HasConversion(LocalizedStringConverter.Instance);
+ }
+
+ ///
+ /// Applies the settings for the entity.
+ ///
+ /// The builder.
+ public static void Apply(this EntityTypeBuilder builder)
+ {
+ builder.Property(p => p.Description).HasConversion(LocalizedStringConverter.Instance);
+ }
}
\ No newline at end of file
diff --git a/src/Persistence/EntityFramework/Extensions/ModelBuilder/MiniGameExtensions.cs b/src/Persistence/EntityFramework/Extensions/ModelBuilder/MiniGameExtensions.cs
new file mode 100644
index 000000000..44a6aec74
--- /dev/null
+++ b/src/Persistence/EntityFramework/Extensions/ModelBuilder/MiniGameExtensions.cs
@@ -0,0 +1,46 @@
+//
+// Licensed under the MIT License. See LICENSE file in the project root for full license information.
+//
+
+namespace MUnique.OpenMU.Persistence.EntityFramework.Extensions.ModelBuilder;
+
+using Microsoft.EntityFrameworkCore.Metadata.Builders;
+using MUnique.OpenMU.Persistence.EntityFramework.Model;
+
+///
+/// Extensions for the -related .
+///
+internal static class MiniGameExtensions
+{
+ ///
+ /// Applies the settings for the entity.
+ ///
+ /// The builder.
+ public static void Apply(this EntityTypeBuilder builder)
+ {
+ builder.Property(p => p.Description).HasConversion(LocalizedStringConverter.Instance);
+ builder.Property(p => p.Message).HasConversion(LocalizedStringConverter.Instance);
+ }
+
+
+ ///
+ /// Applies the settings for the entity.
+ ///
+ /// The builder.
+ public static void Apply(this EntityTypeBuilder builder)
+ {
+ builder.Property(p => p.Description).HasConversion(LocalizedStringConverter.Instance);
+ builder.Property(p => p.Message).HasConversion(LocalizedStringConverter.Instance);
+ }
+
+
+ ///
+ /// Applies the settings for the entity.
+ ///
+ /// The builder.
+ public static void Apply(this EntityTypeBuilder builder)
+ {
+ builder.Property(p => p.Name).HasConversion(LocalizedStringConverter.Instance);
+ builder.Property(p => p.Description).HasConversion(LocalizedStringConverter.Instance);
+ }
+}
\ No newline at end of file
diff --git a/src/Persistence/EntityFramework/Extensions/ModelBuilder/MonsterExtensions.cs b/src/Persistence/EntityFramework/Extensions/ModelBuilder/MonsterExtensions.cs
index 0457eb866..7bdc9fe6a 100644
--- a/src/Persistence/EntityFramework/Extensions/ModelBuilder/MonsterExtensions.cs
+++ b/src/Persistence/EntityFramework/Extensions/ModelBuilder/MonsterExtensions.cs
@@ -19,6 +19,7 @@ internal static class MonsterExtensions
public static void Apply(this EntityTypeBuilder builder)
{
builder.HasMany().WithOne(q => q.RawQuestGiver);
+ builder.Property(m => m.Designation).HasConversion(LocalizedStringConverter.Instance);
}
///
diff --git a/src/Persistence/EntityFramework/Extensions/ModelBuilder/QuestExtensions.cs b/src/Persistence/EntityFramework/Extensions/ModelBuilder/QuestExtensions.cs
new file mode 100644
index 000000000..c7179049d
--- /dev/null
+++ b/src/Persistence/EntityFramework/Extensions/ModelBuilder/QuestExtensions.cs
@@ -0,0 +1,23 @@
+//
+// Licensed under the MIT License. See LICENSE file in the project root for full license information.
+//
+
+namespace MUnique.OpenMU.Persistence.EntityFramework.Extensions.ModelBuilder;
+
+using Microsoft.EntityFrameworkCore.Metadata.Builders;
+using MUnique.OpenMU.Persistence.EntityFramework.Model;
+
+///
+/// Extensions for the item-related .
+///
+internal static class QuestExtensions
+{
+ ///
+ /// Applies the settings for the entity.
+ ///
+ /// The builder.
+ public static void Apply(this EntityTypeBuilder builder)
+ {
+ builder.Property(p => p.Name).HasConversion(LocalizedStringConverter.Instance);
+ }
+}
\ No newline at end of file
diff --git a/src/Persistence/EntityFramework/Extensions/ModelBuilder/SkillExtensions.cs b/src/Persistence/EntityFramework/Extensions/ModelBuilder/SkillExtensions.cs
index 85ac56266..00d5d0fcb 100644
--- a/src/Persistence/EntityFramework/Extensions/ModelBuilder/SkillExtensions.cs
+++ b/src/Persistence/EntityFramework/Extensions/ModelBuilder/SkillExtensions.cs
@@ -12,6 +12,24 @@ namespace MUnique.OpenMU.Persistence.EntityFramework.Extensions.ModelBuilder;
///
internal static class SkillExtensions
{
+ ///
+ /// Applies the settings for the entity.
+ ///
+ /// The builder.
+ public static void Apply(this EntityTypeBuilder builder)
+ {
+ builder.Property(p => p.Name).HasConversion(LocalizedStringConverter.Instance);
+ }
+
+ ///
+ /// Applies the settings for the entity.
+ ///
+ /// The builder.
+ public static void Apply(this EntityTypeBuilder builder)
+ {
+ builder.Property(p => p.Name).HasConversion(LocalizedStringConverter.Instance);
+ }
+
///
/// Applies the settings for the entity.
///
@@ -27,6 +45,15 @@ public static void Apply(this EntityTypeBuilder builder)
builder.Ignore(s => s.Attributes);
}
+ ///
+ /// Applies the settings for the entity.
+ ///
+ /// The builder.
+ public static void Apply(this EntityTypeBuilder builder)
+ {
+ builder.Property(p => p.Name).HasConversion(LocalizedStringConverter.Instance);
+ }
+
///
/// Applies the settings for the entity.
///
@@ -35,4 +62,13 @@ public static void Apply(this EntityTypeBuilder builder)
{
builder.HasOne(s => s.RawRoot);
}
+
+ ///
+ /// Applies the settings for the entity.
+ ///
+ /// The builder.
+ public static void Apply(this EntityTypeBuilder builder)
+ {
+ builder.Property(p => p.Name).HasConversion(LocalizedStringConverter.Instance);
+ }
}
\ No newline at end of file
diff --git a/src/Persistence/EntityFramework/Json/JsonObjectDeserializer.cs b/src/Persistence/EntityFramework/Json/JsonObjectDeserializer.cs
index d49e42286..2902bbe21 100644
--- a/src/Persistence/EntityFramework/Json/JsonObjectDeserializer.cs
+++ b/src/Persistence/EntityFramework/Json/JsonObjectDeserializer.cs
@@ -4,6 +4,7 @@
namespace MUnique.OpenMU.Persistence.EntityFramework.Json;
+using MUnique.OpenMU.PlugIns;
using System.Text.Json;
///
@@ -16,6 +17,9 @@ public class JsonObjectDeserializer : MUnique.OpenMU.Persistence.Json.JsonObject
protected override void BeforeDeserialize(JsonSerializerOptions options)
{
base.BeforeDeserialize(options);
- options.Converters.Add(new BinaryAsHexJsonConverter());
+ foreach (var converter in JsonConverterRegistry.Converters)
+ {
+ options.Converters.Add(converter);
+ }
}
}
\ 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